对837-15257 I/O板的逆向研究 | manalogues
文章

对837-15257 I/O板的逆向研究

概述

837-15257是SEGA为其街机游戏设计开发的第四代I/O板的内部料号,作为上一代837-14572的pin2pin替代设计。支持共计32个数字输入(2个玩家各14bit输入,2个投币输入,TEST/TILT按钮输入),8个模拟输入和22个数字输出(其中两个为投币计数器输出(COUNTER/COIN METER),其余为泛用输出)。其中,数字输出1-20均做了电流加强设计,以便直接驱动某些部件(LED等)。与14572仅支持JVS不同,本世代以USB通信为主要通信手段,仅部分型号支持JVS标准,且数量较少(参考分支型号)。

分支型号

目前,已知的837-15257I/O板有四种分支,分别为837-15257,837-15257-01,837-15257-02,837-15257-91。其中,837-15257是最完整的版本,同时兼容JVS和USB连接,837-15257-01在此基础上阉割了JVS相关硬件,仅支持USB连接。837-15257-02似乎是中国大陆地区的专供版本,即使即使相关机台使用说明书中的电气原理图中标注的仍然是-01;其在-01的基础上替换了某些元器件的型号以便在中国大陆地区生产(例如,瑞萨的PS2801-4光耦被替换成了德仪的TLP291-4)。837-15257-91无法查到过多的信息,仅能确认它的功能与无后缀的版本是一致的,但取消了RG1

MCU

I/O板的核心是一颗瑞萨RX621 32bit MCU,具体型号为R5F56216BDFB,使用LQFP-144封装,拥有384KB ROM,32KB Data Flash和64KB RAM。该MCU具有103个I/O引脚,1个8通道的12bit A/D和2个4通道的12bit A/D,并支持USB、CAN、IIC、SCI、RSPI等通信接口及协议。针脚定义请查看这里

目前,同封装下(LQFP144-0.5mm),国内比较容易获得的除R5F56216BDFB外,还有R5F562N8BDFB,其中,2N代表RX621N,8代表ROM/RAM/Data Flash分别为512KB/96KB/32KB。尽管容量增加,但后者的价格反而更低,最便宜的甚至仅有前者的1/3。RX62N与RX621同属一个系列,相较于后者仅增加了以太网控制器,暂时还未测试固件是否完全通用,如果通用,那么可以省下相当可观的BOM成本。

接口针脚定义

下文中的物理接口型号均使用JST标准名称。

CN1: NH-5P, 12V电源输入

序号 名称
1 +12V
2 +12V
3 NC
4 GND
5 GND

CN2: NH-5P, 12V电源输出

序号 名称
1 +12V
2 +12V
3 NC
4 GND
5 GND

CN3: RA-60P,数字输入

+5V,+12V为电源输出,OUTPUT为数字输出,其余均为数字输入。

此处标注的名称来自于机台用户手册上对各针脚的命名1,与实际用途并无关联,每款游戏都会自行定义自己的接线方式。

名称 序号 序号 名称
+EXV 1 2 +EXV
5V 3 4 5V
5V 5 6 5V
5V 7 8 5V
GND 9 10 GND
GND 11 12 GND
GND 13 14 GND
GND 15 16 GND
1P START 17 18 2P START
1P RIGHT 19 20 2P RIGHT
1P LEFT 21 22 2P LEFT
1P UP 23 24 2P UP
1P DOWN 25 26 2P DOWN
1P PUSH1 27 28 2P PUSH1
1P PUSH2 29 30 2P PUSH2
1P PUSH3 31 32 2P PUSH3
1P PUSH4 33 34 2P PUSH4
1P PUSH5 35 36 2P PUSH5
1P PUSH6 37 38 2P PUSH6
1P PUSH7 39 40 2P PUSH7
1P SERVICE 41 42 2P SERVICE
TEST 43 44 TILT
COIN IN1 45 46 COIN IN2
1P PUSH8 47 48 2P PUSH8
COUNTER1 49 50 COUNTER2
OUTPUT 1 51 52 OUTPUT 2
OUTPUT 3 53 54 OUTPUT 4
OUTPUT 5 55 56 OUTPUT 6
+12V 57 58 +12V
+12V 59 60 +12V

CN4: USB TYPE-B, JVS&CN5: USB TYPE-A, JVS

01和02型均为空焊。JVS视频标准(JAMMA Video Standard)虽然使用USB接口作为物理接口,但并没有使用USB的针脚定义和协议,而是自行修改了4根针脚的定义。其中,TYPE-A接口用于连接其他下行设备,而TYPE-B接口用于连接基板或上游设备。

CN4与CN5共享数据引脚,但二者的SENSE引脚相互独立。数据引脚由IC3引出。

序号 USB引脚定义 JVS定义2
1 VCC SENSE
2 D- RS-485 B
3 D+ RS-485 A
4 GND GND

CN6: RA-26P, ADC

名称 序号 序号 名称
AVCC 1 2 AVCC
A/D 1CH 3 4 A/D 5CH
AGND 5 6 AGND
AVCC 7 8 AVCC
A/D 2CH 9 10 A/D 6CH
AGND 11 12 AGND
AVCC 13 14 AVCC
A/D 3CH 15 16 A/D 7CH
AGND 17 18 AGND
AVCC 19 20 AVCC
A/D 4CH 21 22 A/D 8CH
AGND 23 24 AGND
NC 25 26 NC

CN7: NH-4P, 5V输入

序号 名称
1 +5V
2 +5V
3 GND
4 GND

CN8: NH-4P, 5V输出

序号 名称
1 +5V
2 +5V
3 GND
4 GND

CN9:RA-20P, 主要输出

+5V,+12V为电源输出,OUTPUT为数字输出。接线用途随机台种类变化而变化。

名称 序号 序号 名称
+5V 1 2 +5V
GND 3 4 GND
OUTPUT 7 5 6 OUTPUT 8
OUTPUT 9 7 8 OUTPUT 10
OUTPUT 11 9 10 OUTPUT 12
OUTPUT 13 11 12 OUTPUT 14
OUTPUT 15 13 14 OUTPUT 16
OUTPUT 17 15 16 OUTPUT 18
OUTPUT 19 17 18 OUTPUT 20
+12V 19 20 +12V

CN10: PH-8P

用途暂时未知,01和02型均为空焊。

CN11: XA-3P, CAN

CN11CN12本质上是同源的,二者信号均来源于一颗TJA1050生成的CAN信号。

01和02型均为空焊。

序号 名称
1 CANL
2 CANH
3 GND

CN12: XA-5P, CAN

同为CAN信号,但被扩展成了5pin。

01和02型均为空焊。

序号 名称
1 CANL
2 CANH
3 GND
4 CANL
5 CANH,串接一个120欧的CAN终端电阻

CN13: USB Mini-B

与上位机(ALLS基板)通信的接口。USB供电并未连接。

主要IC

各IC的针脚定义以及与MCU的连接请参照MCU的I/O定义以及与其它元器件的连接

IC1:Renesas RX621系列,MCU

IC2:NXP TJA1050,高速CAN收发器

用于CN11CN12的CAN通信,837-15257-01和-02型均空焊。

IC3:ADI LTC2854CDD/IDD/HDD,RS485收发器

用于CN10的RS485通信,837-15257-01和-02型均空焊。

IC4:ROHM BA10393F-E2,两路地感比较器

837-15257-01和-02型均空焊。

IC5:ROHM BA10393F-E2,两路地感比较器

与投币逻辑有关。原理及具体用途请参照MCU的I/O定义以及与其它元器件的连接的IC5部分。

IC6:未知,丝印SAXOU

SOT-25,猜测是一个LDO,与复位逻辑有关。

RG1:ROHM BD9327EFJ,集成FFT的2A降压转换器

将12V输入电压转为5V输出电压。仅存在于837-15257型中,且缺失外围元件,并没有与5V总线连接;在其余板型中则为空焊。可以看出,本来的用途很可能是在未接入5V电源的情况下,从12V取电并转换出5V以供下游RG2使用。另外,RG1还有一组配套的mos电路控制着RG1的使能引脚,用于在接入5V电源的情况下关闭RG1的输出。

由于并没有与5V总线连接,推测应该是取消了这个设计,不知为何仍然出现在了837-15257型中(BOM没删干净)

RG2:TI LM1117MPX-3.3,800mA LDO

将5V输入电压转为MCU使用的3.3V输出电压。

PC1-8:Renesas PS2801-4/TOSHIBA TLP291-4,四路晶体管输出光耦

用于隔离数字输入,保护MCU。后者为-02型号采用的物料,由于Datasheet上二者的测试条件不同,因此数据不能直接拿来比较,不过其差异仍然是微秒级别的:

MCU电路验证

根据datasheet设计了一个验证板来测试电路设计,以及能否刷写特定固件。为了保证容错、便于进行debug,这块板子在设计时添加了很多跳线和接口,但不出意外的,这块板子依旧存在设计失误(在下文中会提到),加之只是为了测试原理,诸如ESD、防反接、防过流等设计都没有做,因此不会提供原理图/Gerber,不过用于针脚定义的测试已经绰绰有余。

(第一次用嘉立创的彩色丝印还赶上了五一放假,前前后后花了近10天才送到。彩色丝印确实好看,但字符没有普通丝印清晰。)

pcb

电源

  • VCC&VSS:3.3V与GND
  • PLLVCC&PLLVSS:内部PLL模块的供电,需要解耦后连接VCC
  • VCC_USB&VSS_USB:USB模块供电,即使不使用USB功能也应直连VCC&GND
  • AVCC&AVSS:直连VCC&GND
  • VREFH&VREFL:直连AVCC&AVSS
  • VCL:通过100nF电容接地
  • CNVSS:用途未知,通过电阻下拉

时钟

  • XTAL&EXTAL:连接晶振,其中EXTAL也可以直接输入外部时钟。由于USB的时钟由主时钟4倍频得到,若要使用USB功能(UCLK=48MHz),外部时钟必须为12MHz
  • XCIN&XCOUT:连接32.768kHz的RTC时钟。可选,不使用时应将XCIN通过电阻上拉到VCC或下拉到VSS,XCOUT置为开路

系统控制

  • BSCANP:边界扫描(Boundary Scan)引脚,高电平时启用边界扫描功能。通过电阻下拉
  • EMLE:仿真器引脚,高电平时启用片上仿真器功能。通过电阻下拉
  • RST#:重置引脚,低电平有效。通过电阻上拉,可以通过RST开关拉低

运行模式控制

所有运行模式引脚都不可在运行中更改,也不能设置为不存在的组合。

  • MDE:字节序选择。低电平为小端法,高电平为大端法。15257使用小端法

  • MD0&MD1:模式控制引脚,会与SYSCR0(系统控制寄存器0)中的ROME(内部ROM允许)和EXBE(外部总线允许)共同选择MCU的运行模式。只有在ROME=1(内部ROM有效)且EXBE=0(单芯片模式)的情况下(以上为复位后的默认值),MD0&MD1才有意义。

    MD0 MD1 运行模式
    1 1 单芯片模式
    0 1 USB引导模式
    1 0 引导模式(使用串口连接)

(因为官方的硬件手册上列出的表格是MD1在前,MD0在后,我因为没有注意到,所以理解的模式选择一直是反的,甚至丝印上的模式选择也写反了,导致最初debug的时候怎么都进不了引导模式,怀疑人生了)

其它非I/O外围引脚

  • WDTOVF#:看门狗溢出标志。悬空

USB

MCU的USB有两组,分别为USB0USB1,前者为默认USB接口,这块板也只使用了这个接口。由于不需要考虑OTG功能,部分引脚未列出

  • USB0_DP&USB0_DM:USB接口的数据差分线

  • USB0_VBUS:USB线缆连接检测引脚。因为是5V容许,所以可以直连VBUS。验证板里未连接,但似乎也没什么问题

  • USB0_VBUSEN:VBUS功率允许引脚,低电平表示自供电(VBUS电流最大100mA),高电平表示总线供电(VBUS电流最大500mA)

  • USB0_DPRPD&USB0_DRPD:控制D+和D-信号的下拉,串联15kOhm电阻。验证板里未连接,但似乎也没什么问题

  • USB0-DPUPE-A/USB0-DPUPE-B:USB上拉引脚。在使用USB引导模式时,必须使用USB0-DPUPE-B上拉D+,并串联1.5kOhm电阻。这块验证板的设计失误也就在这里,好在最后通过飞线+串联2kOhm电阻解决了问题:

固件刷写验证

固件来自于游戏的firm文件夹中,格式为Motorola S(*.mot);固件烧写使用Renesas Flash Programmer (Programming GUI)

在通过跳线将MD0置为低电平后,连接USB线缆,可以在设备管理器中看到新设备:

在Flash Programmer中选择创建新项目并设置项目的名称,在微控制器一栏中选择RX62x,在通讯的工具一栏中选择USB Direct,此时界面被自动锁定为USB。此时如果点击Tool,可以看到已经就绪的设备:

确认无误后,点击Connect,软件会要求设置时钟频率。由于系统时钟使用了12MHz,在此处填入12即可:

就绪后,软件会显示打印系统的Log:

Program Files一栏中添加好固件,点击Start,会出现报错:

暂不知道原因是什么,可能是因为没有连接USB0_DPRPD&USB0_DRPD导致的。事实上,只要在Programmer中对MCU进行任意一次操作,之后的操作就都会无法完成并提示这个错误。不过解决方法也很简单,只需要重置一下MCU再进行操作即可:

此时断开USB连接,移除MD0的跳线帽,再重新连接USB,可以看到多出了一个HID设备:

运行游戏,尝试将部分针脚接地,可以看到游戏内有反应,确认固件刷写后可以正常使用。

MCU的I/O定义以及与其它元器件的连接

RX62x系列的按块划分IO,每块最多8个,0至E共15个块;并非每一块都有8个,且在不同封装下,由于引脚数量不同,IO的数量也不尽相同。以下列出LQFP144封装下,PCB上各接口/IC的针脚与MCU各IO的映射情况。

为了简洁,下列各表中的接口定义均省略了供电引脚

  • “确认来源”一栏中的字母代表游戏的英文首字母,意为该引脚的定义已通过该游戏验证;留空则代表相关引脚无法找到游戏进行交叉验证

CN3

根据ALLS USB I/O Test中的划分,数字输入寄存器有:システム、プレイヤー1、プレイヤー2、コイン1、コイン2,将各寄存器与CN3引脚对应如下:

  • システム

      7 6 5 4 3 2 1 0
    引脚 43              
    I/O 71              
  • プレイヤー1

      15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    引脚 31 33 35 37 39 41     17 47 23 25 21 19 27 29
    I/O 77 76 75 74 73 72     67 66 65 64 63 62 61 60
  • プレイヤー2

      15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    引脚 32 34 36 38 40 42     18 48 24 26 22 20 28 30
    I/O E7 E6 E5 E4 E3 E1     C7 C6 C5 C4 C3 C2 C1 C0
  • コイン1

      7 6 5 4 3 2 1 0
    引脚             49 45
    I/O             00 E1
  • コイン2

      7 6 5 4 3 2 1 0
    引脚             50 46
    I/O             01 E0

另外,有一些输入在I/O Test中无法体现,因此需要对实物进行测量。由此,将CN3的全部针脚定义汇总如下:

确认来源 MCU I/O编号 名称 序号 序号 名称 MCU I/O编号 确认来源
  P67 1P START 17 18 2P START PC7  
M P62 1P RIGHT 19 20 2P RIGHT PC2 M
M P63 1P LEFT 21 22 2P LEFT PC3 M
O P65 1P UP 23 24 2P UP PC5  
O P64 1P DOWN 25 26 2P DOWN PC4 M
M/O P61 1P PUSH1 27 28 2P PUSH1 PC1  
M P60 1P PUSH2 29 30 2P PUSH2 PC0 M
M P77 1P PUSH3 31 32 2P PUSH3 PE7 M
M P76 1P PUSH4 33 34 2P PUSH4 PE6 M
M P75 1P PUSH5 35 36 2P PUSH5 PE5 M
M P74 1P PUSH6 37 38 2P PUSH6 PE4 M
M P73 1P PUSH7 39 40 2P PUSH7 PE3 M
M/O P66 1P SERVICE 41 42 2P SERVICE PC6  
M/O P71 TEST 43 44 TILT P70  
  PE1 COIN IN1 45 46 COIN IN2 PE0  
  P72 1P PUSH8 47 48 2P PUSH8 PE2  
M/O PA0 COUNTER1 49 50 COUNTER2 PA1  
O/M PA2 OUTPUT 1 51 52 OUTPUT 2 PA3 O/M
O/M PA3 OUTPUT 3 53 54 OUTPUT 4 PA5 O
O/M PA6 OUTPUT 5 55 56 OUTPUT 6 PA7 O/M

CN6

确认来源 MCU I/O编号 名称 序号 序号 名称 MCU I/O编号 确认来源
O P40 A/D 1CH 3 4 A/D 5CH P41  
  P42 A/D 2CH 9 10 A/D 6CH P43  
  P44 A/D 3CH 15 16 A/D 7CH P45  
  P46 A/D 4CH 21 22 A/D 8CH P47  

CN9

确认来源 MCU I/O编号 名称 序号 序号 名称 MCU I/O编号 确认来源
O/M PB0 OUTPUT 7 5 6 OUTPUT 8 PB1 O/M
O/M PB2 OUTPUT 9 7 8 OUTPUT 10 PB3 O/M
O/M PB4 OUTPUT 11 9 10 OUTPUT 12 PB5 O/M
O PB6 OUTPUT 13 11 12 OUTPUT 14 PB7 O
O P50 OUTPUT 15 13 14 OUTPUT 16 P51 O
O P52 OUTPUT 17 15 16 OUTPUT 18 P54 O
O P55 OUTPUT 19 17 18 OUTPUT 20 P56  

JVS/RS485(IC2IC4CN4CN5

IC2

RS485控制芯片。

MCU I/O编号 IC引脚号 备注
P32 1 TXD,输入发送数据
P33 4 RXD,输出接收数据
未确定 8 S,选择输入速度

IC4

IC的原理可参照下文中IC5的介绍,此处只提供接线定义。

根据接线猜测,这个元件的意义在于检测CN5是否被插入。由于手头只有15257-01型号的板子,相关元件缺焊,但可以看出,当CN5未接入设备,SENSE脚悬空时,-IN1-IN2均被上拉至+5V;当CN5接入设备时,猜测SENSE脚被拉低,-IN1-IN2均被拉低。

-IN1-IN2是并联关系。

连接 IC引脚号 备注
MCU P13 1 OUT1
通过电阻连接至CN5 SENSE 2 -IN1
+2V 3 +IN1
+2V 5 +IN2
通过电阻连接至CN5 SENSE 6 -IN2
MCU P12 7 OUT2

另外,CN4的SENSE引脚通过一个独立的三极管电路完成电平转换,连接至MCU的P15引脚,该引脚在未连接时被下拉至GND。

CAN通信(IC3CN11CN12

IC3

MCU I/O编号 IC引脚号 备注
P21 1 RO,接收器输出
P24 2 #RE,接收器使能
P22 3 DE,驱动器使能
P20 4 DI,驱动器输入
P23 5 TE,150Ohm内部终端电阻使能

CN10

由于目前可以找到的用户手册中没有使用CN10的街机,导致CN10的定义完全依赖于手工测量和有限猜测:

引脚 连接 说明
1 P27 上拉至VCC
2 VCC  
3 P34  
4 P30 上拉至VCC
5 P26 上拉至VCC
6 P31 上拉至VCC
7 RST# IC6上拉至VCC
8 GND  

IC5

这个IC的主要作用是监视COUNTER(一个转轮结构的计数器,收到一次脉冲后显示的数字+1)的输出,确保计数器得到了正确的输出。COIN脚被触发后,只有确认到COUNTER引脚正常输出后,投币才会被认为有效。要理解这个IC的作用,需要先了解它的原理。BA10393F的芯片结构如图所示:3

可以看出,芯片内部共有两个比较器,CH1和CH2。比较器的作用是:当+IN的电压大于-IN时,OUT输出高电平,反之则输出低电平。简化后,单独一路的电路如图所示:

要理解图中左上角的电路设计,还需要知道一个前置知识:由于MCU输出引脚的驱动能力非常弱,因此一般需要借助MOSFET,像操纵开关一样控制相关电路的开闭。在图中,PA0是MCU的输出引脚,可以看出,与直觉相反,FET在这里控制的是COUNTER1引脚与GND之间的连接,而不是与电源的连接,类似于将开关装在了零线上。换句话说,在实际使用中,COUNTER1引脚因为连接了待接地的用电设备,是带电的。当PA0为高电平时,MOS管导通,COUNTER1接地,此时COUNTER1处的电压为0V;当PA0为低电平时,MOS管断开,COUNTER1无法接地,电压将与用电设备的电源电压相同(在此PCB中,供电电压为12V)。

在设计中,+IN通过电阻R1R3分压输入2V($\frac{3.3k\Omega}{(4.7+3.3)k\Omega}\times5V=2.0625V$);MCU的输入引脚P00与OUT连接,并被R4上拉;-IN被电阻R5下拉,并与输出引脚COUNTER1相连,用于采样输出的电压。当PA0为低电平,即电路不导通时,-IN=12V,+IN=2V,-IN>+IN,OUT将输出低电平给P00;反之,当PA0为高电平、电路导通时,-IN=0V,+IN=2V,此时-IN<+IN,OUT将输出高电平给P00。如果COUNTER1未连接设备,由于R5的存在,无论FET是否导通,-IN始终为0V,OUT只输出高电平。

总而言之,当投币输入COIN1被触发后,MCU会控制PA0输出信号,使计数器+1,这个输出信号也会被IC5采集到,并通过P00向MCU汇报。此时,如果P00接收到了低电平,MCU会认为输出一切正常,计数器已经正确+1,便认可这次投币,向游戏传递投币信息;如果P00没有接收到低电平,MCU会认为输出异常,计数器没有正确连接,拒绝这次投币,不会向游戏传递投币信息。

至此,IC5的引脚连接如下:

连接 IC引脚号 备注
MCU P00 1 OUT1
R83(CN3 COUNTER1输出) 2 -IN1
+2V 3 +IN1
+2V 5 +IN2
R84(CN3 COUNTER2输出) 6 -IN2
MCU P01 7 OUT2

DIPSW1

序号 MCU I/O编号 确认来源
DIPSW1_1 PD0 -
DIPSW1_2 PD1 -
DIPSW1_3 PD2 -
DIPSW1_4 PD3 -
DIPSW1_5 PD4 -
DIPSW1_6 PD5 -
DIPSW1_7 PD6 -
DIPSW1_8 PD7 -

LED

序号 MCU I/O编号 确认来源
LED1 P90 -
LED2 P91 -
LED3 P92 -
LED4 P93 -
  • LED5:与CN10有关的指示灯,-01和-02型均空焊。
  • LED6:12V输入指示灯
  • LED7:未知,似乎是5V输入指示灯

JP1

引脚 MCU引脚 确认来源
1 MD1 -
2 GND -
3 MD0 -

其他引脚

  • P16:USB0_VBUSEN_B,通过电阻分压将VBUS降为2V($\frac{3.3k\Omega}{(4.7+3.3)k\Omega}\times5V=2.0625V$)并输入给P16
  • P15:CN4插入检测引脚
  • P14:USB_DP上拉引脚

未使用引脚

  • P02,P03:连接至GND
  • P05:推测悬空
  • P07:上拉至VCC
  • P17:上拉至VCC
  • P25:上拉至VCC
  • P80-P83:上拉至VCC

参考

此处所列文件均来自于互联网(Internet Archive、产品介绍页面等),版权归原作者所有。部分文档保存时间过早,恕无法提供在线来源。

用户使用手册(本地缓存)

Datasheet

其他互联网来源

本文由作者按照 CC BY 4.0 进行授权