So to SEND an AVR command to the EDBG, it is wrapped as:
Field | Size | Description |
---|---|---|
AVR_CMD | 1 byte | 0x80 |
FragmentInfo | 1 byte | Fragment number |
Size | 2 bytes, MSB first | Number of bytes in the wrapped AVR packet |
CommandPacket | N bytes | Enveloped AVR packet |
Large packets must be chopped up according to the HID interface’s REPORT_SIZE. The fragment number envelope field is two 4-bit nibbles indicating a "packet m of n packets" relationship:
(packet_number << 4) | total_number_of_packets.
Each SEND fragment responds with:
Field | Size | Description |
---|---|---|
AVR_CMD | 1 byte | 0x80 |
FragmentCode | 1 byte |
0x00: More fragments required (m < n) 0x01: Full packet received, will be processed (m == n) |
This is not to be confused with the AVR_RSP, which is the response to the command itself, which is detailed next.
Packet# | Direction | Data |
---|---|---|
1 | PC to Tool | 0x80 0x12 0x00 0x3C ...First 60B of AVR command packet... |
2 | Tool to PC | 0x80 0x00 |
3 | PC to Tool | 0x80 0x22 0x00 0x28 ...Remaining 40B of AVR command packet... |
4 | Tool to PC | 0x80 0x01 |