Главная ВАЗ Двигатель Печка Глохнет

Имя: ( регистрация? ) Пароль ( забыл? ):

Главная Новости

Нумерация GPIO в Linux

Опубликовано: 05.09.2018

видео Нумерация GPIO в Linux

Структура файловой системы FAT32 - Разбираемся вместе - 2 выпуск!

Предположим вам досталась схема, в которой ленивый разработчик не указан номера GPIO. Вопрос, как определить его номер?


kwrite xml problem

Ситуация может быть следующей, нумерация ножек на чипе может выглядеть например так:

При чтении даташита можно определить, что нужная нам ножка, допустим R9, имеет номер, например GPIO5_1. В linux обычно ноги нумеруются подряд, т.е. gpio1, gpio2 и т.д. Как же связать эти номера? Логика довольно простая, ножки разбиты по группам, ровно как порты в микроконтроллерах, т.е. что вы его назовете GPIOA, что GPIO1, разницы в общем то никакой, важен базовый адрес.


Открытие проекта в Atmel Studio 7.0

Далее если запустить такой скрипт, то можно зачекать базовые адреса имеющихся gpio контроллеров

for f in `ls - d / sys /class /gpio /gpiochip *` ; do echo $f `cat $f /label $f /base $f /ngpio` ; done

Зная адреса их можно соотнести с даташитом. Gpiochip это базовый адрес, т.е. первая ножка порта, обычно в порту 32 ноги. Если внимательно посмотреть номера базовых адресов, то не сложно выявить закономерность: т.е. GPIO1_0 это самая первая нога, т.е. gpio0, от нее пойдут 32 ноги, т.е. GPIO1_1 = gpio2, GPIO1_2 = gpio3 и т.д. GPIO2_1 начнет нумерацию с gpio32. Т.е. итоговая формула (32*(порт-1))+номер ноги = нужный нам gpio в операционной системе. Вернувшись к искомому GPIO5_1 = gpio129.

Также особо хочется отметить, что этот скрипт полезен для определения базового адреса расширителей портов. На примере выше в поддержку драйверов включен I2C расширитель портов tca6424, т.е. первая нога будет gpio488 и от нее последуют следующие 24 ножки.

Надеюсь эта короткая заметка поможет вам быстро сориентироваться с номерами ног и не путаться.







Навигация
Реклама
Популярное


    '; $CONTENT_m .= '
    '.$a['title'].'

    '.prevlen11($a["preview"],300).'


    ';if (++$ibr >=10) break;}echo $CONTENT_m;?>
Опрос
Облако тегов


Архив


rss