gpio

GPIO для чайников (дополнение)

Некоторые пояснения.

В связи с кривостью платформы данного сайта, не позволяющей удобно редактировать свои статьи, я решил написать это объявление- дополнение отдельно.

В связи с тем, что библиотека bcm2835 периодически обновляется, то в неё вносятся изменения, которые могут повлиять на работоспособность ранее написанных примеров.

Так, на сегодняшний день доступна библиотека версии 1.16.

Если вы установили себе библиотеку более новой версии, чем 1.8 (установка которой описана в первой статье "GPIO для чайников"), то у вас может возникнуть проблема с компиляцией написанных программ.

Например при компиляции может вылезти сообщение:

/usr/local/lib/libbcm2835.a(bcm2835.o): In function `bcm2835_delayMicroseconds':

/home/pi/bcm2835-1.15/src/bcm2835.c:350: undefined reference to `clock_gettime'

/home/pi/bcm2835-1.15/src/bcm2835.c:360: undefined reference to `clock_gettime'

collect2: ld returned 1 exit status

Чтобы обойти эту проблемму, достаточно при компиляции добавить опцию -l rt

Т.е., если раньше мы компилировали нашу программу button командой:

gcc -o button button.c -l bcm2835

то теперь нужно писать так:

gcc -o button button.c -lbcm2835 -lrt

Просто автор библиотеки в более новых версиях модифицировал функцию bcm2835_delayMicroseconds, которая теперь учитывает скорость выполнения команд процессором и ей требуется обращение к real-time функциям.

Если вы владелец Raspberry PI Version2:

Для ревизии платы Raspberry PI v2 необходимо изменять определения портов GPIO.

Например, если мы для ревизии v1 писали определение для порта Р1_03 так:

#define PIN RPI_GPIO_P1_03

то для ревизии v2 эта строка должна выглядеть вот так:

#define PIN RPI_V2_GPIO_P1_03

Т.е. для определения любых портов ревизии v2 нужно добавлять в запись "_V2" между "RPI" и "_GPIO"

В прочем, это необходимо только тогда, когда вы используете в своих проектах порты с номерами: Р1-03, Р1-05 и Р1-13.

Для других портов это не имеет никакого значения, какое определение вы используете, т.к. остальные порты GPIO совпадают в обеих ревизиях.

Зато в ревизии v2 вывели дополнительно 4 новых порта на разъём Р5. Этих портов нет в ревизии v1 вобще. Обладатели же ревизии v2 могут использовать эти порты абсолютно так же, как и прочие. Номера этих портов: Р5-03, Р5-04, Р5-05 и Р5-06.

Соответственно псевдонимами этих портов будут:

RPI_V2_GPIO_P5_03

RPI_V2_GPIO_P5_04  

RPI_V2_GPIO_P5_05  

RPI_V2_GPIO_P5_06
Тэги:

 

Автор:

Комментариев: 9

  • ASA8
    04.01.2013 в 13:49 ответ

    Дописали бы сразу про платы второй версии

  • RomanNV5
    11.01.2013 в 14:36 ответ

    fixed

  • vladimirov99510
    15.01.2013 в 09:42 ответ

    Пример с кнопкой и диодом - супер! Одно лишь плохо - ЦИКЛ опроса кнопки! По-хорошему кнопку надо вешать на прерывание. По даташиту на BCM2835 там вроде насколько я понял с irq49 по irq52 зарезервировано под GPIO pin 0-4. А пример с захватом и обработкой прерывания на линукс - будет вообще потрясен. Там тем более не так уж и сложно это.

  • RomanNV5
    18.01.2013 в 19:11 ответ

    Как решить вопрос с циклом опроса кнопки, я рассказал в продолжении к 5-й части. А с прерыванием в RPI просто так не поработаешь как в МК, тут к нему доступ можно получить только через ядро системы.

  • Polder12
    24.01.2013 в 09:48 ответ

    Как узнать ревизию Rpi ?

  • RomanNV5
    24.01.2013 в 10:33 ответ

    введите в терминале cat /proc/cpuinfo и смотрите hardware revision code если код будет 2, или 3, то это ревизия 1 если код будет 4,5, или 6, то это ревизия 2

    • Vitorrio10
      29.05.2013 в 00:32 ответ

      Про ревизии хорошо было бы написать уже в первой части. Также у меня ревизия 7 написано - к какой в итоге относить?

  • deerh11
    12.02.2013 в 20:37 ответ

    Добрый вечер! Помогите разобраться, пожалуйста: после компиляции gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 пишет ошибку: undefined reference to 'bcm2835_delay' collect2: error: ld returbed 1 exit status Я новичок, проверка показала, что ревизия платы = 1

  • messad_el
    25.04.2014 в 13:43 ответ

    У меня прхожий вопрос, только я в принципе понял в каком направлении думать и тут вроде описан способ как пофиксить но для консоли, а я ленивый qtcreator'щик как мне быть. у меня вообще программа другая, но проблема та же.

Ваш комментарий

Авторизуйтесь для отправки комментария

© Сообщество пользователей RaspberryPi 2021