Files
tinio/docs/manual.md
[ Kristjan Komloši HomePC ] da5f1001e0 Working on configuration flash docs
2017-06-21 18:44:19 +02:00

5.3 KiB

TinI/O manual


1. Introduction to TinI/O

1.1 What is TinI/O?

TinI/O (or tinio) is a program that makes Linux computers with USB GPIO-capable and expands the existing capabilities on GPIO-enabled computers. It does that with its hardware counterpart, the Cypress CY7C65211 USB-Serial chip.

1.2 What features does TinI/O have?

  • It can make any linux computer GPIO enabled
  • It runs as a standalone program that can be easily integrated into other programs via system() calls
  • It consumes almost none of the host computer's resources, because it never runs in the background
  • It's compatible with almost every Linux system that has USB, including the embedded and older ones
  • It operates over USB 1.1, which makes TinI/O compatible even with the oldest of USB-enabled computers

1.3 How does it work?

TinI/O can't provide GPIO by itself. Its capabilites rely on its chip companion (CY7C65211), libusb and cyrozap's libcyusbserial library. When TinI/O is ran, it processes its arguments and sends commands to the chip via the before mentioned libraries. The chip then changes its GPIO pins' states accordingly.

1.4 Under what license can it be used?

TinI/O is licensed under the GNU General Public License, which is publicly available at http://www.gnu.org/licenses/gpl.html and in the COPYING file in the docs directory in the project's root.

2. Installing

2.1 What you should know

TinI/O binaries aren't available yet, but that isn't a problem, because TinI/O is very easy to build, even for people not familiar with program building procedures.

TinI/O requires some quite basic system requirements, so before you proceed, make sure that you have:

  • a working C and C++ compiler (a working C++ is a working C compiler, but not the other way round!)
  • installed libusb
  • GNU Make and cmake

2.2 Manual build

This chapter explains how to build TinI/O manually. If you don't feel comfortable or don't want to build it manually, skip this chapter.

The TinI/O build process is pretty common. It's automated with a makefile, common to most *nix build processes. It has 4 build targets:

Target Description
default The default target. Calls utils and tinio targets.
tinio Builds main TinI/O program.
utils Builds the flasher utility.
install Installs TinI/O and the flasher utility to /usr/bin and the flash files to /usr/bin/tinio/flashes

2.2.1 Building the Library

To communicate with the chip, TinI/O needs a dedicated library written by cyrozap that comes with TinI/O but needs to be built separately. To do that, run cmake .. && make && sudo make install inside the cylib/build directory in the project root.

2.2.2 Building everything else

To complete the installation process, run make && make install in the tinio directory in the project root. That will build and install the flasher utility and TinI/O itself.

2.1 The autobuilder

Because some people don't like manual binary building, TinI/O comes with the autobuilder shell script, which allows non-experienced users to install TinI/O without knowing much about GNU Make, GCC and other tools that are used to build it. It's very minimalistic: the only thing it does is following the manual build process described in the previous chapter and checks forany errors at the end of each step.

The autobuilder-automated build process is simple. You just need to run the script, which will do a typical TinI/O instalation.

3. After the installation

After the installation of TinI/O, you actually don't need to do anything at all with it. The next step is to prepare the actual device you'll be using TinI/O with.

3.1 Flashing the chips

Cypress CY7C65211 can be flashed only from Windows with a dedicated Cypress utility due to its unique flash file format. Fortunately, after some bargaining with Cypress I got a Linux utility that is licensed under LGPL and free (as speech and beer). It can flash special, decoded versions of flash files that can be produced with a special Windows decoder executable that I can't provide with TinI/O because it's not GPL'd (actually it's not even licensed!) and isn't released to the public (yet). Instead the TinI/O package includes 2 already decoded flash files that should satisfy the needs of a typical user. Their names are:

  • 5-5_decoded.cyusbd, that provides 5 input and 5 output ports
  • 3-3cs_decoded.cyusbd, that provides 3 input and 3 output ports, plus a CapSense button with its dedicated input.

And they provide the following configurations:

parameter value in 5-5_decoded.cyusbd value in 3-3cs_decoded.cyusbd
Max. current drawn from USB 350 mA 350 mA
USB device class PHDC PHDC
I/O logic level LVTTL LVTTL
USB Vendor ID 0x04b4 (Cypress) 0x04b4 (Cypress)
USB Product ID 0x0002 0x0002
Manufacturer string TinI/O TinI/O
Product string 5/5 3/3CS
UART Tx pin 5 5

3.3 Flashing with the cy-config utility