home    builders    Search

buildersTARPN ProjectsNinoTNC USB ➜ History

NinoTNC N9600A History

page modified February 27, 2021

Nino (KK4HEJ) started working on a project to interface a single-chip-radio as a KISS serial port TNC in 2015. In 2018 he had a working prototype and brought it to the attention of TARPN. This has been an on-going project since then. While a couple of hams are working on the RF side of this system, Nino did a new project using some of the same code, and the same CPU to make a 9600 baud modem which could drive a data radio. The TARPN radio is not dead, but has been ignored and restored several times in the past couple of years.

Nino's TNC, announced on the TARPN groups-io, was delivered as a 9600 baud TNC in August 2019. He sold the unnamed TNC as a full kit for $26 and sold out in a day. Only 10 were made.

This first model was TTL serial in and out and had screw terminals for serial i/o, power, and radio connections. Nino coded and built the TNC as an experiment and was not planning on taking it further himself.
NCPACKET had its first site to site 9600 baud packet link using the first TNC model on October 1, 2019.

A1 prototype - getting ready for general release

Starting in early September 2019 and running until late November 2019 Nino worked with me, Tadd (KA2DEW), on the idea that the TNC would be used by the various TARPN projects and especially NCPACKET, eventually to be sold publicly. In all cases we desired that the unit not be burdened with a profit motive because that would break the community experimental atmosphere. The TNC was branded NinoTNC.

Nino and I hashed out a bunch of improvements to the TNC to make it easier for the TARPN participants to use.

At this time it was a 9600 baud G3RUH USB KISS TNC, ready for plug and play operation with the Tait TM8105 transceiver.

10 of the A1 board were made and 6 were put into full time operation using the Tait TM8105 radio in the NCPACKET network. I had purchased 20 of the Tait TM8105 radios to help the local networkers in rolling out 9600. I wrote full build instructions and Nino, myself, and many from the TARPN group were pondering how to distribute and fund the boards or kits.

Coastal Chipworks closing its business

Just after we got the first run boards of the A1 boards built, and instructions written, at the beginning of December 2019, Coastal Chipworks announced that it was closing its doors and that the $43 TNC-PI, mainstay of the NCPACKET network and other TARPN projects, would no longer be available. Every other 1200 baud TNC out there was either considerably more expensive than the TNC-PI, or considerably more difficult to get running than the TNC-PI. The TARPN project was suddenly at risk for lack of easy to use inexpensive 1200 baud TNC hardware! But, we had the solution in our hands. So... a bit more work was needed.

A2 prototype - reworked with 1200 baud

Nino reworked the design to include 1200 baud capability. There was some consideration for having the operator of the TNC send configuration to the TNC via USB KISS commands allowing selection of the different radio bit-rates. We decided instead to put a 2 bit DIP-switch on the NinoTNC giving access to the different features.

Still more changes to improve the NinoTNC:

December 31st 2019 we had our first prototypes of the A2 design. Here is our first assembled, first prototype, A2 board. Note the individual resistors near the LEDs. This would be a resistor pack but Nino didn't have the proper pack on hand to test with so this worked for the first board.

After the first prototype we replaced the two big electrolytic capacitors in the power supply circuit with two 10uF Tantalum capacitors, so now there would be 3 identical Tantalum capacitors instead of 3 different capacitors. This would make parts acquisition and placement slightly easier, and solves a minor problem where eletrolytic capacitors die of old age sooner than most of the components.

A2 release version -- first ETSY sale

January 27th 2020 we ordered 200 of this board, with only minor modifications, and changed the board color to black. Delivery expected February 12th (slightly slower than before because of Chinese New Year).
Then COVID19 happened. China shut-down.

In the mean time Nino continued developement, releasing a first cut of his IL2P specification, and tweaking 1200 baud. NinoTNC 1200 baud surpassed TNC-PI performance according to the test CD. The production board finally arrived in the USA Marth 5th. 3 weeks delayed. It seemed like longer at the time.

Here's the production A2 board. A2 boards are black.

This particular A2 board has the L2 resistor hack described under "A3 prototype", below.

Here are the assembly instructions for the A2 board

March 6th 2020 100 of the first 200 black A2 boards were put on sale on ETSY just before midnight. 64 were sold by 6am March 7th. March 8th we shipped 105 A2 boards, to 16 USA customers and one Netherlands customer. We had the remaining 95 boards up for sale on ETSY.

We ran into a problem where the FTDI modules we were using sold out and were back-ordered at Digikey. The backorder of the FTDI module would put some kit assembly back to July! We scrambled around trying to find another vendor of the FTDI module. Every other vendor of the chips either wouldn't ship to the US, or sold a slightly different FTDI module.

Of the first 105 boards sold, we heard of several cases where the builders broke the FTDI boards because the USB-micro socket would peel back from the top of the FTDI module. This was calamity after tragedy.

In the end we sold 150 of the A2 boards. NCPACKET kept 50 of the boards for its own project (only 25 were built, the rest were starved for FTDI modules).

David, K4DBZ [qrz.com], one of the NCPACKET node ops, came up with a home-brew replacement of the FTDI module [oshpark.com] which used a Microchip MCP2221 chip. We also decided the USB micro socket had to go. David put a USB-B socket on his little PCB. The point was that if we did another run of the A2 boards, we'd substitute David's board for the FTDI. In large quantity it was actually cheaper.

A3 project

March 10th 2020 we started a redesign.
The A3 will have 4 switches instead of 2, and will have David's USB-B socket with Microchip MCP2221 USB/I2C/SPI/UART interface chip down on the A3 board instead of as a daughter board.
This will save the purchaser $3 per board and besides being cheaper, it will be easier to install, more robust, and easier to buy, than the FTDI board.
The 4 switches will support future firmware improvements.
We also reduced the size of, and included cuttable shorting wires supporting, in-line ferrite beads for each of the DE-9 radio signals, PTT, TXA, RXA.
A3 will use the same CPUs as the A2 board and any new firmware we come out with for the A3 will work on the A2 as well.
Parts from un-built A2 parts caches could be updated to build A3 boards as most of the parts were common.

A3 prototype

A3 boards are blue.

We made 10 prototypes of the A3 and these were delivered March 28, 2020. We have lots of documentation to do and firmwre needs to be written to support the new model (and the old model!)

Firmware for the A3, supporting 2400 baud and 4800 baud, was undergoing testing. In addition, Nino published a specification for Improved Layer 2 Protocol, or IL2P, to be supported on the A3 NinoTNC.

We discovered a bug in the 1200 baud microphone+speaker voice-radio support in the NinoTNC. The TX Audio output level was just too high and could not be turned down low enough to not overdrive the microphone input of some radios. This problem would exist in all of the A2 units as well. NCPACKET operators didn't detect this issue at first because most of the A2 units put into service were used with radios having a data input port. Also, each A2 put in service freed up a 1200-baud TNC-PI so we didn't have much need for an A2 at 1200 baud, at the start. New network participants eventually reached into the A2 and prototype A3 stock so we ran into the problem.

A cheap solution was implemented where a resistor would be placed in series with the TXA output to reduce the peak to peak voltage of the TXA signal. A2 and prototype-A3 board operators would have to kludge a resistor into the circuit someplace. In the production version A2 boards, and the prototype version of A3, a resistor could take the place of the L2 jumper wire.

A3 first shipping version (r2)

Resistor R3 is the in-circuit TXA audio reducer.

April 21 2020 - we ordered 200 boards to be sold on ETSY.
May 3, 2020 - A3 production boards arrived and one was built and tested. 187 of this board were shipped for ETSY orders on May 20, 2020. An additional 10 of these boards went to NCPACKET.

Notice resistor R3 near the DE9 radio connector.

A bug in our kludge solution was found where the linearity of the TX audio path is messed up slightly because of R3. R3 would have to be shorted out for use in a data-radio installation. R3 is important in bringing the TX audio level of the TNC down to microphone-input voltages but having it in-line when used in data-radio service messed up the high speed data. The instructions were modified to require installation of R3, but then shorting it out on the bottom of the board if the NinoTNC is used in data-radio service.

A3 second shipping version (r3)

We added a 2-pin jumper to bypass R3 as a fix for the TXA audio R3 resistor problem.

Notice the 2-pin jumper pins J6 just above and to the right of the USB connector. Insertion of the 2-pin jumper onto J6 pins would bring the TXA voltage to data-radio levels. Removal of the jumper would put R3 in circuit, letting the TNC drive microphone inputs.
There is a tiny "r3" silkscreen designation near the lower left mounting hole.

175 of this board were shipped for ETSY orders between June 13 and July 2, 2020. An additional 25 of the first r3 order went to NCPACKET.

200 boards were ordered by TARPN for sale at ETSY and are expected by the 15th of July 2020.
All 200 sold out by middle of August.
200 boards were ordered by TARPN for sale at ETSY and started shipping in the first week of September 2020. For those playing at home, this is 200 A2r2 boards, 200 A3r2 boards, and 600 A3r3 boards.

Here are the assembly instructions for the A3 board

A4 board process begins

The A4 board moves the TXA adjustment range control to a switch instead of a 2-pin jumper. The TXA filter circuit changes, and the RXA filter circuit changes. All of this will make an improvement in the quality and versatility of the packet transmission and reception, The reference designators and parts labels change in a couple of places.

August 30, 2020

We added a jumper to bypass the capacitor in the transmit audio path, allowing for DC coupling to a transceiver. This is useful for enhancing frequency response, but can't be used if the transmitter can't tollerate a voltage offset, or if the transmitter asserts a voltage offset. A 5th switch is provided to take the place of the Data Radio jumper from the A3r3 boards.

We built 10 of these boards, many of which were deployed in the NCPACKET network.


October 2020
Bootloader applications released for TARPN nodes, Raspberry PI without TARPN, MSWIndows and other Linux.

November 2020

We added a high gain amplifier to the receive path, permitting support of some Kenwood ham mobiles which provided low level receive audio on the microphone connector. This option also allows connection to the internals of some radios for 4800 and 9600 bit-rate support. We also added an optional external DCD-active input on pin 2 of the DE9 radio connector. These options, plus the data-radio TXA selection, are selected using a new 4-bit DIP-switch called SIGNALS.

We ordered 10 of these, all of which were assembled, and most of which were deployed in the NCPACKET network.

December 2020

Some of the symbols were renamed, but no layout or schematic changes. This is the A4 model shipped in December.

We ordered 200 of the bare boards from SeedStudio in China and were able to sell and ship all 200, using ETSY, by late January 2021.
2.90, programmed into the dsPIC33EP512GP502, shipping with NinoTNC A4 in late December 2020. We had to switch CPUs in that order because the 256GP cpu was no longer available and was backordered until June. The new chip is very similar but with double the memory capacity, but also costs 70 cents more or so. The chip shipped with the A4 December order is designated the "FAT" chip and requires a new bootloader and a different firmware load.

Nino revised the Python code for the bootloader so it can recognize the different loads. The new bootloader in the firmware is now brick-resistant in that you can restart the bootload after it is interrupted. It also is now in 3 different versions.
'a' is the original 2.xx firmware bootloaderin the old chip.
'b' is the new firmware bootloaderin the old chip (THIN).
'B' is the new firmware bootloader in the new 'FAT' chip.
The TARPN scripting will take care of this automatically. TARPN is in the process of beta testing a new version, release probably in March or April 2021, maybe coincident with a new Raspberry PI OS release.

January 2021

In January, having had no complaints about the A4r2 board we ordered 400 more bare PCBs from China. These were in-country (USA) by January 21st but got held up in import/customs control.

To be continued!



NinoTNC Firmware history

updated February 27, 2021

Note: Shipped version are considered Released. Intermediate versions were for testing. We make test versions available to beta testers.

As of the implementation of the over-the-USB bootloader, we started putting test versions in the Bootload GIT repository and also in the TARPN webserver for the Raspberry PI based bootloaders. See the Operation web page for info about the bootloader.

The test versions have introduced powerful new features and powerful new bugs. We'd like to think the released versions included the features, but not the bugs. Please be careful and have a sense of adventure when testing the beta versions.

Note about bugs: If you see something go wrong, especially if it is stable and wrong, please take care to grab what information you can and get it to us on the ninotnc groups.io reflector. Please mention the firmware version you are using (revealed with the TX-TEST button USB test message), the board version, and what application/OS you are using. If you think the NinoTNC may have hung up, please try to prove that before cutting power. If the TX-TEST button doesn't light the TX LED, then that is a dead give-away, but it is possible for just one process in the NinoTNC CPU to hang, leaving the TX-LED still running.

Thanks for any help.

// 1.40 : 09-Nov-19 : add support for N9600A1 LEDS
// 1.41 : 24-Nov-19 : fix FTDI chip held in reset bug on N9600A1
// 1.42 : 29-Nov-19 : add AFSK transmit, streamline receive buffer usage
// 1.60 : 08-Dec-19 : add I2C KISS interface
// 2.00 : 24-Dec-19 : first N9600A2 version. Add IL2P, AFSK receive. Put preamble bits in their own buffer. Remove CTS pin. Add pin state detect. Add TXDELAY analog sampling.
// 2.01 : 05-Jan-20 : Added stand-alone AX.25 ID packet generator for IL2P modes.
// 2.10 : 10-Jan-20 : Added energy DCD, improved AFSK receive with higher sampling rate
// 2.11 : 14-Jan-20 : Improved DCD timing, deleted transmit inhibit logic

   2.11 shipped with NinoTNC A1

// 2.12 : 23-Jan-20 : Equalized AFSK demodulator
// 2.20 : 17-Feb-20 : Add bootloader, keep OC1 operating at half scale to reduce TX skew, add old-style DCD detection (CrossingsInSync)
//                  : Added TX/RX inversion option to A2 boards, increased DCD break to 100ms, changed min TXDELAY

   2.20 shipped with NinoTNC A2 r2 starting March 6th, 2020

// 2.22 : 21-Mar-20 : Fixed inverted transmit data bug on AFSK (inverted GFSK transmit filter table)
// 2.30 : 21-Mar-20 : Added 2400 DPSK mode, 4800 GFSK mode, support for N9600A3, KISS commands GETALL, GETVER, SETSERNO.
// 2.31 : 11-Apr-20 : Added PTT loopback test & test packet, boot packet.
// 2.32 : 25-Apr-20 : Fixed AFSK IL2P Sync DCD hang bug.
// 2.33 : 26-Apr-20 : Additional fix for AFSK IL2P Sync DCD hang. Also changed IL2P SYNCTOL to 0.
// 2.34 : 26-Apr-20 : Fixed IL2P Supervisory frame bit translations (chasing spurious REJ). Changed IL2P SYNCTOL back to 1.
// 2.35 : 27-Apr-20 : Removed ID packet SSID, fixed ID packet protocol bug.

   2.35 shipped with NinoTNC A3 r2 starting May 3, 2020

// 2.36 : 27-Apr-20 : Put DAPSK transmit waveform in lookup table.
// 2.37 : 09-May-20 : Special unreleased version (beta test at NCPACKET) to map all 3 fast bit rates to A2 dip switch in IL2P mode.
//                  : 00 - 1200 AFSK AX.25
//                  : 01 - 2400 DAPSK IL2P
//                  : 10 - 4800 GFSK IL2P
//                  : 11 - 9600 GFSK IL2P
// 2.38 : 10-May-20 : Merge 2.36 and 2.37
// 2.39 : 22-May-20 : Add WDT reset criteria for "aggressively safe" remote site. Fixed transmit hang bug (timer logic).
// 2.40 : 23-May-20 : Modifying timer management. Addressing additional transmit cycle bug that causes short transmits (about 5 ms) every 20,000 packets.)
//                  : Transitioned most TMR3 interrupts to main loop cycle.
//                  : Establish the GETVER as KISS command 0x08.  
// 2.41 : 31-May-20 : Re-mapped A2 functions:
//                  : 00 - 9600 GFSK AX.25
//                  : 01 - 9600 GFSK IL2P
//                  : 10 - 1200 AFSK AX.25
//                  : 11 - 2400 DAPSK IL2P
//                  : Adjusted preamble times for 2400 and 4800 baud modes

   2.41 shipped with NinoTNC A3 r3 June 13

// 2.42 : 28-Jun-20 : Added N9600A4 support. Inverted DAC output for N9600A4.
//                  : Added IL2P receive inversion detection.
//                  : Added info dump to TEST_TX usb packet. -- note bug: Always 0 TxPktCnt figure. 
// 2.44 : 5-Jul-20  : Added switch position to data dump.
// 2.45 : 5-Jul-20  : Moved modulation mode selection to transmit buffer to allow flexible transmit modulation.
//                  : Streamlined buffer memory.
//                  ; Changed the meaning of the orange LED from "stranger" to "pending".  
//                  ; In 2.44 and before, the orange LED illuminated if a callsign other than the most recent from or to callsigns is heard on the channel. 
//                  ; In 2.45 and later, the orange LED (Blue LED on the A4 board) illuminates if a TX message is ready to send but the NinoTNC has not yet sent it.  
// 2.46 : 6-Jul-20  : Added mode ID beacon to all modes except AX.25 1200. Sent in AX.25 1200
//                  : Provided tuning tone selection based on mode switch settings. This allows the
//                  : user to chose the target deviation for the bessel null tuning procedure.
//                  : Notes:
//                  : - Deviation is set with the TX_DEV pot. Changing the operating mode switches
//                  :   does not change deviation, but does change the tuning tone.
//                  : - The "best" deviation will be based on many factors, such as the specific
//                  :   radios used in the link.
//                  : - 3kHz deviation should work for most setups.
//                  : - 2400 Baud mode does not REQUIRE 5kHz deviation (3kHz is fine).
//                  : - The tones selected in 4800 and 9600 mode provide Minimum Shift Keying,
//                  :   but more deviation may work well too.
//                  : 1200 Baud - 1248 Hz   (3kHz Dev)
//                  : 2400 Baud - 2079 Hz   (5kHz Dev)
//                  : 4800 Baud - 500 Hz    (1.2kHz Dev)
//                  : 9600 Baud - 999 Hz    (2.4kHz Dev)

   2.46 shipped with NinoTNC A3 r3 in July and August 2020

// 2.50 :26-Jul-20  : Experimental version to test an improvement to IL2P with more parity data. 
// 2.51 :23-Aug-20  : Includes MAXFEC IL2P mode, and fixes the TxPktCnt bug. By default, this firmware sends IL2P using MAXFEC mode 
//                  : with more parity bytes than old versions. IL2P packets sent with this firmware won’t be decoded by previous  
//                  : firmware versions, though this will decode from previous versions.
//                  : This version decodes 948 packets on both test tracks on WA8LMF's test CD. 

   2.51 shipping with NinoTNC A3 in early September 2020

// 2.71 : 26-Sep-20 : A2 NinoTNC switch arrangement is shuffled.  This is/will be fixed in 2.75.
//                  : This test-version turned off IL2P
//                  : Further AFSK receive improvement.
//                  : Added external INHIBIT input to RB4/Pin 11.
//                  : Added support for N9600A4r1.
// 2.73 : 03-Oct-20 : IL2P restored
//                  : A2 NinoTNC switch arrangement is shuffled.  This is/will be fixed in 2.75.
//                  : Increased UART 1 receive queue to 2.1kB to support MAXFRAME 7.
//                  : Added RXA Clip indication to CRCBADLED (lights when receive signal at max ADC count).
// 2.74 : 07-Oct-20 : Allow reception of AX.25 packet without proper callsign field.  This enables tncattach messages to be received. 
//                  : A2 NinoTNC switch arrangement is shuffled.  This is/will be fixed in 2.75.
// 2.75 : 09-Oct-20 : fixes A2 switches to match 2.41 through 2.51 versions. 
// 2.76 : 12-Oct-20 : Add repetitive GETALL dump back to TARPN node. 
// 2.77 : 13-Oct-20 : Fix bug in 2400 baud processing. 
// 2.78   20-Oct-20 : Fix bug where GETALL dump sending was eratic.  Now sent every minute for TARPN installations.  
// 2.81   25-Oct-20 : Add 5 more figures to GETALL dump.  Now it shows mS and bytes transmitted and received as well as count of corrected IL2P bytes.  
//                    Fix ordering of GETALL switch-positions output.
// 2.83 : 19-Nov-20 : Changed 9600 AX.25 preamble words from 0x0000 to 0x7E7E
// 2.84 : 21-Nov-20 : Added OPB 1200 AFSK low-pass emphasis filter option
// 2.85 : 21-Nov-20 : Increased DAPSK receive sample rate to 57600.
//                  : Enabled clip detect for DAPSK receive.
//                  : Improved DAPSK receive output LPF.
// 2.86 : 29-Nov-20 : Added LastGoodPacket tracking to filter CRC BAD LED trigger.
//                  : Removed DEVID logic (unused).
// 2.89 : 08-Dec-20 : Adjusted AX.25 receive packet min length to 10 bytes.
// 2.90 : 21-Dec-20 : Forked to dsPIC33EP512GP502
//                  : Increased AX25 receive buffer to 1068 bytes

   2.90, programmed into the dsPIC33EP512GP502, shipping with NinoTNC A4 in late December 2020. 
   We had to switch CPUs in that order because the 256GP cpu was no longer available and was backordered until June. 
   The new chip is very similar but with double the memory capacity. 
   The chip shipped with the A4 December order is designated the "FAT" chip and requires a new bootloader and a different firmware load. 

// 3/4.00:04-Jan-20 : Versioning convention change.
//                  : Major version 4 indicates dsPIC33EP512GP.
//                  : Major version 3 indicates dsPIC33EP256GP.
//                  : Updated bootloader to 'b' for 3.00 and 'B' for 4.00. New
//                  : bootloader is capable of restarting interrupted flash.
//                  : Changed PENDING LED logic to illuminated when packets
//                  : are waiting for transmit OR bytes are present in the
//                  : KISS UART receive queue.
//                  : ****************** MEMORY ALLOCATION ******************
//                  :   FUNCTION                  3.00            4.00
//                  : UART FROM HOST           2100 bytes      8192 bytes    Limits maximum window size (MAXFRAME) for connected links.
//                  : TX DATA BUFFER           541  words      541  words    Limits maximum transmit packet size to 541*16 = 8,656 bits including all overhead.
//                  : TX DATA BUFFER COUNT     3               3             Permits back-to-back transmits (a packet can be prepared for transmit while another is transmitted).
//                  : TX DAC SAMPLE BUFFER     144  words      144  words    Transmit audio samples, passed to OC module via DMA. 86,400 Hz sample rate.
//                  : TX DAC BUFFER COUNT      16              16            Permits 26.67mS of audio to be queued prior to transmit to prevent underruns.
//                  : RX ADC SAMPLE BUFFER     96   words      96   words    Receive audio samples collected by ADC via DMA. 57,600 Hz sample rate.
//                  : RX ADC BUFFER COUNT      16              16            Permits up to 26.67mS of demodulation processing delay prior to sample loss.
//                  : RX DATA BUFFER           8    words      8    words    Data buffers where sliced bits demodulated from receive audio are collected.
//                  : RX BUFFER COUNT          9               9             Allows additional data accumulation during packet decoding.
//                  : AX25 RECEIVER            300  bytes      1068 bytes    Limits maximum AX.25 receive packet size, inclusive of header, payload, and CRC.
//                  : IL2P RECEIVER            1023 bytes      1023 bytes    Limits maximum IL2P receive packet payload size, exclusive of header and parity symbols.
//                  : UART TO HOST             1100 bytes      1100 bytes    Limits maximum KISS frame size returned to host.
// 3/4.01:23-Jan-20 : Modified serial number storage in flash program memory.
//                  : Serial number can only be set if value in flash program memory is clear.
//                  : Serial number read directly from flash program memory when requested by host.
© Tadd Torborg, 2019↝2021 -- all rights reserved