A brief summary of the protocol used by the Samsung Yepp:
Types
type=0 data
type=1 mp3
type=2 telephone
type=3 sc4
type=4 reserved?
Wheres
where=0 main memory
where=1 card memory
Indices
one byte to reference a file indexes >0x7f are in
the card, no file has index=0
Sections enclosed in { } are repeated until either >= the the required number
of bytes have been received or transmitted, or the required number of blocks
is reached.
Direction of communication
-> Means PC->Yepp ie the PC asserts D0-D7
<- Means Yepp->PC ie the Yepp asserts D0-D7
The communication is IEEE-1284 where IEEE-1284 says what happens, look at
the code for more information.
memsize word size of memory in units of 16K
memfree free memory in units of 16K
Opcode
0x1 Upload file (PC->Yepp)
-> Byte 1
-> Byte where
-> Byte type
-> Dword size
-> Word blocks
-> Byte name[515]
-> Byte block[0x3ff0]
-> Byte 0
{
-> Byte block[0x41f8]
-> Byte 0
}
<- Byte index
0x2 Download file (Yepp->PC)
-> Byte 2
-> Byte index
<- Dword size
<- Byte block[0x3ff0]
{
-> Byte 0
<- Byte ?
<- Byte block[0x41f8]
}
0x3 Get directory
-> Byte 3
{
<- Byte index
<- Byte type
<- Dword size
<- Byte name[515]
<- Byte attr
} End is signaled by all of the above being 0
<- Byte 0xff
0x4 Get status
-> Byte 4
<- Word memsize BASE
<- Word memfree?
<- Word memsize CARD
<- Word memfree?
0x5 Erase
-> Byte 5
-> Byte index
<- Byte 0
0x6 Format
-> Byte 6
-> Byte where
<- Byte 0xff
0x7 Get Play Order?
-> Byte 7
<- Byte gunk[8] (always seen 0x3a 0x68 0xa0 0x00 0x00 0x01 0x03 0x09)
<- Byte order[250]
Array of indexes, terminated by zeros
<- Byte q (Don't know what these are)
<- Byte q
0x8
0x9
0xa Ping
-> Byte 10
<- Byte 1
I Think the point of these three
is to ensure the index number
is deterministic.
0xb Download config.dat
same format as 0x1, type=0x0
0xc Download encode.mas
same format as 0x1, type=0x4
0xd Download decode.mas
same format as 0x1, type=0x4
0xe Download serial.dat
same format as 0x1, type=0x0
0x20 ?????? (After format flash 0x6 0x1 )
-> Byte 32
<- Word 0xe698=59032 (with 8Mb card)
0x21 ?????? (After 0x20)
-> Byte 33 (With 8Mb card)
<- Byte 0
0x22 ?????? (After 0x21)
-> Byte 34
-> Word blocks (80 with 8Mb card)
{
-> Byte data[512];
}
<- Byte 24 (With 8Mb Card)