Data Exchange Protocol between Language Teacher®
ER486T, EGR486T, EGP486T and Personal Computer
Serial port settings
Baud rate |
2400 |
Data bits |
8 |
Parity |
None |
Stop bits |
1 |
Exchange diagram
Protocol description
1. Handshake:
- Transmitter sends Transmission Request "?"(0x3F) (1 byte)
- Transmitter sends length in bytes of the transmitting block (low byte first). Length of the transmitting block can't be more than 2400 byte. (2 bytes)
- Receiver sends back Transmission Confirm "."(0x2E) (1 byte)
- Receiver sends back the number of received bytes (2 bytes)
- Transmitter checks received bytes.
If everything OK it sends Transmission Start (0xC0) and follows to Data Block transmission.
Otherwise it starts handshake procedure from the beginning.
2. Data block transmission.
The length of the data of the transmitting block can't be more than 2400 bytes. Each 128 bytes of data are transmitted in the separate frame. Each frame consist of 132 bytes (128 bytes of data + 4 reserved bytes), except the last frame that can contain less than 128 bytes of data.
- Transmitter sends one frame
- Receiver calculates CheckSum and compares it with the received one
- If these two CheckSums are equals, receiver sends Acknowledgement - (0x06), in other case - Repeat Request - (0x15).
- If transmitter receives Acknowledgement, it increases FrameNo value and sends the next frame, otherwise it resends the previous frame.
- When all the data of the current data block are sent, but not all the data of the section are transmitted, transmitter increases BlockNo value and initiates the Handshake procedure again.
- When the last block of the section is being transmitted, it contains Last block marker - ‘L'(0x4C).
Frame format
|
Bytes |
Value, hex |
Header |
1 |
0x01 |
RecNo |
1 |
1. Initial FrameNo = 0x01
2. Transmitter increases FrameNo before sending each new frame |
InvRecNo |
1 |
0xFF-RecNo |
Data |
<=128 |
<Data> |
CheckSum |
1 |
1. CRC = Sum of transmitted <Data>
2. CRC = 0xFF - CRC |
Data Block format
|
Bytes |
Value, hex |
Section type |
1 |
Telephones = ‘T'(0x54)
Memo = ‘M'(0x4D)
Schedule = ‘S'(0x53)
English User's Dictionary = ‘E'(0x45)
Russian*(Polish**) User's Dictionary = ‘A'(0x41)
German*** User's Dictionary = ‘G'(0x47) |
BlockNo |
1 |
1. Initial BlockNo = 0x00
2. Transmitter increases BlockNo before sending each new block |
Block length in bytes |
2 |
nBlockLength |
Last Block Marker |
1 |
Last Block - ‘L'(0x4C)
Not Last Block - ‘N'(0x4E) |
Data |
nBlockLength |
<Data Records>
|
* For ER486T
** For EGP486T
*** For EGR486T or For EGP486T. Absent for For ER486T
Data Record format(Telephones, Memo, User's Dictionaires)
|
Bytes |
Value, hex |
Record length |
1 |
nDataLength |
Divider |
1 |
0x00 |
Security |
1 |
0xFE - Record is marked
0x7E - Record is not marked |
Data |
nDataLen |
<Data>
0x00 - divider between fields, after last field divider exists too |
Note: New line symbol in the textual data has the code 0x0D (not 0x0A 0x0D)
Data Record format(Schedule).
|
Bytes |
Value, hex |
Record length |
1 |
nDataLength |
Divider |
1 |
0x00 |
Date |
3 |
month
day
year offset from 1900 |
Security |
1 |
0xEE - Record is marked
0x6E - Record is not marked |
Divider |
1 |
0x00 |
Time |
4 |
hours
minutes
hours
minutes |
Divider |
1 |
0x00 |
Schedule |
nDataLength - 10 |
<Data> |
Divider |
1 |
0x00 |
Note: New line symbol in the textual data has the code 0x0D (not 0x0A 0x0D)
Fields Limitations
Type of data |
Field No. |
Field Name |
Bytes, max. |
Telephones |
1 |
Name |
70 |
2 |
Number |
55 |
3 |
Address |
120 |
Memo |
1 |
Memo |
254 |
Schedule |
1 |
Date |
3(date) |
2 |
Time |
4(time) |
3 |
Content |
244 |
User's English Dictionary |
1 |
English word |
46 |
2 |
Explanation |
192 |
User's Russian* (Polish**) Dictionary |
1 |
Russian(Polish) word |
46 |
2 |
Explanation |
192 |
User's German*** Dictionary |
1 |
German word |
46 |
2 |
Explanation |
192 |
* For ER486T
** For EGP486T
*** For EGR486T or For EGP486T. Absent for For ER486T
|