Aleksei_Rostov 0 16 сентября, 2020 Опубликовано 16 сентября, 2020 · Жалоба Добрый день! подскажите пожалуйста какие есть варианты работы с i2c устройствами для ZYnqMP из user space и как данные варианты реализовать. Как понимаю, есть два встроенных контроллера i2c и есть IP core IIC. Работать можно через open/close/ioctl/write/read следующим образом: 1. Написать свой kernel module. 2. Использовать готовый драйвер, написанный под конкретное устройство (в DT указывается типа в строке compatible = "at,24c08"). 3. Использовать встроенный драйвер от Xilinx (В конфиге ядра CONFIG_I2C_XILINX=y). Я понимаю как написать свой модуль, как реализовать приложение в user space. Не понятно, как правильно прописывать устройства в device tree, например если использовать встроенный драйвер от XIlinx? Как использовать один i2c контроллер общей шиной для нескольких слейвов и вывести пины для каждого слейва? Буду признателен за любые советы) Вот что у меня получилось. Есть i2c для EEPROM и добавил IIC IP core для какого либо слейва. i2c0: i2c@ff020000 { compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 17 4>; reg = <0x0 0xff020000 0x0 0x1000>; #address-cells = <1>; #size-cells = <0>; power-domains = <&zynqmp_firmware 37>; }; i2c1: i2c@ff030000 { compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 18 4>; reg = <0x0 0xff030000 0x0 0x1000>; #address-cells = <1>; #size-cells = <0>; power-domains = <&zynqmp_firmware 38>; }; axi_iic_0: i2c@80000000 { #address-cells = <1>; #size-cells = <0>; clock-names = "s_axi_aclk"; clocks = <&zynqmp_clk 71>; compatible = "xlnx,axi-iic-2.0", "xlnx,xps-iic-2.00.a"; interrupt-names = "iic2intc_irpt"; interrupt-parent = <&gic>; interrupts = <0 89 4>; reg = <0x0 0x80000000 0x0 0x1000>; }; &i2c0 { clock-frequency = <400000>; status = "okay"; }; aliases { ethernet0 = &gem3; i2c1 = &axi_iic_0; i2c0 = &i2c0; serial0 = &uart0; spi0 = &qspi; }; После старта # i2cdetect -l i2c-1 i2c xiic-i2c I2C adapter i2c-0 i2c Cadence I2C at ff020000 I2C adapter Лог загрузки [ 12.998730] usbcore: registered new interface driver usb-storage [ 12.999247] rtc_zynqmp ffa60000.rtc: registered as rtc0 [ 12.999298] i2c /dev entries driver [ 13.000721] usbcore: registered new interface driver uvcvideo Через утилиты i2cget / i2cset без проблем работаю с eeprom (i2c-0) # i2cdetect -y 0 -r 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: 70 -- -- -- -- -- -- -- # i2cset -y 0 0x50 0x00 0x69 # i2cget -y 0 0x50 0x00 0x69 c iic так не получается # i2cdetect -y 1 -r 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- # i2cset -y 1 0x48 0x00 0x69 # i2cget -y 1 0x48 0x00 i2cget: read failed: Input/output error Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться