arhiv6 20 11 июля, 2018 Опубликовано 11 июля, 2018 · Жалоба Добрый день. Не редко в работе нужен USB-UART преобразователь с парой-тройкой gpio. Ранее использовал FTDI, но решил попробовать CP2102N. Пока выбирал - ориентировался на выложенные в сети примеры работы с gpio (гуглятся по cp210x_gpio_example2_linux.c или cp210x_gpio_example.c), там управление gpio делается через ioctl прямо в /dev/ttyUSB0 устройство. Только вот когда собрал плату, обнаружил, что в текущей версии драйвера отсутствует ioctl. Но зато есть какие-то свои функции (cp210x_gpio_*) для работы с gpio. Только я не могу понять - как к ним обратиться из пространства пользователя? Может где-нибудь есть примеры управления gpio через этот драйвер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 11 июля, 2018 Опубликовано 11 июля, 2018 · Жалоба Добрый день. Не редко в работе нужен USB-UART преобразователь с парой-тройкой gpio. Ранее использовал FTDI, но решил попробовать CP2102N. Пока выбирал - ориентировался на выложенные в сети примеры работы с gpio (гуглятся по cp210x_gpio_example2_linux.c или cp210x_gpio_example.c), там управление gpio делается через ioctl прямо в /dev/ttyUSB0 устройство. Только вот когда собрал плату, обнаружил, что в текущей версии драйвера отсутствует ioctl. Но зато есть какие-то свои функции (cp210x_gpio_*) для работы с gpio. Только я не могу понять - как к ним обратиться из пространства пользователя? Может где-нибудь есть примеры управления gpio через этот драйвер? Если у вас не старое ядро, то есть стандартный способ управлять ножками: https://github.com/torvalds/linux/blob/mast.../gpio/sysfs.txt Если не катит -- поищу исходники драйвера для управления ножками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 12 июля, 2018 Опубликовано 12 июля, 2018 · Жалоба Система - десктопная Ubuntu, ядро 4.15, т.е. не старое. Управлять через sysfs не получается - при подключении CP2102N новый gpiochip в /sys/class/gpio/ не появляется. Через новомодный uapi - то же самое, новый gpiochip в /dev/ не появляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 12 июля, 2018 Опубликовано 12 июля, 2018 · Жалоба Система - десктопная Ubuntu, ядро 4.15, т.е. не старое. Управлять через sysfs не получается - при подключении CP2102N новый gpiochip в /sys/class/gpio/ не появляется. Через новомодный uapi - то же самое, новый gpiochip в /dev/ не появляется. Это только через драйвер получится. /sys/class/gpio/ только для своих ножек годится. А найти код драйвера CP2102N и посмотреть как там сделано не пробовали? Может что-то поменяли и надо как-то модифицировать запрос? https://github.com/torvalds/linux/blob/mast...serial/cp210x.c Вот ключевая структура, определяющая девайс: struct cp210x_serial_private { #ifdef CONFIG_GPIOLIB struct gpio_chip gc; u8 config; u8 gpio_mode; bool gpio_registered; #endif u8 partnum; }; Проверьте если в ядре включено CONFIG_GPIOLIB. Тогда к GPIO доступ возможен. Если нет, то надо перекомпилировать драйвер, а возможно не только его. Есть разные места, где это можно посмотреть. В разных системах бывают разные комбинации. /proc/config.gz /boot/config /boot/config-$(uname -r) В первом случае во такая команда распакует архив: zcat /proc/config.gz > running.config Возможно это имеет отношение: https://lwn.net/Articles/574055/ http://www.armadeus.org/wiki/index.php?title=GPIOlib Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 12 июля, 2018 Опубликовано 12 июля, 2018 · Жалоба Система - десктопная Ubuntu, ядро 4.15, т.е. не старое. Управлять через sysfs не получается - при подключении CP2102N новый gpiochip в /sys/class/gpio/ не появляется. Через новомодный uapi - то же самое, новый gpiochip в /dev/ не появляется. А вы совершенно уверены, что "при подключении" нормально отрабатывается? Что говорят dmesg, lsmod и т.д.? Вообще то странно ... всякий производитель и всякое устройство обязаны поддерживать стандартный интерфейс GPIO. Если у вас не старое ядро, то есть стандартный способ управлять ножками: https://github.com/torvalds/linux/blob/mast.../gpio/sysfs.txt Подробно, внятно и просто, на пальцах - описано здесь: Linux: кнопки, светодиоды и GPIO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 12 июля, 2018 Опубликовано 12 июля, 2018 · Жалоба У меня есть положительный опыт управления CP2103 с использованием libusb из userspace. Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит. cp2103_gpio_20180712.1232.tar.xz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 12 июля, 2018 Опубликовано 12 июля, 2018 · Жалоба У меня есть положительный опыт управления CP2103 с использованием libusb из userspace. Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит. Я тоже использую CP2102/CP2103 (законченные устройства) в качестве конверторов USB-UART (например, в однопллатных SoC незаменимая вещь просматривать сообщения U-boot ... или вообще взаимодействовать с embedded устройства). Но ТС называл устройство CP2102N (там этих CP2102N 3 или 4 штуки, с разными суффиксами, отличающиеся конструктивом и др.). А у этих там 3 (что ли) дискретных вывода GPIO, сверх канала USB-UART. Конечно, это не GPIO вовсе, в смысле Linux GPIO, а ... чёрт знает что - самоделка на коленке ("дерибас" ;) ). И поэтому всё, что с ним буде связано, будет обязательно проблематичным :laughing: ... : реакция по выходу на такое ... "якобы-GPIO" будет ещё более-менее понятной, через ioctl() или libusb, но реакция по входу с таких "якобы-GPIO" (когда нужно бы реагировать на прерывания) - это вообще мрак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 13 июля, 2018 Опубликовано 13 июля, 2018 · Жалоба В даташите CP2103 сказано: 7. GPIO Pins The CP2103 supports (4) user-configurable GPIO pins for status and control information. More information regarding the configuration and usage of these pins can be found in “AN144: CP210x Customization Guide” and “AN223: Port Configuration and GPIO for CP210x” available on the Silicon Laboratories website. Смотрите там. Но там же и вот такое ... сильно настораживающее предупреждение: 10. USBXpress™ Direct Driver Support The Silicon Laboratories USBXpress™ for CP210x Development Kit provides an alternate solution for interfacing with CP2103 devices than using the Virtual COM port. No Serial Port protocol expertise is required. Instead, a simple, high-level application program interface (API) is used to provide simpler CP2103 connectivity and functionality. The USBXpress for CP210x Development Kit includes Windows device drivers, Windows device driver installer and uninstallers, and a host interface function library (host API) provided in the form of a Windows Dynamic Link Library (DLL). The included device drivers and installation files support MS Windows 98SE/2000/XP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 22 июля, 2018 Опубликовано 22 июля, 2018 · Жалоба А найти код драйвера CP2102N и посмотреть как там сделано не пробовали? Пробовал, находил. В первом посте написано. Вот ключевая структура, определяющая девайс: Да, я видел эту структуру. Там в коде драйвера ещё есть функции для работы с gpio (cp210x_gpio_*). Но не могу понять, как из пользовательского пространства получить доступ к этим функциям. Проверьте если в ядре включено CONFIG_GPIOLIB. Проверил, включен (CONFIG_GPIOLIB=y). А вы совершенно уверены, что "при подключении" нормально отрабатывается? Что говорят dmesg, lsmod и т.д.? Да вроде нормально всё dmesg: [43684.566224] usb 2-2: new full-speed USB device number 8 using uhci_hcd [43684.763274] usb 2-2: New USB device found, idVendor=10c4, idProduct=ea60 [43684.763276] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [43684.763278] usb 2-2: Product: CP2102N USB to UART Bridge Controller [43684.763279] usb 2-2: Manufacturer: Silicon Labs [43684.763280] usb 2-2: SerialNumber: 3c5e2951f9f3e7119e656e160c17285f [43684.766413] cp210x 2-2:1.0: cp210x converter detected [43684.772296] usb 2-2: cp210x converter now attached to ttyUSB0 lsmod: Module Size Used by cp210x 28672 1 usbserial 45056 3 cp210x cdc_acm 32768 0 btrfs 1122304 0 zstd_compress 163840 1 btrfs xor 24576 1 btrfs raid6_pq 114688 1 btrfs ufs 77824 0 qnx4 16384 0 hfsplus 106496 0 hfs 57344 0 minix 32768 0 ntfs 102400 0 msdos 20480 0 jfs 188416 0 xfs 1200128 0 libcrc32c 16384 1 xfs cpuid 16384 0 pci_stub 16384 1 vboxpci 24576 0 vboxnetadp 28672 0 vboxnetflt 28672 0 vboxdrv 471040 3 vboxnetadp,vboxnetflt,vboxpci binfmt_misc 20480 1 snd_hda_codec_hdmi 49152 1 edac_mce_amd 28672 0 sch_fq_codel 20480 2 cuse 16384 3 joydev 24576 0 input_leds 16384 0 snd_hda_codec_realtek 94208 1 snd_hda_codec_generic 73728 1 snd_hda_codec_realtek kvm_amd 86016 0 kvm 593920 1 kvm_amd snd_hda_intel 40960 6 snd_hda_codec 126976 4 snd_hda_intel,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec_realtek snd_hda_core 81920 5 snd_hda_intel,snd_hda_codec,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_cod ec_realtek irqbypass 16384 1 kvm snd_hwdep 20480 1 snd_hda_codec snd_pcm 98304 5 snd_hda_intel,snd_hda_codec,snd_hda_core,snd_hda_codec_hdmi eeepc_wmi 16384 0 asus_wmi 28672 1 eeepc_wmi crct10dif_pclmul 16384 0 sparse_keymap 16384 1 asus_wmi crc32_pclmul 16384 0 snd_seq_midi 16384 0 video 45056 1 asus_wmi wmi_bmof 16384 0 snd_seq_midi_event 16384 1 snd_seq_midi ghash_clmulni_intel 16384 0 pcbc 16384 0 snd_rawmidi 32768 1 snd_seq_midi snd_seq 65536 2 snd_seq_midi_event,snd_seq_midi snd_seq_device 16384 3 snd_seq,snd_rawmidi,snd_seq_midi snd_timer 32768 2 snd_seq,snd_pcm aesni_intel 188416 0 aes_x86_64 20480 1 aesni_intel crypto_simd 16384 1 aesni_intel glue_helper 16384 1 aesni_intel cryptd 24576 3 crypto_simd,ghash_clmulni_intel,aesni_intel k10temp 16384 0 snd 81920 22 snd_hda_intel,snd_hwdep,snd_seq,snd_hda_codec,snd_timer,snd_rawmidi,snd_hda_code c_hdmi,snd_hda_codec_generic,snd_seq_device,snd_hda_codec_realtek,snd_pcm ccp 73728 0 soundcore 16384 1 snd nvidia_uvm 757760 0 shpchp 36864 0 wmi 24576 2 asus_wmi,wmi_bmof mac_hid 16384 0 lm78 20480 0 hwmon_vid 16384 1 lm78 nfsd 339968 13 parport_pc 36864 0 auth_rpcgss 61440 1 nfsd ppdev 20480 0 nfs_acl 16384 1 nfsd lockd 90112 1 nfsd lp 20480 0 grace 16384 2 nfsd,lockd parport 49152 3 lp,parport_pc,ppdev sunrpc 335872 18 auth_rpcgss,nfsd,nfs_acl,lockd ip_tables 28672 0 x_tables 40960 1 ip_tables autofs4 40960 2 hid_generic 16384 0 usbhid 49152 0 hid 118784 2 hid_generic,usbhid nvidia_drm 40960 2 nvidia_modeset 1110016 8 nvidia_drm nvidia 14340096 460 nvidia_modeset,nvidia_uvm drm_kms_helper 172032 1 nvidia_drm syscopyarea 16384 1 drm_kms_helper sysfillrect 16384 1 drm_kms_helper sysimgblt 16384 1 drm_kms_helper fb_sys_fops 16384 1 drm_kms_helper drm 401408 5 nvidia_drm,drm_kms_helper i2c_piix4 24576 0 ipmi_devintf 20480 0 ipmi_msghandler 53248 2 nvidia,ipmi_devintf r8169 86016 0 ahci 36864 4 mii 16384 1 r8169 libahci 32768 1 ahci gpio_amdpt 16384 0 gpio_generic 20480 1 gpio_amdpt У меня есть положительный опыт управления CP2103 с использованием libusb из userspace. Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит. Спасибо, посмотрю, если не получится работать через стандартный драйвер. Вообще, как я понял, стандарный драйвер должен предоставлять доступ к этим GPIO через интерфейс gpio uapi. Про него обзор тут есть. Но lsgpio/gpiodetect/gpioinfo видят только 2 устройства, относящиеся к материнской плате (gpiochip0 [AMDI0030:00] (256 lines) и gpiochip1 [AMDIF030:00] (8 lines)). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 29 июля, 2018 Опубликовано 29 июля, 2018 · Жалоба Похоже поддержка gpio в драйвере cp210x.c просто не доделана, т.к. недавно в рассылке ядра появился этот патч: https://patchwork.kernel.org/patch/10536995/ Поэтому остановился на использовании этого кода: https://github.com/nekromant/pl2303gpio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться