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

 
 
 
Reply to this topicStart new topic
> GPIO через расширитель pcf8574 на i2c-tiny-usb, Как правильно инициировать GPIO
Чижик
сообщение Mar 20 2017, 10:37
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 17-03-17
Пользователь №: 95 864



Добрый день.
Через конвертер i2c-tiny-usb подключен расширитель pcf8574.
Система на базе Intel. Ядро скомпилировано с модулями поддержки указанных устройств.
Имеем вывод

Код
Last login: Mon Mar 20 12:58:17 MSK 2017 on tty1
Linux SONY 3.16.39v1 #1 SMP Wed Mar 15 10:39:26 MSK 2017 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@SONY:~# uname -a
Linux SONY 3.16.39v1 #1 SMP Wed Mar 15 10:39:26 MSK 2017 i686 GNU/Linux
root@SONY:~# modprobe i2c-tiny-usb
[   41.713431] usbcore: registered new interface driver i2c-tiny-usb
root@SONY:~# modprobe i2c-dev
[   48.306626] i2c /dev entries driver
root@SONY:~# [   53.808164] usb 5-2: new high-speed USB device number 5 using ehci-pci
[   53.940723] usb 5-2: New USB device found, idVendor=0409, idProduct=005a
[   53.940879] usb 5-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   53.941709] hub 5-2:1.0: USB hub found
[   53.941937] hub 5-2:1.0: 4 ports detected
[   54.228148] usb 5-2.4: new low-speed USB device number 6 using ehci-pci
[   54.346406] usb 5-2.4: New USB device found, idVendor=0403, idProduct=c631
[   54.346566] usb 5-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   54.346713] usb 5-2.4: Product: i2c-tiny-usb
[   54.346803] usb 5-2.4: Manufacturer: Till Harbaum
[   54.347841] i2c-tiny-usb 5-2.4:1.0: version 1.05 found at bus 005 address 006
[   54.348702] i2c i2c-6: connected i2c-tiny-usb device
modprobe i2c-echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-6/new_device
[   65.011568] i2c i2c-6: new_device: Instantiated device ds1307 at 0x68
root@SONY:~# [   65.122707] rtc-ds1307 6-0068: rtc core: registered ds1307 as rtc1
[   65.131649] rtc-ds1307 6-0068: 56 bytes nvram
echo ds1307 0echo pcf857x 0x20 > /sys/class/i2c-adapter/i2c-6/new_device
[   92.587659] i2c i2c-6: new_device: Instantiated device pcf857x at 0x20
root@SONY:~# i2cdetect -y 6
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
root@SONY:~# echo 76 > /sys/class/gpio/export
-bash: echo: ошибка записи: Нет такого устройства

На шине i2c три устройства. DS1307 подключается, регистрируется /dev/rtc1/.Все работает.

Модуль PCF857x загружается, но как к нему обратиться через gpio не понятно.
Какие пины можно зарегистрировать? Где это посмотреть или задать?
Что означает выдаваемая ошибка? Что-то недоконфигурено в ядре?
Конфиг ядра для GPIO
Код
# Pin controllers
#
# CONFIG_PINMUX is not set
# CONFIG_PINCONF is not set
# CONFIG_DEBUG_PINCTRL is not set
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_DEVRES=y
CONFIG_GPIO_ACPI=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y

#
# Memory mapped GPIO drivers:
#
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_IT8761E is not set
# CONFIG_GPIO_F7188X is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SCH is not set
# CONFIG_GPIO_ICH is not set
CONFIG_GPIO_VX855=m
# CONFIG_GPIO_LYNXPOINT is not set

#
# I2C GPIO expanders:
#
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
CONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_ADP5588 is not set

Помогите вЪехать в тему. Куда посмотреть?

PS Понятно что через i2c-tools пины pc8574 читаются и пишутся.

Сообщение отредактировал Чижик - Mar 20 2017, 10:41
Go to the top of the page
 
+Quote Post
Jury093
сообщение Mar 20 2017, 12:01
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 743
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Чижик @ Mar 20 2017, 13:37) *
Помогите вЪехать в тему. Куда посмотреть?
PS Понятно что через i2c-tools пины pc8574 читаются и пишутся.

судя по номеру
Код
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

драйвер не "накрыл" обслуживание расширителя, отсюда и ругань:
Код
root@SONY:~# echo 76 > /sys/class/gpio/export
-bash: echo: ошибка записи: Нет такого устройства

сначала добейтесь, чтобы вместо 0x20 виделся "M", тогда драйвер должен создать структуры в /sys/class/gpio
которые можно активизировать через echo
номер 76 взяли от балды? у вас 8-ми портовый расширитель, значит блок номеров будет последовательно 8 устройств..
как я понимаю, система х86? как в них нарезают номера я не знаю, обычно в АРМах младшие номера заняты под систему, далее порты самого АРМа, потом порты периферии
покопайтесь в документации к ядре в каталоге Documentation..
Go to the top of the page
 
+Quote Post
Чижик
сообщение Mar 20 2017, 13:11
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 17-03-17
Пользователь №: 95 864



Цитата(Jury093 @ Mar 20 2017, 15:01) *
судя по номеру
Код
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

драйвер не "накрыл" обслуживание расширителя, отсюда и ругань:
Код
root@SONY:~# echo 76 > /sys/class/gpio/export
-bash: echo: ошибка записи: Нет такого устройства

сначала добейтесь, чтобы вместо 0x20 виделся "M", тогда драйвер должен создать структуры в /sys/class/gpio
которые можно активизировать через echo

Это понятно, что не накрыл. Почему?
В /sys/class/i2c-adapter/i2c-6/
создается директория /6-0020/, но в отличии от /6-0068/ в ней не создаются структуры

Цитата(Jury093 @ Mar 20 2017, 15:01) *
номер 76 взяли от балды? у вас 8-ми портовый расширитель, значит блок номеров будет последовательно 8 устройств..
как я понимаю, система х86? как в них нарезают номера я не знаю, обычно в АРМах младшие номера заняты под систему, далее порты самого АРМа, потом порты периферии
покопайтесь в документации к ядре в каталоге Documentation..

да перебрал от балды номера от 0 до 100 ... но это так для текста, поскольку понятно, что модуль не встал.
для систем х86 с нумерацией вопрос не очевидный ? и как то для такого случая непонятно где заданы номера GPIO (DTB для х86 нет ?)

PS опечатка в листинге имя модуля gpio-pcf857x, а не как написано pcf857x..

Понятно, что тема с GPIO изъезжена, и разжёвана, но тем не менее не проходите мимо, какие соображения...?
Go to the top of the page
 
+Quote Post
k155la3
сообщение Mar 20 2017, 13:31
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 434
Регистрация: 8-03-09
Из: Днепропетровск
Пользователь №: 45 848



Проверьте чтоб девайсы I2C не подрались по адресам.
Например 24LC16 и PCF8563 на одной шине работать не захотят sm.gif

Go to the top of the page
 
+Quote Post
Чижик
сообщение Mar 20 2017, 14:35
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 17-03-17
Пользователь №: 95 864



Классическая линуксовая засада.

Модуль называется gpio-pcf857x.ko
HO! загружаем командой

echo pcf8574 0x20 > /sys/class/i2c-adapter/i2c-6/new_device

и все срабатывает. Сейчас (после двух суток разглядывания листинга модуля) кажется логичным в стиле ЛИНУХ-ВЭЙ.

Но требует раздвоения сознания.


РЕШЕНО.

PS Далее зреет вопрос по модулю PCA9685 и его связи с PWM-PCA9685 и PWM.

Но это уже завтра.
Go to the top of the page
 
+Quote Post
Чижик
сообщение Mar 22 2017, 08:46
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 17-03-17
Пользователь №: 95 864



Цитата(k155la3 @ Mar 20 2017, 16:31) *
Проверьте чтоб девайсы I2C не подрались по адресам.
Например 24LC16 и PCF8563 на одной шине работать не захотят sm.gif


Да, это надо иметь ввиду.

Чтоб была ясность - PCF8574 ... не имеют внутренних адресуемых регистров, поэтому не понимают "повторного старта", используемого для указания внутреннего адреса регистра уст-ва на шине I2c. И если их физ. адрес совпадает с внутренним адресом устройства на шине I2c, они "отзовутся" на этот адрес в адресной последовательности "повторного старта". Для них каждый "старт" - первый.

PS Если PCF 8574 нормально "встал" на шину i2c, то в /sys/class/i2c-adapter/i2c-x/x-0020/ появится /gpio/gpiochip248 <-- первый номер GPIO, т.е.
echo 248 > export
....
echo 255 > export

Сообщение отредактировал Чижик - Mar 22 2017, 08:48
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th March 2017 - 00:48
Рейтинг@Mail.ru


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