R100 index
Motorola index
Back to Home
  R100 UHF PL Station
Code Plug Information

Compiled by Robert W. Meister WA1MIK from
data provided by Bernard Barink AJ4SX
  Print this Page

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.

AddressMeaning or ContentsTX ValuesRX Values
00Serial Number: high two digits XXXX
01Serial Number: low two digits XXXX
03Checksum (to equal FF) XXXX
04-08EEPROM Identifier 16,81,12,01,0116,81,12,01,01
09TX Timeout Timer XX00
0B-0DEEPROM Identifier 40,C0,1100,D0,00
0EPL = 09, DPL = 19 09 or 1909 or 19
10-11RX PL/DPL Value: high, low 00,00XX,XX
24-25TX PL/DPL Value: high, low XX,XX00,00
39-3APL/DPL Control: high, low XX,XXXX,XX
3B-3DTX Frequency: high, middle, low XX,XX,XX00,00,00
3E-40RX Frequency: high, middle, low 00,00,00XX,XX,XX
41-43TX Frequency: high, middle, low XX,XX,XX00,00,00
44-46RX Frequency: high, middle, low 00,00,00XX,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 BitsLow Byte Bits
80402010842 1804020108421
TX No PL01 000 000 010 100 00
TX Coded01 000 000 010 110 00
RX No PL01 001 100 010 000 00
RX Coded01 001 110 010 000 00

Or, when viewed another way, we get this matrix.

BitHigh ByteLow 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.