packet:ninotnc
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
packet:ninotnc [2024/03/06 17:52] – [Misc Linux Notes] m0lte | packet:ninotnc [2025/04/16 15:23] (current) – [Operating modes] g7taj | ||
---|---|---|---|
Line 21: | Line 21: | ||
===== UK Stock ===== | ===== UK Stock ===== | ||
- | By arrangement, Tom M0LTE will be holding | + | By agreement, Tom M0LTE sometimes holds stock of PCB + microcontroller only kits in the UK. These are available from [[https:// |
===== Operating modes ===== | ===== Operating modes ===== | ||
- | Current modes as of firmware release 3.3.1: | + | Current modes as of firmware release 3.40 / 4.40 / v40 (all refer to the same version) |
+ | |||
+ | ^# ^ Mode ^QtSM Mode ^ Baud ^ bps ^ Mod ^ Proto ^ Usage ^ BW ^ Typical use ^ | ||
+ | |1 | 0001 | ? |19200 | 19200 | 4FSK | IL2Pc | FM | 25k | High SNR links between dedicated data radios. v41 firmware required in practice. | ||
+ | |3 | 0011 | ? | 9600 | 9600 | 4FSK | IL2Pc | FM | 12.5k | High SNR links between dedicated data radios. Suitable for UK 2m band. | | ||
+ | |2 | 0010 | ? | 9600 | 9600 | GFSK | IL2Pc | FM | 25k | Current recommended mode for new 70cm (25kHz) links where both ends are compatible | ||
+ | |5 | 0101 | ? | 3600 | 3600 | QPSK | IL2Pc | FM | 12.5k | For situations where only a speaker/mic connection is available but > 1200 baud is desired | | ||
+ | |11| 1011 | QPSK v26a | 1200 | 2400 | QPSK | IL2Pc | SSB/FM | 2.4kHz | HF - quadrature version of 1200 BPSK, twice the throughput for +3dB SNR. | | ||
+ | |10| 1010 | ? | 1200 | 1200 | BPSK | IL2Pc | SSB/FM | 2.4kHz | HF - use for circuits where wider transmission is acceptable. | ||
+ | |9 | 1001 | ? | 300 | 600 | QPSK | IL2Pc | SSB | 500Hz | HF - quadrature version of 300 BPSK, twice the throughput for +3dB SNR | | ||
+ | |8 | 1000 | BPSK AX.25 300bd | 300 | 300 | BPSK | IL2Pc | SSB | 500Hz | HF - slowest but best performing mode. ~7dB better than classic 300 baud FSK AX.25 | | ||
+ | |14| 1110 | AFSK AX.25 300bd | 300 | 300 | AFSK | IL2Pc | SSB | 500Hz | CRC improvement of IL2P 300 baud AX.25. Recommended if you can't do BPSK / QPSK on HF. | | ||
+ | |- | 1111 | ? | n/a | n/a | n/a | n/a | n/a | n/a | Allows the mode to be set by a SETHW KISS command (v41+). | ||
+ | |||
+ | IL2Pc is shorthand for IL2P plus CRC. | ||
+ | |||
+ | **QtSM NOTE: For IL2P and CRC modes, these need to be enabled per modem in the Settings/ | ||
- | ^ Mode ^ Baud ^ bps ^ Mod ^ Protocol ^ Intended mode ^ BW ^ Typical use ^ | ||
- | | 0010 | 9600 | 9600 | GFSK | IL2P+CRC | FM | 25k | Current recommended mode for new 70cm (25kHz) links where both ends are compatible | ||
- | | 0100 | 4800 | 4800 | GFSK | IL2P+CRC | FM | 12.5k | Current recommended mode for new 2m (12.5kHz) links where both ends are compatible | ||
- | | 0101 | 2400 | 2400 | DPSK | IL2P | FM | 12.5k | For situations where only a speaker/mic connection is available but > 1200 baud is desired | | ||
- | | 1011 | 1200 | 2400 | QPSK | IL2P+CRC | SSB/ | ||
- | | 1010 | 1200 | 1200 | BPSK | IL2P+CRC | SSB/ | ||
- | | 1001 | 300 | 600 | QPSK | IL2P+CRC | SSB | 500Hz | HF - quadrature version of 300 BPSK, twice the throughput for +3dB SNR | | ||
- | | 1000 | 300 | 300 | BPSK | IL2P+CRC | SSB | 500Hz | HF - slowest but best performing mode. ~7dB better than classic 300 baud FSK AX.25 | | ||
- | | 1110 | 300 | 300 | AFSK | IL2P+CRC | SSB | 500Hz | CRC improvement of IL2P 300 baud AX.25. Recommended if you can't do BPSK / QPSK on HF. | | ||
Superseded (but still supported) modes: | Superseded (but still supported) modes: | ||
- | ^ Mode ^ Baud ^ bps ^ Mod ^ Protocol ^ Superseded by ^ Intended mode ^ BW ^ Typical use ^ | + | ^# ^ Mode ^ Baud ^ bps ^ Mod ^ Protocol ^ Superseded by |
- | | 0000 | 9600 | 9600 | GFSK | AX.25 | 9600 GFSK IL2P | + | |0 | 0000 | 9600 | 9600 | GFSK | AX.25 | 9600 GFSK IL2P | FM |
- | | 0001 | 9600 | 9600 | GFSK | IL2P | 9600 GFSK IL2P+CRC | + | |4 | 0100 | 4800 | 4800 | GFSK | IL2Pc | 9600 4FSK IL2Pc | FM | 12.5k | Was the recommended |
- | | 0011 | 4800 | 4800 | GFSK | IL2P | + | |7 | 0111 | 1200 | 1200 | AFSK | IL2P | 4800 GFSK IL2Pc | FM |
- | | 1111 | 1200 | 1200 | BPSK | IL2P | 1200 BPSK IL2P+CRC | SSB/ | + | |6 | 0110 | 1200 | 1200 | AFSK | AX.25 | 1200 AFSK IL2P | FM |
- | | 0111 | 1200 | 1200 | AFSK | IL2P | 4800 GFSK IL2P+CRC | + | |12| 1100 | 300 | 300 | AFSK | AX.25 | 300 AFSK IL2P |
- | | 0110 | 1200 | 1200 | AFSK | AX.25 | 1200 AFSK IL2P | + | |13| 1101 | 300 | 300 | AFSK | IL2P | 300 AFSK IL2Pc | SSB | 500Hz | IL2P improvement of AFSK 300 baud AX.25. |
- | | 1100 | 300 | 300 | AFSK | AX.25 | 300 AFSK IL2P | SSB | + | |
- | | 1101 | 300 | 300 | AFSK | IL2P | 300 AFSK IL2P+CRC | + | |
Prefer: | Prefer: | ||
- | * QPSK > BPSK > DPSK > AFSK | + | * 4FSK > QPSK > BPSK > DPSK > AFSK |
- | * IL2P+CRC > IL2P > IL2P > AX.25 | + | * IL2Pc > IL2P > AX.25 |
* SSB > FM | * SSB > FM | ||
Line 57: | Line 62: | ||
===== Signals settings ===== | ===== Signals settings ===== | ||
+ | |||
+ | |||
+ | ==== Cheat sheet ==== | ||
+ | |||
+ | * Switch 1 is TX audio range selection - on/up is high level for louder transmitted audio, off/down is for quieter transmitted audio | ||
+ | * Switch 2 is RX audio sensitivity - on/up is low sensitivity for loud radios, off/down is high sensitivity for quiet radios | ||
+ | * Switch 3 is AC/DC coupling - normally should be off/down apart from specific radios | ||
+ | * Switch 4 is external carrier detect - normally should be off/down unless you need it for a specific purpose | ||
+ | |||
+ | ^ Radio ^ Signals ^ Notes ^ | ||
+ | | Yaesu FT-450D | ||
+ | | Tait TM8100 / 8200 | 1100 | Requires high level TX audio, else the transmitted audio is too quiet in the range of the pot.\\ Requires low level RX audio, else CRC is always lit. \\ Requires AC coupling to block the DC which is present on the TX audio pin. \\ Works with 19k2!! | | ||
+ | | Tait T2010 I & II | 1100 | Tested up to Modes 0100 4800 GFSK IL2P+CRC | | ||
+ | | Yaesu FTM-300D | 1100 | Tested up to Modes 0100 4800 GFSK IL2P+CRC | | ||
+ | | Kenwood TK-90 | 0100 | TX audio is pretty sensitive, works better in mic range. | | ||
+ | | Quansheng UV-K5 | 1100 | Wiktor - SA0WII has these working with the now well known 9k6 hardware mod | | ||
==== Switch 1 - Transmit audio range selection - DATA/MIC ==== | ==== Switch 1 - Transmit audio range selection - DATA/MIC ==== | ||
Line 201: | Line 222: | ||
[[https:// | [[https:// | ||
+ | [[packet: | ||
===== SLOTTIME and PERSIST ===== | ===== SLOTTIME and PERSIST ===== | ||
Line 254: | Line 276: | ||
0110, 0111: 1248 Hz tone for 3.0kHz deviation \\ | 0110, 0111: 1248 Hz tone for 3.0kHz deviation \\ | ||
0101: 2079 Hz tone for 5.0kHz deviation \\ | 0101: 2079 Hz tone for 5.0kHz deviation \\ | ||
+ | C4FSK 9600 - 1039Hz for 2.5kHz outer deviation \\ | ||
+ | C4FSK 19200 - 2079Hz for 5.0kHz outer deviation \\ | ||
+ | |||
+ | ==== Frequency misalignment ==== | ||
+ | |||
+ | TL;DR: +/- 4kHz is absolute maximum misalignment for narrow channel, that will still be decoded | ||
+ | |||
+ | Tested using a 25kHz Tait TM8105, programmed with a 12.5kHz channel, using a 4k8 GFSK signal with 1.2kHz deviation, and tested with a signal generator. The receive performance was fairly consistent with frequency misalignment up to +-4kHz. At that limit, the Tait's RSSI pin was indicating 3dB less signal strength than when the frequency was perfectly aligned. At +- 5kHz misalignment, | ||
+ | |||
+ | Narrowband Kenwood TK-760, nearly the same as the Tait. Also tried a FTM-3100 set to narrow. Similar, but less accurate and wider. It worked +4kHz to -6kHz, suggesting a couple kHz oscillator misalignment. | ||
===== Misc Linux Notes ===== | ===== Misc Linux Notes ===== | ||
Line 264: | Line 296: | ||
After creating said file, run '' | After creating said file, run '' | ||
- | ==== Auto mode switch ==== | + | If you have more than 1 TNC connected to the same device, it can be tricky to distinguish between them. The MPC2221a chip in the NinoTNC can be configured to expose a unique serial number, and udev rules can be set to ensure these get allocated consistent /dev nodes between reboots/ |
+ | Serial number enumeration is disabled on the MPC2221a chip by default, it can be enabled using the tool at https:// | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | The chips have unique serial numbers which If preferred, the same tool can be used to specify a serial number for the device. The serial can be up to 16 characters (including unicode!) | ||
+ | |||
+ | '' | ||
+ | |||
+ | You can then update the udev rules to use the serial number you've set (or obtained from the output of dmesg / inspecting ls -l / | ||
+ | |||
+ | Example udev rules for 2 TNCs with serials 0123456789 and 987654321: | ||
+ | |||
+ | <file shell / | ||
+ | # Create a handy symlink to make refering to NinoTNC' | ||
+ | SUBSYSTEM==" | ||
+ | SUBSYSTEM==" | ||
+ | </ | ||
+ | |||
+ | (Thanks to Nathan, MM3NDH for the udev rule.) | ||
+ | |||
+ | ==== Remote mode switch ==== | ||
+ | |||
+ | === KISS SETHW command === | ||
+ | |||
+ | As of firmware v41, NinoTNC supports setting the mode remotely using a SETHW KISS command in combination with all four MODE DIP switches being set to 1. | ||
+ | |||
+ | From the release notes: | ||
+ | |||
+ | Use KISS SETHW command (6) followed by mode number in range 0-14. Mode number is in the modes table above. | ||
+ | |||
+ | The KISS MODE setting is written to flash memory. To prevent an immediate flash memory write, add 16 to the mode number in the KISS SETHW command - for example, the value 14 would become 30. | ||
+ | |||
+ | BPQ supports this via the '' | ||
+ | |||
+ | < | ||
+ | kiss < | ||
+ | </ | ||
+ | |||
+ | * Remembering to add 16 to the value if you don't want the setting written to memory. | ||
+ | |||
+ | **Examples** | ||
+ | |||
+ | kiss n is the port number - port 3 in these examples | ||
+ | |||
+ | the 6 is always constant | ||
+ | |||
+ | ^ Set port n to mode ^ temporary | ||
+ | | FSK300 IL2Pc (40m slot 1) | '' | ||
+ | | BPSK300 IL2Pc (40m slot 3) | '' | ||
+ | | QPSK600 IL2Pc | '' | ||
+ | |||
+ | === GPIO === | ||
With Raspberry Pi GPIO, put /usr/bin in the crontab path, and add the following to / | With Raspberry Pi GPIO, put /usr/bin in the crontab path, and add the following to / | ||
Line 276: | Line 366: | ||
</ | </ | ||
- | Wire the numbered GPIO pins to the bottom of the MODE DIP switch, turn all the switches off, and it'll mode-switch automatically. | + | dl = drive low, dh = drive high. |
+ | |||
+ | Wire the numbered GPIO pins to the bottom of the MODE DIP switch, turn all the switches off, and it'll mode-switch automatically. | ||
+ | |||
+ | I picked GPIOs 5, 6, 13 and 19 (consecutive physical pins) to map to the DIP switch pins from left to right as you look at the PCB. | ||
+ | |||
+ | === MCP2221A === | ||
+ | |||
+ | The MCP2221A USB chip has four GPIOs which can be used to control the mode, instead of the DIP switches. This can be useful particularly on a remote site, and removes the need for a second cable (and works with a machine without its own GPIO interface). | ||
+ | |||
+ | This is experimental and is likely to change. See https:// | ||
+ | |||
+ | General steps: | ||
+ | |||
+ | '' | ||
+ | |||
+ | Install python3. | ||
+ | |||
+ | then, once (persistent): | ||
+ | |||
+ | '' | ||
+ | |||
+ | this will configure the GPIO pins as outputs, and make them all low at power on. | ||
+ | |||
+ | then, when required (non-persistent): | ||
+ | |||
+ | '' | ||
+ | |||
+ | where 1111 is the state of the four switches, left to right. | ||
+ | |||
+ | Wiring as follows. **NOTE - you MUST either remove the DIP switch or leave all four switches set permanently off with the jumpers in place.** | ||
+ | |||
+ | Note: bit of an edge case, but it is required to run '' | ||
+ | |||
+ | {{: | ||
===== Pinout ===== | ===== Pinout ===== | ||
Line 283: | Line 408: | ||
{{: | {{: | ||
+ | ===== Firmware ===== | ||
+ | |||
+ | To check your firmware version, press the test (red) button on TNC and observe the decoded packet. | ||
+ | |||
+ | < | ||
+ | =FirmwareVr: | ||
+ | 00000000=IL2PRxUnCr: | ||
+ | </ | ||
+ | |||
+ | To upgrade the firmware, see https:// | ||
+ | |||
+ | TL;DR: | ||
+ | |||
+ | < | ||
+ | # save a headache | ||
+ | sudo systemctl disable linbpq | ||
+ | sudo reboot | ||
+ | |||
+ | # then... | ||
+ | sudo apt install -y python3 python3-pip python3-serial git | ||
+ | git clone https:// | ||
+ | cd flashtnc | ||
+ | python3 flashtnc.py N9600A-v3-35.hex / | ||
+ | |||
+ | # don't forget to... | ||
+ | sudo systemctl enable linbpq | ||
+ | sudo systemctl start linbpq | ||
+ | </ | ||
+ | |||
+ | Use v3 firmware unless you know you have a 512kb chip, which is none of the OARC UK kits (i.e. ignore the v4 firmware - it's the same, but for the bigger chip). | ||
+ | |||
+ | If you get dire warnings about bricked TNCs, know is this highly unlikely. Unplug TNC, reboot system, plug TNC, try again. | ||
+ | |||
+ | ===== Schematic ===== | ||
+ | |||
+ | Available from [[https:// |
packet/ninotnc.1709747532.txt.gz · Last modified: by m0lte