Using TNC-PI via i2c Interface
Enabling i2c on PI
Note. On Version 1 boards (without the two mounting holes) the i2c bus
on the main header is number 0. On Version 2 boards it is number 1.
To use i2c, (which you need if you want to run more than one TNC-PI)
you need to enable loading of the Kernel i2c module, and load the i2c
userspace interface
Edit /etc/modprobe.d/raspi-blacklist.conf,
and remove line blacklist i2c-bcm2708.
Edit /etc/modules and add line
i2c-dev
Install i2c tools - not essential, but useful when testing sudo apt-get install i2c-tools
Reboot the PI
By default user PI won't have access to the i2c bus. Ypu can run
everything as root using sudo, but it is better to give pi access to
the i2c bus by adding user pi to group i2c
sudo usermod -a -G i2c pi
You'll need to log in again to pick up the new groups. If all this has
worked you should be able to run the command
i2cdetect 1 (or i2cdetect 0 if using a Version 1
board).This lists all devices sound on the bus.
Configuring TNC
The TNC is shipped configured to use the serial port. To enable i2c you
have to
change the value in location 7 of the NVRAM. If you have more than one
TNC you have to do one at a
time - you cant have two TNCs using the serial port at the same time.
So plug in one of the TNCs, and run
./pitnc_getparams 0 0 - you
should get something like
01 TXDelay - Zero means use ADC 00
02 Persistance 64
03 Slottime (in 10 mS) 10
04 TXTail 0
05 Full Duplex - Not used 0
06 Our Channel (Hex) 00
07 I2C Address (0 = async) Hex 00
ADC Value 28
8 0 00 40 a 0 0 0 0 1c 74 c0 sum 2
Set the i2c address - I usually start from 16 (for no very good reason)
Warning - the i2c address must be between 3 and 119.
./pitnc_setparams 0 0 7 16 This should now show that
location 7 is 16 (10 hex)
Confirm with another get_params. Note that it wont switch to i2c mode
till the TNC is reset. To do this set reg 15 to 2
./pitnc_setparams 0 0 15 2 The leds should flash,
but you wont get a response
(as the program is still in serial mode). Now read the params in i2c
mode
./pitnc_getparams 1 16
(assuming it is a Version 2 board (with the mounting
holes). It should now respond.
You can also use i2cdetect to check that the TNC is visible on the i2c
bus.
John Wiseman G8BPQ
22/3/2013