Difference between revisions of "Interprocessor (51-51d) protocol FAQ"

From PhatHack Wiki
Jump to navigation Jump to search
m (Added more definitions)
Line 20: Line 20:
 
Obtained from strace at http://downloads.phathack.com/sbingner/strace-51d.log
 
Obtained from strace at http://downloads.phathack.com/sbingner/strace-51d.log
   
== Suspected Definitions ==
+
== Definitions ==
   
 
#define TEXT_DISK 0x00
 
#define TEXT_DISK 0x00
Line 33: Line 33:
 
#define RANDOM_DISK 0x40
 
#define RANDOM_DISK 0x40
 
#define RANDOM_MAG 0x41
 
#define RANDOM_MAG 0x41
  +
#define RANDOM_NEXT 0x45
 
#define RANDOM_OFF 0x47
 
#define RANDOM_OFF 0x47
  +
#define PLAYING_TRACK 0x48
 
#define ASCII_FOLLOWS 0x50
 
#define ASCII_FOLLOWS 0x50
 
#define QUERY_TRACK_NAME 0x56
 
#define QUERY_TRACK_NAME 0x56
Line 45: Line 47:
 
#define CONTINUE 0xbd
 
#define CONTINUE 0xbd
 
#define ACK 0xce
 
#define ACK 0xce
 
 
   
 
== Protocol Examples ==
 
== Protocol Examples ==

Revision as of 13:35, 2 July 2005


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

Definitions

#define TEXT_DISK 0x00
#define TEXT_TRACK 0x01
#define QUERY_NUM_DISKS 0x21
#define QUERY_NUM_TRACKS 0x20
#define PLAY_TRACK 0x30
#define STOP 0x32
#define REPEAT_TRACK 0x33
#define REPEAT_DISK 0x34
#define REPEAT_OFF 0x35
#define RANDOM_DISK 0x40
#define RANDOM_MAG 0x41
#define RANDOM_NEXT 0x45
#define RANDOM_OFF 0x47
#define PLAYING_TRACK 0x48
#define ASCII_FOLLOWS 0x50
#define QUERY_TRACK_NAME 0x56
#define QUERY_DISK_NAME 0x57
#define SHUTDOWN 0x61
#define PING 0x66
#define PONG 0x70
#define TRACKS 0x7c
#define DISKS 0x7d
#define ACK_CONTINUE 0xac
#define CONTINUE 0xbd
#define ACK 0xce

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.