2015-11-10 4 views
3

С самого начала я хотел бы заявить, что я знаю о Python и других реализациях высокого уровня для манипулирования GPIO на малиновом PI. Я также использовал API WiringPI C и испытываю проблемы с ним на Raspbian Jessie, что у меня не было на Raspbian Wheezy, хотя я не изменил ни одной строки кода. Кроме того, разработчик WiringPI C API говорит, что у него нет немедленных планов поддержать Raspbian Jessie, поэтому я вроде как ручей без весла.Raspberry PI, GPIO Pull UP/DOWN резисторы с SYSFS

По этой причине я читал следующий учебник (среди других) о доступе к Raspberry PI GPIOs с помощью sysfs, так как это, кажется, один из способов решения GPIO без использования WiringPI и без написания собственной библиотеки GPIO:

http://www.hertaville.com/introduction-to-accessing-the-raspberry-pis-gpio-in-c.html

Согласно этой обучающей программе, чтобы установить GPIO17 в качестве входных данных, вы пишете строку 'в' для дескриптора файла:

/SYS/класс/GPIO/GPIO/17/направление

... и затем я могу читать входные значения GPIO из:

/SYS/класс/GPIO/gpio17/Значение

Это все хорошо и хорошо, но у меня нет возможности устанавливать подтягивающие резисторы на мои монтажные платы. Можно ли установить встроенные подтягивающие и выталкивающие резисторы Raspberry PI, используя sysfs?

Кроме того, если установка нагрузочный и раскрывающиеся резисторы через sysfs не возможно я, полагая, что даже в самом последнем Raspbian Jessie единственный другой способ сделать это написать непосредственно в регистры GPIO? то есть даже в Raspbian Jessie нет официального C API для программирования GPIO?

+0

Вы загружаете linux с файлом dts? если это так, вы можете отредактировать, чтобы включить/выключить подтягивающие резисторы – fghj

+0

См. http://stackoverflow.com/questions/34058936/intel-chipset-gpio-programming/34080355#34080355 Подтягивание/сбой контролируется подсистемой pinctrl, а не подсистему GPIO. – sawdust

ответ

1

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

Вам необходимо будет изменить и скомпилировать dts (source), поместить его в/boot/overlays и включить его в файле config.txt. Инструкции содержатся в заголовке источника. (Спасибо PhillE за помощь!)

/* 
* Overlay for enabling gpio's to pull at boot time 
* this overlay uses pincctrl to initialize the pull-up register for the the listed gpios 
* the compatible="gpio-leds" forces a module probe so the pinctrl does something 
* 
* To use this dts: 
* copy this to a file named gpio_pull-overlay.dts 
* modify the brcm,pins, brcm,function, and brcm,pull values 
* apt-get install device-tree-compiler 
* dtc [email protected] -I dts -O dtb -o gpio_pull-overlay.dtb gpio_pull-overlay.dts 
* sudo cp gpio_pull-overlay.dtb /boot/overlays 
* add this line to the end config.txt: dtoverlay=gpio_pull 
* reboot 
*/ 

/dts-v1/; 
/plugin/; 
/{ 
    compatible = "brcm,bcm2835", "brcm,bcm2708"; 
    [email protected] { 
    target = <&gpio>; 
    __overlay__ { 
     gpio_pins: gpio_pins { 
      brcm,pins = <30 31 32 33>; /* list of gpio(n) pins to pull */ 
      brcm,function = <0 1 0 1>; /* boot up direction:in=0 out=1 */ 
      brcm,pull = <2 0 1 0>; /* pull direction: none=0, 1 = down, 2 = up */ 
     }; 
    }; 
    }; 
    [email protected] { 
    target-path = "/soc"; 
    __overlay__ { 
     gpiopull:gpiopull { 
      compatible = "gpio-leds"; 
      pinctrl-names = "default"; 
      pinctrl-0 = <&gpio_pins>; 
      status = "okay"; 
     }; 
    }; 
    }; 
    __overrides__ { 
    gpio_pull = <&gpiopull>,"status"; 
    }; 
};