Maxon Data Radio: Difference between revisions

m Change image positioning
Added EEPROM reverse engineering info, added blank config files zip, reformatting too
Line 22: Line 22:
*'''SD-171''' - 5/1W VHF (148-174 MHz)
*'''SD-171''' - 5/1W VHF (148-174 MHz)
*'''SD-174''' - 5/1W UHF (450-490 MHz)
*'''SD-174''' - 5/1W UHF (450-490 MHz)
==EEPROM Layout==
Work in progress, but I have identified the most important stuff (Freq, CTCSS/DCS, etc)
Here are [[:File:Maxon_sd_blank_configs.zip|blank .dat configuration files for each model.]] I haven't touched the EL series yet. Use these as a base for editing and flashing to your unit.
===Option Bytes===
====Model ID====
The very first byte (0x00) is the model ID 01 through 04 as below. Also 0xB4, that changes based on frequency band. 04 for VHF models, 01 for UHF models.
{|
|+ <U>'''Model ID'''</U>
|<div style="display: flex;">
    <div>
        {| class="wikitable" style=""
        |-
        !Model
        !Value
        |-
        |style="padding: 5px" |'''SD-161'''
        |style="padding: 5px" |01
        |-
        |style="padding: 5px" |'''SD-164'''
        |style="padding: 5px" |02
        |-
        |style="padding: 5px" |'''SD-171'''
        |style="padding: 5px" |03
        |-
        |style="padding: 5px" |'''SD-174'''
        |style="padding: 5px" |04
        |}
    </div>
</div>
|}
====Squelch====
Most of the time you probably want this on. 0xC8 is the squelch byte. 00 is no squelch, 01 is squelch enabled
====Wide/Narrow====
W/N operation for a given channel is configured using the fifth byte after the end of the TX frequency. 00 is narrowband (default) and 01 is wide.
====Scan Enable====
Scan enable is the first byte after the frequency channel block. 00 is disabled, 01 is enabled.
===CTCSS/DCS===
----
====Enable Byte====
The RX CTCSS/DCS enable byte is located 13 bytes after the end of the channel frequency block. 00 for disabled, 01 for CTCSS, 02 for DCS. The TX CTCSS/DCS enable is 4 bytes after the RX byte.
====Channel/Freq.====
CTCSS is also stored as a float64 of the raw value. The values are stored starting 21 bytes after the channel frequency, with the first 8 for RX CTCSS, the last 8 for TX CTCSS.
Example: '''9A 99 99 99 99 F9 51 40''' = 71.9 (aka 71.9Hz)
DCS is stored starting 37 bytes from the end of the channel frequency block. It may use the 38th byte if the value is too high. These are uint8/uint16 respectively.
Example: '''17''' = 23 (aka DCS setting 023) | '''F2 02''' = 754 (aka DCS setting 754)
----
===Channel Frequencies===
Frequencies are stored as float64 16 byte blocks with the first 8 for the receive frequency, and the last 8 for the transmit frequency. These both end in 0x40.
{|
|+ <U>'''Channel Offsets (Hex)'''</U>
|<div style="display: flex;">
    <div>
        {| class="wikitable" style=""
        |-
        !Channel
        !Start
        !End
        |-
        |style="padding: 5px" |'''1'''
        |style="padding: 5px" |DC
        |style="padding: 5px" |EB
        |-
        |style="padding: 5px" |'''2'''
        |style="padding: 5px" |140
        |style="padding: 5px" |14F
        |-
        |style="padding: 5px" |'''3'''
        |style="padding: 5px" |1A4
        |style="padding: 5px" |1B3
        |-
        |style="padding: 5px" |'''4'''
        |style="padding: 5px" |208
        |style="padding: 5px" |217
        |-
        |style="padding: 5px" |'''5'''
        |style="padding: 5px" |26C
        |style="padding: 5px" |27B
        |-
        |style="padding: 5px" |'''6'''
        |style="padding: 5px" |208
        |style="padding: 5px" |217
        |-
        |style="padding: 5px" |'''7'''
        |style="padding: 5px" |334
        |style="padding: 5px" |343
        |-
        |style="padding: 5px" |'''8'''
        |style="padding: 5px" |398
        |style="padding: 5px" |3A7
        |-
        |style="padding: 5px" |'''9'''
        |style="padding: 5px" |3FC
        |style="padding: 5px" |40B
        |-
        |style="padding: 5px" |'''10'''
        |style="padding: 5px" |460
        |style="padding: 5px" |46F
        |-
        |style="padding: 5px" |'''11'''
        |style="padding: 5px" |4C4
        |style="padding: 5px" |4D3
        |-
        |style="padding: 5px" |'''12'''
        |style="padding: 5px" |528
        |style="padding: 5px" |537
        |-
        |style="padding: 5px" |'''13'''
        |style="padding: 5px" |5BC
        |style="padding: 5px" |59B
        |-
        |style="padding: 5px" |'''14'''
        |style="padding: 5px" |5F0
        |style="padding: 5px" |5FF
        |-
        |style="padding: 5px" |'''15'''
        |style="padding: 5px" |654
        |style="padding: 5px" |663
        |-
        |style="padding: 5px" |'''16'''
        |style="padding: 5px" |6B8
        |style="padding: 5px" |6C7
        |-
        |}
    </div>
</div>
|}
----
===Channel 1 Offsets===
Since most people reusing these will probably only need one channel programmed, heres the exact offsets for channel 1
{|
|+ <U>'''Ch. 1 Offsets'''</U>
|<div style="display: flex;">
    <div>
        {| class="wikitable" style=""
        |-
        !Parameter
        !Value(s)
        |-
        |style="padding: 5px" |'''RX Frequency'''
        |style="padding: 5px"|0xDC-E3
        |-
        |style="padding: 5px" |'''TX Frequency'''
        |style="padding: 5px" |0xE4-EB
        |-
        |style="padding: 5px" |'''Scan Enable'''
        |style="padding: 5px" |0xEC
        |-
        |style="padding: 5px" |'''RX CTCSS/DCS Option'''
        |style="padding: 5px" |0xF8
        |-
        |style="padding: 5px" |'''RX CTCSS Value'''
        |style="padding: 5px" |0x100-107
        |-
        |style="padding: 5px" |'''TX CTCSS Value'''
        |style="padding: 5px" |0x108-10F
        |-
        |style="padding: 5px" |'''RX DCS Value'''
        |style="padding: 5px" |0x110 or 0x110-111
        |-
        |style="padding: 5px" |'''TX DCS Value'''
        |style="padding: 5px" |0x114 or 0x114-115
        |}
    </div>
</div>
|}




Line 34: Line 230:




===Programming (the hard way IMO)===
===Programming (With Cable)===
These radios utilise a proprietary programming cable that converts RS-232 to TTL, as well as utilizing the RTS pin to control programming. That last part unfortunately prevents simply connecting TX and RX to a TTL to USB serial adapter...
These radios utilise a proprietary programming cable that converts RS-232 to TTL, as well as utilizing the RTS pin to control programming. That last part unfortunately prevents simply connecting TX and RX to a TTL to USB serial adapter...


Line 45: Line 241:
<br />
<br />


===Programming (the easy way)===
===Programming (Without Cable & With Software)===


Inside the radio, there is a small 8 pin SOIC I2C EEPROM (Catalyst 24WC04) which stores all the programmed info. This chip can be easily read and written to using an inexpensive CH341a based programmer.
Inside the radio, there is a small 8 pin SOIC I2C EEPROM (Catalyst 24WC04) which stores all the programmed info. This chip can be easily read and written to using an inexpensive CH341a based programmer.
Line 56: Line 252:
# Setup the channels with your desired info, you can (only tested on the SD-161 by me) go down into the ham bands. The software will let you force an out of band frequency, but from 147.5 and up, it won't say anything.
# Setup the channels with your desired info, you can (only tested on the SD-161 by me) go down into the ham bands. The software will let you force an out of band frequency, but from 147.5 and up, it won't say anything.
#* "S" is Standard (25kHz) bandwidth, and "N" is Narrow (12.5kHz) bandwidth. Choose standard if you are using for amateur radio, otherwise narrow for business band use.
#* "S" is Standard (25kHz) bandwidth, and "N" is Narrow (12.5kHz) bandwidth. Choose standard if you are using for amateur radio, otherwise narrow for business band use.
# Once you have channels setup, you could save the config to a file just for safe keeping, but thats not really needed.
# Once you have channels setup, save the config to a file
# Click the W/R button on the topp nav bar to open the programming window. Here you will see the data to be written to the EEPROM.
# Use the saved .dat file (may need to rename it) and flash the contents via CH341a programmer to the EEPROM
# Open the copy of your backup in a hex editor like HxD and begin copying over the values from the preview window.
 
#* <B>Double check what you enter here! I have no idea how much damage a wrong byte could do!</B>
 
# Once you have checked over your file, save it and load it into your programmer software and flash it to the EEPROM
 
# Do a read verify to make sure the EEPROM accepted the flashed contents
===Programming (Without Cable or Software)===
Using the info above and the blank .dat files you could probably piece together a working EEPROM image, though this is risky. As always, you are doing any of this at your own risk!