BLOG: Převodník USB2CAN a Raspberry PI

David Španěl, CANLAB s.r.o.

Jako každé vánoce se 3-4 den volna začnu poněkud nudit, proto zkouším programovat něco pro mne nového nebo řeším různé nedodělky, na které se v průběhu roku nedostalo. Vzhledem k tomu, že jsme začali ve firmě používat v jednom produktu Raspberry Pi, rozhodl jsem se „rozchodit“ náš převodník USB2CAN (interface na CAN sběrnice do USB) s RPI. Idea je využívat pro dlouhodobé testování jako generátor dat na CAN bus právě RPI, kterých máme dostatek a nahradit tím PC. Navíc každý rok se vyskytnou 1 až 2 dotazy, zda podporujeme převodník USB2CAN na Linuxu, takže konečně bude možné odpovědět kladně.

Jak začít? Nejprve je třeba si stáhnout od firmy Future Technology Devices International knihovny. X2CAN API pro Windows jehož část pro převodník USB2CAN jsem naportoval pod Linux (Raspberry PI) používá ovladače/knihovny D2XX. Verze pro RPI je dostupná zde: http://www.ftdichip.com/Drivers/D2XX.htm.

Instalace knihoven se provádí přesně podle návodu na stránkách, tedy tímto postupem:

1.  tar xfvz libftd2xx-<platform>-1.3.6.tgz

This unpacks the archive, creating the following directory structure:

    build

        libftd2xx        (re-linkable objects)

        libusb           (re-linkable objects)

        libftd2xx.a      (static library)

        libftd2xx.so.1.3.6   (dynamic library)

        libftd2xx.txt    (platform-specific information)

    examples

    libusb               (source code)

    ftd2xx.h

    WinTypes.h

2.  cd build

3.  sudo -s or, if sudo is not available on your system:su

Promotes you to super-user, with installation privileges.  If you're already root, then step 3 (and step 7) is not necessary.

4.  cp libftd2xx.* /usr/local/lib

Copies the libraries to a central location.

5.  chmod 0755 /usr/local/lib/libftd2xx.so.1.3.6

Allows non-root access to the shared object.

6.  ln -sf /usr/local/lib/libftd2xx.so.1.3.6 /usr/local/lib/libftd2xx.so

Creates a symbolic link to the 1.3.6 version of the shared object.

7. sudo ldconfig /usr/local/lib

Configure dynamic linker run-time bindings.

8.  exit

Druhým krokem je vytvoření projektu. V naší firmě při vývoji SW na RPI neprogramujeme přímo na RPI, ale využíváme nástroje VisualDBG (http://www.visualgdb.com ). Jelikož primárně používáme Visual Studio, je pro nás mnohem pohodlnější programovat přímo ve Visual Studiu a používat tuto nadstavbu. VisualDBG se integruje do MSVC a dovoluje vytvářet projekty, ladit aplikaci přímo v něm. Při překladu se soubory z PC uploaduji na cílovou platformu (RPI) automaticky, proběhne překlad a pro ladění je možné používat pohodlí Visual Studia. Navíc VisualDBG používá pro zobrazení grafické aplikace Xming X Server, takže laděná aplikace se zobrazuje přímo na PC. V praxi tedy stačí propojit RPI s PC síťovým kabelem (funguje to lépe než přes WiFi), připojit k RPI napájecí zdroj a je hotovo, není třeba žádné klávesnice či monitoru. Těch aktuálně 89 euro za licenci prostě stojí za to.

Protože se s portací knihovny X2CAN kdysi dávno již počítalo, vlastní dokončení naportování byla otázka 2 hodin. Jediný zádrhel nastal v okamžiku, kdy bylo možné připojený USB2CAN interface vylistovat funkcí FT_ListDevices, nicméně nebylo možné zařízení otevřít. Naštěstí „strejda Google“ našel odpověď hned, problém na Linuxu je automatické spuštění driveru VCP (Virtual COM port) který není s D2XX driverem kompatibilní. Před spuštěním je třeba zadat tyto příkazy:

sudo rmmod ftdi_sio

sudo rmmod usbserial

Případně je možné tyto příkazy zavolat přímo z kódu. Aplikaci je pak nutno spouštět s příkazem sudo.

Druhou možností je úprava pravidel udev dle tohoto postupu:

V adresáři /etc/udev/rules.d vytvořte soubor 99-ftdi-sio.rules

Do tohoto souboru vložte pravidlo jako jeden řádek:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="USB2CAN", MODE="0666",  RUN+="/bin/sh -c 'rmmod ftdi_sio && rmmod usbserial'"

Toto pravidlo by mělo při připojení FTDI zařízení s daným PID a VID a názvem USB2CAN vyjmout příslušné moduly.

Funkci lze ještě možné vylepšit pravidlem pro zpětné nahrání při odpojení.

Když už to šlo tak rychle, rozhodl jsem se naučit něco nového. Při vývoji na Windows používám jako GUI knihovnu MFC. Pro někoho je to sice možná stará technologie, ale v posledních letech se dočkala ve Visual Studiu nových prvků, je spolehlivá, jsem na ni zvyklý, máme nakoupeny licence pro nějaké externí knihovny a na rozdíl od jiných řešení žije dál a ty kdysi „nové“ jsou už dnes „mrtvé“..... No nicméně s MFC si na Linuxu ani neškrtnu, nastal tedy čas naučit se alespoň trochu QTčka.

VisualDBG nám v tom dokáže opět usnadnit práci, pokud začneme vytvářet projekt pro QT, VisualDBG automaticky stáhne QTčka na RPI a vše automaticky nainstaluje a nastaví. Protože v tento okamžik s QT teprve začínám, prosím nekamenujte mne, pokud něco funguje poněkud kostrbatě. Rád se poučím, takže připomínky emailem (spanel zavináč canlab.cz) jsou vítány.

Pro práci se soubory typu ui je dobré nainstalovat do Visual Studia Qt Visual Studio Add-in (http://www.qt.io/ ) a dialogy editovat v nástroji QT Designer.

Pro grafy je třeba nějaká knihovna, já jsem použil knihovnu QWT (http://qwt.sourceforge.net ). Instalace je jednoduchá:

cd /home/pi/qwt-6.1.2

/usr/local/bin/qmake

make -j 4

sudo make install

Tady jen drobná poznámka, máte li RPI 2, příkaz make –j 4 použije pro kompilaci všechny 4 jádra, což podle zkušeností urychlí překlad až 6-násobně proti první verzi RPI.

V mém případě bylo třeba ještě potřeba zavolat příkaz sudo ldconfig pro aktualizaci cache knihoven.

Pro kontrolu uvádím natavení projektu ve VisualDBG:

Pro Raspberry PI 2k příkazu make doplňte přes Customize parametr j4.

Preprocessor macros: DEBUG _LINUX

Include directories: /usr/local/qwt-6.1.2/include

Library directories: -L/usr/local/lib -L/usr/local/qwt-6.1.2/lib

Library names: -lpthread -ldl -lrt -lftd2xx –lqwt

Zde uvádím prozatímní výsledek, v plánu mám doplnit nástroj File sender tak jak je v našem originálním programu PP2CAN, aby bylo možno RPI využít k dlouhodobému testování jako generátor dat. Po jeho doplnění bude kompletní zdrojový kód dostupný ke stažení.

USB2CAN  a aplikace pro Raspberry PI