Obsah
Převodník I²C na USB s AVR (známý jako i2c-tiny-usb)
Cílem této konstrukce je vyřešit častý problém přípojení I2C nebo SMBus zařízení, nebo čidla k počítači. Klasické řešení tohoto problému je připojení čidla k některému mikrokontroléru a pak následně k nadřazenému systému, Jednou z hlavních nevýhod tohoto přístupu je, že musí být dopředu známá konfigurace čidel připojených k mikroprocesoru a zároveň čtení čidel je vázáno na firmware v mikroprocesoru. Je proto žádoucí nechat při dnešním výpočetním výkonu, který je k dispozici čtení čidel přímo na nadřazeném systému v počítači, tak aby konfigurace čidel a verze driveru čidla mohla být libovolně změněna i za běhu a nebyla vázána na fixní firmware v MCU.
Konstrukce převodníku
Zapojení
Principiální zapojení převodníku je následující:
Reálně je však v provedení MLABu zařízení složeno z několika modulů.
Firmware
Firmware je dostupný v dokumentační složce MLAB
Funkce
Po připojení konstrukce k počítači můžeme na USB nalézt následující zařízení.
$ sudo lsusb -v -d 0403:c631 Bus 003 Device 018: ID 0403:c631 Future Technology Devices International, Ltd i2c-tiny-usb interface Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0403 Future Technology Devices International, Ltd idProduct 0xc631 i2c-tiny-usb interface bcdDevice 1.05 iManufacturer 1 Till Harbaum iProduct 2 i2c-tiny-usb iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 18 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 10mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 0 (Defined at Interface level) bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Device Status: 0x0000 (Bus Powered)
Toto zařízení je pak automaticity enumerováno a rozpoznáno jako I2C rozhraní.
Enumerace na USB
[38601.270471] usb 3-3.1: new low-speed USB device number 18 using xhci_hcd [38601.292607] usb 3-3.1: New USB device found, idVendor=0403, idProduct=c631 [38601.292613] usb 3-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [38601.292616] usb 3-3.1: Product: i2c-tiny-usb [38601.292618] usb 3-3.1: Manufacturer: Till Harbaum [38601.312318] i2c-tiny-usb 3-3.1:1.0: version 1.05 found at bus 003 address 018 [38601.332450] i2c i2c-8: connected i2c-tiny-usb device [38601.332473] usbcore: registered new interface driver i2c-tiny-usb
Obvykle je ale pro vytvoření zařízení /dev/i2c-8 do kernelu nahrát ještě modul i2c-dev.
$ sudo modprobe i2c-dev
Pak již vidíme všechna I2C a SMB rozhraní v počítači.
$ sudo i2cdetect -l i2c-0 i2c i915 gmbus ssc I2C adapter i2c-1 i2c i915 gmbus vga I2C adapter i2c-2 i2c i915 gmbus panel I2C adapter i2c-3 i2c i915 gmbus dpc I2C adapter i2c-4 i2c i915 gmbus dpb I2C adapter i2c-5 i2c i915 gmbus dpd I2C adapter i2c-6 i2c DPDDC-C I2C adapter i2c-7 i2c DPDDC-D I2C adapter i2c-8 i2c i2c-tiny-usb at bus 003 device 018 I2C adapter
Související stránky
- USBI2C - modernější modul určený k přímému převodu I2C na USB