Back to Home
R100 UHF PL Station
Code Plug Information
Compiled by Robert W. Meister WA1MIK from
data provided by Bernard Barink AJ4SX
Some of this data may be different on a DPL station. We did the best we could when trying the various settings in the software. All we had available to work with were PL stations.
All data in the table below is hexadecimal.
"XX" indicates a value that changes with programming.
|Address||Meaning or Contents||TX Values||RX Values|
|00||Serial Number: high two digits||XX||XX|
|01||Serial Number: low two digits||XX||XX|
|03||Checksum (to equal FF)||XX||XX|
|09||TX Timeout Timer||XX||00|
|0E||PL = 09, DPL = 19||09 or 19||09 or 19|
|10-11||RX PL/DPL Value: high, low||00,00||XX,XX|
|24-25||TX PL/DPL Value: high, low||XX,XX||00,00|
|39-3A||PL/DPL Control: high, low||XX,XX||XX,XX|
|3B-3D||TX Frequency: high, middle, low||XX,XX,XX||00,00,00|
|3E-40||RX Frequency: high, middle, low||00,00,00||XX,XX,XX|
|41-43||TX Frequency: high, middle, low||XX,XX,XX||00,00,00|
|44-46||RX Frequency: high, middle, low||00,00,00||XX,XX,XX|
Individual Field Details and Calculations:
In the following text, binary (bit-wise) values have a trailing "b", octal values have a trailing "o", and hexadecimal values have a trailing "h". All other numbers are decimal. Commas separate multiple sequential bytes.
The Serial Number is four decimal digits that are stored as individual 4-bit quantities in the code plug. For example, a serial number of 1359 would be stored as 13,59h. Usually the last four digits of the number printed on the model label are used, but my station had 00,00h in the code plug.
The Checksum is a value that causes the eight low bits of the sum of all 128 bytes in the EEPROM to be equal to FFh. To calculate a new one, set the checksum byte to 00 and total up all of the bytes, throw away all but the low byte, then set location 03h such that the total equals FFh. For example, if the sum equals 1F,CAh, the checksum byte would need to be changed to 35h (CAh + 35h = FFh). If you put 35h into location 03h and total all the bytes again, the result should have FFh in the low byte.
The TX Timeout value is the number of five-second increments that should be used. The legal values (at least from the software's perspective) are: 00h = None, 24h = 3 Minutes, B4h = 15 Minutes.
The PL/DPL control bytes tell the radio whether coded squelch is used in the radio, and whether it is PL or DPL. The radio treats PL or DPL as "coded" since there is one microprocessor for PL and a different one for DPL. Also the 10h bit in location 0Eh is set for DPL encode or decode. Typical values are: 40,50h = TX no pl; 40,58h = TX coded; 4C,40h = RX no pl; 4E,40h = RX coded and these are depicted in the table below as individual bits.
|Condition||High Byte Bits||Low Byte Bits|
|TX No PL||0||1||0||0||0||0||0||0||0||1||0||1||0||0||0||0|
|RX No PL||0||1||0||0||1||1||0||0||0||1||0||0||0||0||0||0|
Or, when viewed another way, we get this matrix.
|Bit||High Byte||Low Byte|
|80h||always 0||always 0|
|40h||always 1||always 1|
|20h||always 0||always 0|
|10h||always 0||1 for TX|
|08h||1 for RX||1 for coded TX|
|04h||1 for RX||always 0|
|02h||1 for coded RX||always 0|
|01h||always 0||always 0|
The TX PL frequency value is (7986 * PL Freq in Hz) / 1000. Another formula that works is (8177 * PL Frequency in Hz) / 1024. Use the integral part of the result.
The RX PL frequency value is (6111 * PL Freq in Hz) / 100. Another formula that works is (15644 * PL Frequency in Hz) / 256. Use the integral part of the result.
TX DPL value: 023o = 60,26h; 073o = C0,76h; 445o = 02,4Ah; 754o = E3,D8h. This can be calculated as 2 times the (octal) DPL code + something in the high six bits.
RX DPL value: 023o = 60,27h; 073o = C0,77h; 445o = 02,4Bh; 754o = E3,D9h. This can be calculated as 2 times the (octal) DPL code + 1 + something in the high six bits.
The "something in the high six bits" is actually part of the 23-bit Golay code that is
used in DPL signaling. There's a lookup table in both the programming software and the
radio's CPU (in the DPL version) that provides eight more bits towards the final 23. For
example, the full Golay code for DPL code 023o is: 11-101-100-011-100-000-010-011b.
The right-most 9 bits are the DPL code. The 100b in the middle is an unseen "4" digit that precedes all DPL codes. The remaining left 11 bits (11-101-100-011b) are check digits used for error correction and detection. When the 12-bit DPL code is left-shifted and 1 is added (for RX), the code becomes: 111-011-000-110-000-000-100-111b.
Note that the unseen 100b bits (the unseen "4") in the middle got changed to 000b. When this is arranged in four-bit groups and turned into hex, we get: 1110-1100-0110-0000-0010-0111b or EC,60,27h.
The code that's stored in the EEPROM is 60,27h, the rightmost 16 bits. The software and radio CPUs use a lookup table to recover the remaining 8 bits (ECh in this example) based on the original 9-bit DPL code.
TX and RX frequency calculations: the radio uses something similar to an MC145158 divider chip as its synthesizer. This device has two programmable dividers: N and A. The "N" register is 10 bits wide and the "A" register is 7 bits wide. The "N" register value occupies the 1st and 2nd (high and middle) bytes; the "A" register value is left-shifted one bit and it occupies the entire 3rd (low) byte. The VCO frequency is stored as three bytes that represent (N * 127) + A. If the frequency is blank, all three bytes are 00h.
Bit 2 (04h) in the 1st byte is set to 0 if the frequency is a 5 kHz multiple or set to 1 if it's a 6.25 kHz multiple. If the frequency is a multiple of both, then the 5 kHz step will be used.
It's easiest to do the math if the frequencies are represented as kHz rather than MHz.
Here's one example: TX = 454.01250 MHz with 6.25 kHz steps.
N * 127 + A = 454,012.50 kHz / 6.25 kHz = 72,642.
N = 72,642 divided by 127 = 571 (023Bh).
A = the remainder of 72,642 divided by (MOD) 127 = 125 (0111 1101b or 7Dh).
Put N (first 2 bytes) and A (3rd byte shifted left 1 bit = 1111 1010b or FAh) in the proper places and you get: 02,3B,FAh.
Because it's 6.25 kHz and not 5 kHz, set bit 2 (04h) in the 1st byte: 06,3B,FAh. This is the value that's stored in the EEPROM in two locations.
Another example: TX = 454.00000 MHz with 5.0 kHz steps.
N * 127 + A = 454,000.00 kHz / 5.0 kHz = 90,800.
N = 90,800 divided by 127 = 714 (02CAh).
A = the remainder of 90,800 divided by (MOD) 127 = 122 (0111 1010b or 7Ah).
Put N (first 2 bytes) and A (3rd byte shifted left 1 bit = 1111 0100b or F4h) in the proper places and you get: 02,CA,F4h. This is the value that's stored in the EEPROM in two locations.
Because it's 5 kHz, not 6.25 kHz, we DON'T set bit 2 (04h) in the 1st byte.
The RX frequency uses the same calculation except you need to subtract 21.4 MHz from the frequency first, due to low-side injection. In other words, the programmed frequency in the code plug will be the desired receive frequency minus 21.4 MHz. If you perform the calculations in kHz, remember to subtract 21,400 kHz!
The author can be contacted at: his-callsign [ at ] comcast [ dot ] net.
Back to the top of the page
Up one level (R100 index)
Up two levels (Motorola index)
Back to Home
This page originally posted on Tuesday 26-Sep-2012
Article text, artistic layout, and hand-coded HTML © Copyright 2012 by Robert W. Meister WA1MIK.
This web page, this web site, the information presented in and on its pages and in these modifications and conversions is © Copyrighted 1995 and (date of last update) by Kevin Custer W3KKC and multiple originating authors. All Rights Reserved, including that of paper and web publication elsewhere.