Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

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

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

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

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

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

imx6_gpios

Зная адреса их можно соотнести с даташитом. 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 ножки.

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

2 комментария: Нумерация GPIO в Linux

  • DenisrLop:

    Доброго времени суток.

    Неисправный блок установлен в щите управления, при включении автомата дисплей запускается кратковременно примерно на пару секунд, затем загорается светодиод HL03 и появляется на дисплее ошибка Ground Fault Error и спустя 2-3 мин. дисплей гаснет и не включается пока не выключишь сеть и опять не включишь. На плате нашел сгоревшее место, судя по даташиту микросхема памяти. Возможно ли просто перепаять микросхему или ее нужно еще запрограммировать?
    Вот фото платы — http://imgur.com/0o6pM5M .
    Даташит на микросхему — http://prom-electric.ru/media/MT48LC4M16A2.pdf .
    Заранее спасибо за любую информацию.

  • admin:

    Это оперативка, можете попробовать ее поменять, перепрограммировать ее не нужно. Там на плате видно, что погорела не только она, так что никаких гарантий что не где нибудь по схеме еще что то не сгорело.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Счетчик
Яндекс.Метрика