The Group portion of the DestLoc field is corrupted in transmission. Do not rely on these to be zero on receipt.
The AckData packet is a guaranteed-delivery packet used to transfer any user data from one radio to another. It may be sent to the radio or received from the radio.
Sixteen PcktTypes ($00 – $0F) have been reserved for AckData packets. A sequence number is encoded into the lowest four bits (nybble) of the PcktType. The upper nybble is always $0. These PcktTypes should always be used in order; wrapping back around to $00 after $0F has been used.
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Location code of the packet target (formatted as Group, Address) |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Length of the Data block (0 < n < 1024) |
Data | n | User data |
The radio will return either an Ack packet or a Failure packet (if no acknowledgement is received). Ack packets are not returned until an acknowledgement has been received from the target radio. Failure packets are returned after the last transmission attempt times out.
* Multiple location codes may be present to indicate a bounce list. The final entry in the list is the packet's final destination.
Each location code listed should be unique to a single radio.
NoAckData packets are almost exactly the same as AckData packets except that the radio transmits them only once and no acknowledgement is returned by the target radio. They may be sent to the radio or received from the radio.
Sixteen PcktTypes ($10 – $1F) have been reserved for NoAckData packets. A sequence number is encoded into the lowest four bits (nybble) of the PcktType. The upper nybble is always $1. These PcktTypes should always be used in order; wrapping back around to $10 after $1F has been used.
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Location code of the packet target (formatted as Group, Address) |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Length of the Data block (0 < n < 1024) |
Data | n | User data |
The radio will return a Success packet in response to a NoAckData packet. Success packets are returned as soon as the NoAckData packet has been accepted. There is no indication of when the packet has been transmitted and/or received.
Unlike AckData packets, NoAckData packets may be broadcasts.
* Multiple location codes may be present to indicate a bounce list. The final entry in the list is the packet's final destination.
Ack packets are returned in response to AckData packets. They should not be sent to the radio.
Sixteen PcktTypes ($20 – $2F) have been reserved for Ack packets. The sequence number of the AckData packet being acknowledged is encoded into the low nybble of the PcktType. The high nybble is always $2.
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Location code of the packet target (formatted as Group, Address) |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Constant $0001 to indicate a single byte of data follows |
Retries | 1 | Number of retries remaining in the original AckData transmission |
The Retries field can be helpful in monitoring the "health" of the connection between radios. Ideally, this field should return a four if the number of retries is set to five. This would indicate that the first transmission succeeded and that all potential retries remained unused.
It is possible, although highly unlikely, that Retries will be $FF. This indicates that an Ack packet was received after the radio had given up on the original AckData packet.
* Multiple location codes may be present to indicate a bounce list. The final entry in the list is the packet's final destination.
Suppose that a radio at location 1:2 wanted to send a message of "Hello" (hex codes $48, $65, $6C, $6C, $6F) to a radio at location 1:3 using a guaranteed-delivery packet. This will be the first message sent, so radio 1:2 will use sequence number 0. The outgoing message on the serial port would look like:
$AA, $00, $0C, $00, $01, $02, $01, $03, $80, $05, $00, $48, $65, $6C, $6C, $6F, $8C, $55
Supposing that the message is received by a radio at 1:3, it will acknowledge the transmission and radio 1:2 will return this acknowledgement message on the serial port:
$AA, $20, $08, $00, $01, $03, $01, $02, $80, $01, $00, $04, $B4, $55
QuerySigStr packets test the links between the two radios. Sending a QuerySigStr packet to a radio causes a string of transmissions from the origin radio to the target radio and back again. Signal strengths are sampled and recorded in the Strengths field. You will not receive QuerySigStr packets from your radio.
PcktType: $30
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Location code of the packet target (formatted as Group, Address) |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Length of the Strengths field (4 < n < 1024; n mod 4 = 0) |
Strengths | n | Initialize all bytes to $FF |
The radio will return either a SigStr or a Failure packet (if no response is received).
The transmissions make a round-trip from source to destination and back. On each of these links, the radios record the signal strength observed. The Strengths field will hold this list of words, so you must reserve adequate space (two bytes for each link in the trip). If you are not bouncing the packet, then there must be room reserved for two records (four bytes). If you are bouncing the packet off of a single radio, then there must be room reserved for four records (eight bytes).
* Multiple location codes may be present to indicate a bounce list. The links will be tested in order on the way out and in reverse order on the return trip. No location code listed may be a broadcast address.
This packet is returned in response to QuerySigStr request. It should not be sent to the radio.
PcktType: $31
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Location code of the packet target (formatted as Group, Address) |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Length of the Strengths field (4 < n < 1024; n mod 4 = 0) |
Strengths | n | Signal strength data |
Each hop in the Strengths field is a word indicating the signal strength detected. This value will range from 0 to 1023, inclusive. See the ADC to dBm conversion data page for more details.
If the radio at location 1:2 wanted to sample the signal strengths between itself and the radio at location 1:3, you would send the following command:
$AA, $30, $0B, $00, $01, $02, $01, $03, $80, $04, $00, $FF, $FF, $FF, $FF, $C2, $55
On success, the radio could return a packet such as:
$AA, $31, $0B, $00, $01, $03, $01, $02, $80, $04, $00, $09, $03, $F2, $02, $C7, $55
This would indicate that the signal strength measured for the transmission from 1:21:3 was 777 and the signal strength of the reply from 1:31:2 was 754. These signal levels correspond to -59dBm and -63dBm, respectively.
This command is used to route a packet between radios by serial number. Typically, this command is used to test signal strengths between radios when location codes cannot uniquely identify a radio (e.g. when each radio is assigned the same location code to make all transmissions broadcasts), but it could be used to transmit packet data as well. BounceBySerNum can be sent or received.
PcktType: $33
The PayLdData format is:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the packet origin (formatted as Group, Address) |
DestLoc* | 2 | Both Group and Address fields must be set to $00 |
EOA | 1 | Constant $80, indicates the end of address list |
DataLen | 2 | Length of the PacketData field (6 < n < 1024) |
PacketData | n | See below |
The PacketData format is:
Field | Bytes | Description |
SigStr | 2x | Signal strength detected by receiver |
SerialNum | 4x | Serial number of destination radio |
ExtraData | Optional |
For each hop (x) in the DestLoc field, the PacketData field will need to contain a 2-byte SigStr and a 4-byte SerialNum. SigStr fields must be set, initially, to $FFFF, and sampled values (0-1023) will be filled in as the packet is received. See the ADC to dBm conversion data page for more details.
BounceBySerNum packets are transmitted as broadcasts (both Group and Addr set to 0 in the DestLoc fields) and will be received by all radios within range. Receivers then consult the SerialNum field to see if corresponding entry matches the radio's serial number. All packets received that fail to match are silently discarded.
Suppose all radios in your system are configured to Group 1, Addr1; and have serial numbers 1000, 1001, 1002, etc. For radio 1000 to bounce a message to radio 1001 and back, you would send the following command:
$AA, $33, $15, $00, $01, $01, $00, $00, $00, $00, $80, $0C, $00, $FF, $FF, $FF, $FF, $E9, $03, $00, $00, $E8, $03, $00, $00, $A9, $55
On success, the radio could return a packet such as:
$AA, $33, $15, $00, $01, $01, $7F, $00, $7F, $00, $80, $0C, $00, $D0, $02, $D9, $02, $E9, $03, $00, $00, $E8, $03, $00, $00, $58, $55
This would indicate that the signal strength measured for the outgoing and incoming hops would be 720 and 729 respectively. These signal levels correspond to -68dBm and -67dBm, respectively.
The Group portion of the DestLoc field is corrupted in transmission. Do not rely on these to be zero on receipt.
This command reads data from RAM or EEPROM. It will not be received from the radio.
PcktType: $80
The PayLdData format is:
Field | Bytes | Description |
MemSpace | 1 | Constant $00 indicates EEPROM, $01 indicates RAM |
Addr | 2 | Starting memory location to read |
Len | 2 | Number of bytes to read (1 < n < 1024) |
This command returns a Success packet. The data read from memory is returned in the Success packet's Data field.
See the memory map for more details.
To read the radio's default target location, you could issue the following command:
$AA, $80, $05, $00, $01, $67, $00, $02, $00, $EF, $55
The radio could return a packet such as:
$AA, $86, $05, $00, $80, $02, $00, $01, $03, $11, $55
This would indicate that in transparent mode, packets will be sent to 1:3.
This command writes data into RAM or EEPROM. It will not be received from the radio.
PcktType: $81
The PayLdData format is:
Field | Bytes | Description |
MemSpace | 1 | Constant $00 indicates EEPROM, $01 indicates RAM |
Addr | 2 | Starting memory location to write |
Len | 2 | Number of bytes to write (1 < n < 1024) |
Data | n | Data bytes to write |
This command returns a Success packet (with no additional data) or a Failure packet.
See the memory map for more details.
To set the default target location to 1:4, you would send the following command:
$AA, $81, $07, $00, $01, $67, $00, $02, $00, $01, $04, $F7, $55
The radio would return:
$AA, $86, $03, $00, $81, $00, $00, $0A, $55
This command instructs the radio to sweep through a range of frequencies and return the signal strengths sampled at each of them. It will not be received from the radio.
The radio will not receive packets while sweeping frequencies. Incoming data may be missed.
PcktType: $82
The PayLdData format is:
Field | Bytes | Description |
StartFreq | 2 | Starting frequency |
Spacing | 1 | Frequency spacing |
Samples | 2 | Number of samples to take (1 < n < 512) |
StartFreq is the first frequency to scan. Spacing is the space between frequencies sampled. Both StartFreq and Spacing are in multiples of 100kHz; so a StartFreq of 9024 (for example) indicates that the sampling should begin at 902.4MHz, and a Spacing of 4 indicates that samples should be taken every 400kHz.
This command returns a Success packet. The samples read (n words) are returned in the Success packet's Data field.
To read the signal strengths of 50 channels (902.4MHz, 902.8MHz, ...), you would send:
$AA, $82, $05, $00, $40, $23, $04, $32, $00, $20, $55
The radio could return something like:
$AA, $86, $67, $00, $82, $64, $00, $E0, $01, $F3, $01, ... $55
The data would, of course, vary depending on the samples actually taken. See the ADC to dBm conversion data page for more details.
This command reads the radio's model type string. It will not be received from the radio.
PcktType: $83
This command has no PayLdData.
This command returns a Success packet. The model type is a short text string, returned in the Success packet's Data field.
Sending the request:
$AA, $83, $00, $00, $83, $55
The radio would return the model string ("CDR-9150XL" in the example below) with a packet such as:
$AA, $86, $0D, $00, $83, $0A, $00, $43, $44, $52, $2D, $39, $31, $35, $30, $58, $4C, $99, $55
This command reads the radio's firmware version string. It will not be received from the radio.
PcktType: $84
This command has no PayLdData.
This command returns a Success packet. The firmware version is a short text string, returned in the Success packet's Data field.
This command reads the radio's serial number. It will not be received from the radio.
PcktType: $85
This command has no PayLdData.
This command returns a Success packet. The serial number is a long word, returned in the Success packet's Data field.
Success packets are returned in response to most requests sent to the radio. They should not be sent to the radio.
PcktType: $86
The PayLdData format is:
Field | Bytes | Description |
ReqType | 1 | PcktType of the packet that succeeded |
DataLen | 2 | Length of data to follow (0 < n < 1024) |
Data | n | Additional data included |
Not all Success packets include additional Data, so the DataLen field may be zero. Refer to the individual command definitions for more on what Data will be returned.
Failure packets may be returned in response to various requests sent to the radio. They should not be sent to the radio.
PcktType: $87
The PayLdData format is:
Field | Bytes | Description |
ReqType | 1 | PcktType of the packet that failed |
DataLen | 2 | Constant $0001 to indicate that one byte follows |
FailCode | 1 | Failure code |
Failure codes indicate the nature of the failure:
Code | Description |
$00 | Timeout, no response received |
$01 | Transceiver is off, and command only accepted when transceiver is on |
$02 | Transceiver is on, and command only accepted when transceiver is off |
$03 | Programming failure; Flash write failed to verify |
$04 | Command error; unrecognized command or format |
$05 | Restricted; memory location cannot be reprogrammed |
SetMode packets let you switch between transparent, mixed-on, and mixed-off modes. It will not be received from the radio.
PcktType: $88
The PayLdData format is:
Field | Bytes | Description |
Mode | 1 | Constant $00 indicates transparent, $01 indicates mixed-on, $02 indicates mixed-off |
This command returns a Success packet with no additional data.
If DTR# is asserted (held low) then a SetMode to transparent mode will return no response. Once the radio has switched to transparent mode, only data is transferred over the serial connection, and so it would be inappropriate to send a Success packet.
If you want to make sure the command has been executed, then hold DTR# de-asserted (high) while sending the SetMode command, and do not assert DTR# until after the Success packet has been received.
To enter transparent mode, you would send the following command:
$AA, $88, $01, $00, $00, $89, $55
Assuming DTR# is de-asserted, the radio will respond with:
$AA, $86, $03, $00, $88, $00, $00, $11, $55
This command writes data into Flash memory. It will not be received from the radio.
This is not a user-supported command. Please use the configuration utility to write updates and encryption keys to Flash memory.
PcktType: $89
The PayLdData format is:
Field | Bytes | Description |
Page | 1 | Page number to write |
Len | 2 | Constant $0080 to indicate that 128 bytes follow |
Data | 128 | Data to write to memory |
The radio should be in mixed-off mode before issuing any WriteFlash commands. After the first update to Flash is written, only further updates should follow until the Flash is completely updated. When the Flash has been completely updated, you must call a RestartRadio to get out of the update mode.
Flash memory is broken into regions. Each one of these regions must be updated in their entirety before moving on to another region. Failure to do so can result in a radio that must be repaired at the factory.
This command returns a Success packet or a Failure packet.
This command listens for transmissions and records the signal strengths seen. This command captures signal strengths for any transmission that is strong enough to discern. Packets need not be addressed to the listening radio to have their signal strengths sampled. This is known as sampling in "promiscuous" mode.
The radio will not receive packets while listening for signal strengths. Incoming data may be missed.
PcktType: $8A
The PayLdData format is:
Field | Bytes | Description |
Timeout | 1 | Time to wait before returning results |
DataLen | 2 | Length of the Strengths field (4 < n < 1024; n mod 4 = 0) |
Strengths | n | Initialize all bytes to $FF |
Each entry in the Strengths field is formatted as:
Field | Bytes | Description |
SrcLoc | 2 | Location code of the transmission origin (formatted as Group, Address) |
ADC | 2 | Signal strength detected (0 < n < 1023) |
The radio will process a ListenSigStr command until the Timeout has expired or the reserved memory has been filled with samples. The Timeout field is measured in clock ticks (16.4ms/tick). When sampling is complete, the radio will return the packet with the sample data in the Strengths field. The DataLen returned may be smaller than initially reserved.
See the ADC to dBm conversion data page for more details.
This command restarts the radio and reloads all RAM settings from EEPROM. Any packets in process will be lost. It will not be received from the radio.
PcktType: $8B
This command has no PayLdData.
The radio restarts immediately upon receipt of this command. There will be no response.
This command puts the radio in a debug mode. It will not be received from the radio.
This is not a user-supported command. Please use the configuration utility to test your radio.
PcktType: $8C
The PayLdData format is:
Field | Bytes | Description |
Mode | 1 | Constant $00 indicates Rx, $01 indicates TxQ, $02 indicates TxSq |
Freq | 2 | Frequency in multiples of 100kHz |
The radio should be in mixed-off mode before issuing a SetDebug command.
This command returns a Success packet.
This command samples the uncalibrated signal strength. It will not be received from the radio.
This is not a user-supported command. Please use the configuration utility to test your radio.
PcktType: $8D
This command has no PayLdData.
The radio should be in mixed-off mode before issuing a ReadRSSI command.
This command returns a Success packet with one word of additional data.
This command returns a response when all packets in queue have been processed. It does not actually change the processing of the commands already in queue. It will not be received from the radio.
PcktType: $8E
This command has no PayLdData.
The radio should be in mixed-off mode before issuing a FlushQueue command.
This command returns a Success packet with no additional data.