Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: работа с GPIO через I2С расширитель PCA9555PW
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Метценгерштейн
На плате стоят 2 расширителя GPIO на PCA9555PW. Адреса 0х20 0х21 на определенной шине I2C.
Есть скрипт, шел с этой платой, с образом Ubuntu.
Работа такая:
запускаю
./gpio_out.sh 240 1
выставляю на какой- то ноге 1.

сам скрипт:
Код
#!/bin/bash

PIO=${1}
MODE=${2}

if [ ! -d /sys/class/gpio/gpio${PIO}/ ]; then
    echo "Exporting gpio$PIO"
    echo $PIO > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio${PIO}/direction
fi

echo "gpio$PIO set to $MODE"
echo $MODE > /sys/class/gpio/gpio${PIO}/value

Где описано, что 240- это определенная нога этой PCA9555PW? Где указано, что сидит она на определенной шине I2C и какой имеет адрес? Как мне вторую PCA9555PW запустить на адресе 0х21?

Jury093
Цитата(Метценгерштейн @ Aug 4 2016, 17:21) *
Где описано, что 240- это определенная нога этой PCA9555PW? Где указано, что сидит она на определенной шине I2C и какой имеет адрес? Как мне вторую PCA9555PW запустить на адресе 0х21?

посмотрите вывод команды
Код
ls -l /sys/class/gpio

обычно расширители идут после блок регистров АРМа..
Метценгерштейн
Вот вывод команды. Что тут можно узнать?
Код
<-(root@nitrogen)-(0)-(04:23 Mon Aug 01)->
<-(/)->
(0) # ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 Dec 31  1969 export
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip0 -> ../../devices/soc0/soc.1/2                                                                                                                               000000.aips-bus/209c000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip128 -> ../../devices/soc0/soc.1                                                                                                                               /2000000.aips-bus/20ac000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip160 -> ../../devices/soc0/soc.1                                                                                                                               /2000000.aips-bus/20b0000.gpio/gpio/gpiochip160
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip192 -> ../../devices/soc0/soc.1                                                                                                                               /2000000.aips-bus/20b4000.gpio/gpio/gpiochip192
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip224 -> ../../devices/soc0/soc.1                                                                                                                               /2100000.aips-bus/21a4000.i2c/i2c-1/1-0021/gpio/gpiochip224
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip240 -> ../../devices/soc0/soc.1                                                                                                                               /2100000.aips-bus/21a4000.i2c/i2c-1/1-0020/gpio/gpiochip240
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip32 -> ../../devices/soc0/soc.1/                                                                                                                               2000000.aips-bus/20a0000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip64 -> ../../devices/soc0/soc.1/                                                                                                                               2000000.aips-bus/20a4000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root    0 Dec 31  1969 gpiochip96 -> ../../devices/soc0/soc.1/                                                                                                                               2000000.aips-bus/20a8000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Dec 31  1969 unexport

<-(root@nitrogen)-(0)-(04:23 Mon Aug 01)->
Jury093
Цитата(Метценгерштейн @ Aug 4 2016, 17:52) *
Вот вывод команды. Что тут можно узнать?

Код
i2c/i2c-1/1-0020/gpio/gpiochip240

это расширитель 0 с gpio[240-255]

Код
i2c/i2c-1/1-0021/gpio/gpiochip224

это расширитель 1 с gpio[224-239]
Метценгерштейн
Спасибо. А как установить, что это с 240 начинается? Или с 224? Можно ли его поменять?
Jury093
Цитата(Метценгерштейн @ Aug 4 2016, 18:06) *
Спасибо. А как установить, что это с 240 начинается? Или с 224? Можно ли его поменять?

никогда не было такой задачи, в теории это можно покрутить в потрохах ядра или в драйвере для PCAxxxx, но лучше этого не делать, чтобы избежать неоднозначности наименования аппаратуры и ресурсов

у вас последний блок GPIO для АРМа начинается так:
Код
2000000.aips-bus/20b4000.gpio/gpio/gpiochip192

и занимает 32 - число GPIO в блоке
192+32=224 - это число вычисляется в ядре при запросе драйвера, например pca9555 (не смотрел d/s но вероятно 16 пинов для GPIO), тогда следующий расширитель будет
224+16=240
кстати, логичнее было бы 0х20 с 224, а 0х21 с 240, почему тут наоборот - не знаю, не сталкивался. возможно в описание слейвов на шине в ядре первым прописан 0х21 и получает блок с 224..
Метценгерштейн
Спасибо большое. Очень помогли.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.