реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Драйвер CP210x - управление GPIO, Как ими управлять в последней версии драйвера?
arhiv6
сообщение Jul 11 2018, 05:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Добрый день.
Не редко в работе нужен USB-UART преобразователь с парой-тройкой gpio. Ранее использовал FTDI, но решил попробовать CP2102N. Пока выбирал - ориентировался на выложенные в сети примеры работы с gpio (гуглятся по cp210x_gpio_example2_linux.c или cp210x_gpio_example.c), там управление gpio делается через ioctl прямо в /dev/ttyUSB0 устройство. Только вот когда собрал плату, обнаружил, что в текущей версии драйвера отсутствует ioctl. Но зато есть какие-то свои функции (cp210x_gpio_*) для работы с gpio. Только я не могу понять - как к ним обратиться из пространства пользователя?
Может где-нибудь есть примеры управления gpio через этот драйвер?


--------------------
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jul 11 2018, 23:52
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(arhiv6 @ Jul 11 2018, 09:37) *
Добрый день.
Не редко в работе нужен 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

Если не катит -- поищу исходники драйвера для управления ножками.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jul 12 2018, 03:30
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Система - десктопная Ubuntu, ядро 4.15, т.е. не старое. Управлять через sysfs не получается - при подключении CP2102N новый gpiochip в /sys/class/gpio/ не появляется. Через новомодный uapi - то же самое, новый gpiochip в /dev/ не появляется.


--------------------
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jul 12 2018, 03:44
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(arhiv6 @ Jul 12 2018, 07:30) *
Система - десктопная 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
Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 12 2018, 08:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(arhiv6 @ Jul 12 2018, 06:30) *
Система - десктопная Ubuntu, ядро 4.15, т.е. не старое. Управлять через sysfs не получается - при подключении CP2102N новый gpiochip в /sys/class/gpio/ не появляется. Через новомодный uapi - то же самое, новый gpiochip в /dev/ не появляется.

А вы совершенно уверены, что "при подключении" нормально отрабатывается?
Что говорят dmesg, lsmod и т.д.?
Вообще то странно ... всякий производитель и всякое устройство обязаны поддерживать стандартный интерфейс GPIO.
Цитата(Tarbal @ Jul 12 2018, 02:52) *
Если у вас не старое ядро, то есть стандартный способ управлять ножками:
https://github.com/torvalds/linux/blob/mast.../gpio/sysfs.txt

Подробно, внятно и просто, на пальцах - описано здесь: Linux: кнопки, светодиоды и GPIO.

Go to the top of the page
 
+Quote Post
makc
сообщение Jul 12 2018, 09:00
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



У меня есть положительный опыт управления CP2103 с использованием libusb из userspace.
Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит.
Прикрепленные файлы
Прикрепленный файл  cp2103_gpio_20180712.1232.tar.xz ( 7.3 килобайт ) Кол-во скачиваний: 8
 


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 12 2018, 15:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(makc @ Jul 12 2018, 12:00) *
У меня есть положительный опыт управления CP2103 с использованием libusb из userspace.
Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит.

Я тоже использую CP2102/CP2103 (законченные устройства) в качестве конверторов USB-UART (например, в однопллатных SoC незаменимая вещь просматривать сообщения U-boot ... или вообще взаимодействовать с embedded устройства).

Но ТС называл устройство CP2102N (там этих CP2102N 3 или 4 штуки, с разными суффиксами, отличающиеся конструктивом и др.). А у этих там 3 (что ли) дискретных вывода GPIO, сверх канала USB-UART.
Конечно, это не GPIO вовсе, в смысле Linux GPIO, а ... чёрт знает что - самоделка на коленке ("дерибас" wink.gif ).
И поэтому всё, что с ним буде связано, будет обязательно проблематичным laughing.gif ... : реакция по выходу на такое ... "якобы-GPIO" будет ещё более-менее понятной, через ioctl() или libusb, но реакция по входу с таких "якобы-GPIO" (когда нужно бы реагировать на прерывания) - это вообще мрак.
Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 13 2018, 08:16
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



В даташите 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.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jul 22 2018, 18:24
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Цитата(Tarbal)
А найти код драйвера CP2102N и посмотреть как там сделано не пробовали?
Пробовал, находил. В первом посте написано.

Цитата(Tarbal)
Вот ключевая структура, определяющая девайс:
Да, я видел эту структуру. Там в коде драйвера ещё есть функции для работы с gpio (cp210x_gpio_*). Но не могу понять, как из пользовательского пространства получить доступ к этим функциям.

Цитата(Tarbal)
Проверьте если в ядре включено CONFIG_GPIOLIB.
Проверил, включен (CONFIG_GPIOLIB=y).

Цитата(Olej)
А вы совершенно уверены, что "при подключении" нормально отрабатывается? Что говорят 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:
CODE
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

Цитата(makc)
У меня есть положительный опыт управления CP2103 с использованием libusb из userspace.
Вполне рабочая программа во вложении. Думаю, что обеспечить в ней поддержку для CP2102 особых проблем не составит.
Спасибо, посмотрю, если не получится работать через стандартный драйвер.


Вообще, как я понял, стандарный драйвер должен предоставлять доступ к этим GPIO через интерфейс gpio uapi. Про него обзор тут есть. Но lsgpio/gpiodetect/gpioinfo видят только 2 устройства, относящиеся к материнской плате (gpiochip0 [AMDI0030:00] (256 lines) и gpiochip1 [AMDIF030:00] (8 lines)).


--------------------
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jul 29 2018, 14:49
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Похоже поддержка gpio в драйвере cp210x.c просто не доделана, т.к. недавно в рассылке ядра появился этот патч: https://patchwork.kernel.org/patch/10536995/
Поэтому остановился на использовании этого кода: https://github.com/nekromant/pl2303gpio


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 14:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016