Interprocessor (51-51d) protocol FAQ

From PhatHack Wiki
Revision as of 19:21, 1 July 2005 by Sbingner (talk | contribs)
Jump to navigation Jump to search


The 51d program running on the 7312 and the Winbond '51 chip communicate over /dev/ttyS1 at 115200 bps.

Here is what we know so far about the communications protocol:

Last byte of multi-byte strings is a checksum that appears to be calculated by (0xff - (all bytes before checksum added together) + 0x01) workable code:

unsigned char calcsum(int bytec, char bytes[])
{
  unsigned char sum=0;
  int i;
  for (i=0;i<bytec;i++) {
    sum = (sum+bytes[i])&0xff;
  }
  return (0xff-sum+1);
}

Obtained from strace at http://downloads.phathack.com/sbingner/strace-51d.log

Suspected Definitions

#define ACK 0xce
#define ASCII_FOLLOWS 0x50
#define CONTINUE 0xbd
#define ACK_CONTINUE 0xac
#define QUERY_NUM_DISKS 0x21
#define QUERY_NUM_TRACKS 0x20
#define QUERY_DISK_NAME 0x57
#define QUERY_TRACK_NAME 0x56
#define PLAY_TRACK 0x30
#define PING 0x66
#define PONG 0x70

Protocol Examples

ASCII Text is sent 12 Bytes at a time, in multiple 'packets'

7312 8052 Possible Meaning
Initialization
0xf9 ??
 0x53??
0x10 ??
HU Query total disc
 0x21,0xdfQuery total disc
0xce ACK
0x7d Total Disks follows
 0xacOK, Continue
0x00 First byte
 0xbdContinue
0x0f Second Byte (total 15 disks)
 0xbdContinue
0x74 End of Stream
 0xceACK
HU Query total tracks
 0x20,0x00,0x01,0xdfQuery total tracks in disc 1 (0x00, 0x01)
0xce ACK
0x7c Total tracks follows
 0xacOK, Continue
0x00 First byte of total tracks
 0xbdContinue
0x01 Second Byte of total tracks (1 track in disk 1)
 0xbdContinue
0x00 First byte of disknum
 0xbdContinue
0x01 Second Byte of disknum
 0xbdContinue
0x82 End of Stream
 0xceACK
Direct play track
 0x30 0x00 0x01 0x00 0x02 0x00 0x00 0xcdPlay Disk 2 Track 1 Offset 0
0xce ACK
HU ? Name of Disk
 0x57,0x00,0x02,0xa7Name of disk 2? (Answering "PLY2: Alternative")
0xce ACK
0x50 ACSII Follows
 0xacOK, Continue
0x00 Type of Text (0x00 = Disk Name)
 0xbdContinue
0x00 Packet Number
 0xbdContinue
P ASCII Text
 0xbdContinue
Above 2 lines repeats for each of the letters 'LY2: Altern'
0xc9 Checksum?
 0xceACK
0x50 ACSII Follows
 0xacOK, Continue
0x00 Type of Text (0x00 = Disk Name)
 0xbdContinue
0x01 Packet Number
 0xbdContinue
a ASCII Text
 0xbdContinue
Above 2 lines repeats for each of the letters 'tive'
0x00 NULL
 0xbdContinue
Above 2 lines repeat 6 more times
0x96 Checksum?
 0xceACK
HU ? Name of Track
 0x56,0x00,0x01,0x00,0x02,0xa7Name of disk 2, track 1? (returning "3 Doors Down - ")
0xce ACK
0x50 ACSII Follows
 0xacOK, Continue
0x01 Type of Text (0x01 = Track Name)
 0xbdContinue
0x00 Packet Number
 0xbdContinue
3 ASCII Text
 0xbdContinue
Above 2 lines repeats for each of the letters ' Doors Down'
0x9d Checksum?
 0xceACK
0x50 ACSII Follows
 0xacOK, Continue
0x01 Type of Text (0x01 = Track Name)
 0xbdContinue
0x01 Packet Number
 0xbdContinue
0x20 ASCII Text (space)
 0xbdContinue
Above 2 lines repeats for each of the letters ' - Duck And '
0x67 Checksum?
 0xceACK
0x50 ACSII Follows
 0xacOK, Continue
0x01 Type of Text (0x01 = Track Name)
 0xbdContinue
0x02 Packet Number
 0xbdContinue
R ASCII Text
 0xbdContinue
Above 2 lines repeats for each of the letters 'Run (Live)'
0x00 NULL
 0xbdContinue
0x00 NULL
 0xbdContinue
0x77 Checksum?
 0xceACK
8052 Ping Request
 0x66, 0x9a8052 PING
0xce ACK
0x70 51d PONG
 0xacACK, Continue
0x90 Checksum
 0xceACK
   
  • Heartbeat:

If the Winbond chip does not see a "heartbeat" signal every 10 seconds, it will kill power to the 7312 and reboot it. It's a two-part sequence:


7312 > 0x70
       0xAC   < 51
     > 0x90
       0xCE   < 51

Must repeat within 10 seconds, or the Winbond chip will output 0x66,0x9A 3 times and reboot.