1、PS 手柄针脚输出面对插头-PIN 1-| o o o | o o o | o o o |_/针脚 # 作用 DATA COMMAND N/C (9 Volts unused) GND VCC ATT CLOCK N/C ACK DATA 信号流向从手柄到主机。此信号是一个 8 bit 的串行数据,同步传送于时钟下降沿(输入输出信号在时钟信号由高到低时变化,所有信号的读取在时钟前沿到电平变化之前完成。) COMMAND 信号流向从主机到手柄。此信号和 DATA 相对,同样是一个 8 bit 的串行数据,同步传送于时钟下降沿。 VCC 电源电压从 5V 到 3V 原装的索尼手柄都可以工作。主机主
2、板上装有表面安装的 750mA 保险丝 ,用于防止外设过载(750mA 是包括左右手柄和记忆卡)。 ATT ATT 用于提供手柄触发信号。信号在通信期间处于低电平。又有人将此针脚叫做 Select, DTR 和 Command。 CLOCK 信号流向从主机到手柄。用于保持数据同步。 ACK 从手柄到主机的应答信号。此信号在每个 8 bits 数据发送之后的最后一个时钟周期变低,并且 ATT 一直保低电平。如果 ACK 信号不变低约 60 微秒 PS 主机会试另一个外设。 PS 手柄信号所有通讯都是 8 bit 串行数据最低有效位先行。在 PS 手柄总线的所有时码在时钟下降沿都是同步的。传送一个
3、字节的情况如下所示。 |BIT 0|BIT 1|BIT 2|BIT 3|BIT 4|BIT 5|BIT 6|BIT 7|CLOCK -_-_-_-_-_-_-_-_- DATA -000000111111222222333333444444555555666666777777-* * * * * * * *CMND -000000111111222222333333444444555555666666777777- ACK -_-数据线的逻辑电平在时钟下降沿驱动下触发改变。数据的接收读取在时钟的前沿(在记号*处)到电平变化之前完成。 在被选手柄接收每个 COMMAND 信号之后,手柄需拉低 A
4、CK 电平在最后一个时钟。如果被选手柄没 ACK 应答主机将假定没手柄接入。 当 PS 主机想读一个手柄的数据时,将会拉低 ATT 线电平并发出一个开始命令 (0x01)。手柄将会回复它的 ID (0x41=数字, 0x23=NegCon, 0x73=模拟红灯 , 0x53=模拟绿灯). 在手柄发送 ID 字节的同时主机将传送 0x42 请求数据。随后命令线将空闲和手柄送出 0x5A 意思说:“数据来了” 。下面是一个数字手柄的时钟信号 ATT -_| Byte 1 | | Byte 2 | | Byte 3 |CLOCK -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
5、_-_-_-_-_-_-_-0xFF 0x41 0x5A DATA -_-_-_-_-_-_-0x01 0x42CMND -_-_-_-_- ACK -_-_-_-在手柄执行初始化命令之后将发送它所有的数据字节(数字手柄只有两个字节)。在最后字节发送之后使 ATT 高电平,手柄无需 ACK 应答。 数字手柄的数据传送如下所示(这里 A0,A1,A2.B6,B7 是两个字节的数据比特)。 ATT _-| Byte 4 | | Byte 5 | CLOCK -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- DATA -D0D1D2D3D4D5D6D7-E0E1E2E3E4E5E6
6、E7- CMND -*ACK -_- 注意: 没 ACK.PS 手柄数据下面五个表显示手柄的实际发送字节标准数字手柄 BYTE CMND DATA 01 0x01 idle02 0x42 0x4103 idle 0x5A Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit704 idle data SLCT STRT UP RGHT DOWN LEFT05 idle data L2 R2 L1 R1 / O X |_| 所有按键按下有效。NegCon BYTE CMND DATA 01 0x01 idle02 0x42 0x2303 idle 0x5A Bit0 Bi
7、t1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit704 idle data STRT UP RGHT DOWN LEFT05 idle data R1 A B06 idle data Steering 0x00 = Right 0xFF = Left07 idle data I Button 0x00 = Out 0xFF = In08 idle data II Button 0x00 = Out 0xFF = In09 idle data L1 Button 0x00 = Out 0xFF = In 所有按键按下有效。模拟手柄红灯模式 BYTE CMND DATA 01 0x0
8、1 idle02 0x42 0x7303 idle 0x5A Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit704 idle data SLCT JOYR JOYL STRT UP RGHT DOWN LEFT05 idle data L2 R2 L1 R1 / O X |_|06 idle data Right Joy 0x00 = Left 0xFF = Right07 idle data Right Joy 0x00 = Up 0xFF = Down08 idle data Left Joy 0x00 = Left 0xFF = Right09 idle d
9、ata Left Joy 0x00 = Up 0xFF = Down 所有按键按下有效。模拟手柄绿灯模式 BYTE CMND DATA 01 0x01 idle02 0x42 0x5303 idle 0x5A Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit704 idle data STRT UP RGHT DOWN LEFT05 idle data L2 L1 |_| / R1 O X R206 idle data Right Joy 0x00 = Left 0xFF = Right07 idle data Right Joy 0x00 = Up 0xFF =
10、Down08 idle data Left Joy 0x00 = Left 0xFF = Right09 idle data Left Joy 0x00 = Up 0xFF = Down 所有按键按下有效。PS 鼠标 (credit to T.Fujita) BYTE CMND DATA 01 0x01 idle02 0x42 0x1203 idle 0x5A Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit704 idle 0xFF05 idle data L R06 idle data Delta Vertical07 idle data Delta Horiz
11、ontal 所有按键按下有效。用 74XX 逻辑电路仿真 PS 手柄这个电路能设置到仿真一个数字手柄,一个模拟手柄(两种模式)或一个 NegCon。本电路使用了六块 74XX IC 仿真一个数字手柄, 如仿真一个模拟手柄要多四块 74XX IC和四块 A/D 转换器,同样仿真一个 NegCon 手柄一样要多四块 74XX IC和四块 A/D 转换器。 电路如何工作当 ATT 电平被主机拉低,反相器 4/4A 拉高 74HC165 的 SH/!LD 脚,串口输入脚读入数据(图中只画了五块 IC 中的二块) 。反相器 1/4A 为 HC165 提供时钟信号,因此在 PS 主机输出的 CLK信号的每
12、个下降沿 HC165 移出数据的下一比特。数据经由 ATT 信号控制的反相器 2/4B 门电路输出,使到只有被选的设备才能接入总线。 读进 HC165 的数据的时码关系如以上图表所示。看回图表所示第一字节是 0xFF,意思是从 A1 到 A8 全是高位。下一个字节是手柄 ID。数据手柄的 ID 是 0x41 即 B1-8 是 HLLLLLLHL 排列。再下一个字节是数据准备命令 0x5A 即 C1-8 为 HLHLLHLH。最后两个字节是表示按键情况,当没按下为高电平,按下为低电平。 Ack 信号由反相器 1/4A,2/4A 和 1/4B 产生。 二极管 D1 只允许当 CLK 低时反相器 1/4A 对C1 充电。当 CLK 高位时间比 R1/C1 设定的长,反相器 2/4A 将输出高电平。高电平经过 C2 到反相器 1/4B 输出低脉冲,由 ATT 信号控制门电路输出(避免争夺总线)。