Mar*_*lez 5 beagleboard gpio device-tree
beagleboard或beaglebone是不同的工作方式.使用以前的内核,它们位于/ sys/kernel/debug/omap_mux中.你知道最后一个内核那些文件在哪里?
Don Branson的回答是关于如何读取GPIO引脚的一个很好的介绍,但不幸的是它没有涵盖如何更改引脚模式,例如从GPIO到SPI.内核3.8.13(?)及更高版本变得更加复杂.出于多种原因,内核开发人员切换到"设备树模型".
截至目前,关于如何使用设备树模型的细节似乎不断变化,因此我将仅描述一般过程.首先,在名为"设备树源"的文件中描述要与之交互的引脚.引脚及其模式使用十六进制数指定,您必须在处理器的文档中查找.
然后使用dtc"设备树二进制文件" 将此文件编译,并将此二进制文件放入/lib/firmware.最后,通过回显二进制文件的名称(可以省略.dtb扩展名)来启用引脚模式/sys/devices/bone_capemgr.*/slots.
这篇伟大的博文中列出了一个非常翔实的例子:
http://hipstercircuits.com/enable-spi-with-device-tree-on-beaglebone-black-copy-paste/
我将尝试扩展我的答案,因为我自己更多地了解这个主题.或者也许有人可以建议编辑或希望甚至更广泛的答案他们自己?目前可用的信息似乎有点稀疏......
祝你好运!
我发现在hipstercircuits提供的许多例子有点压倒性; 特别是如果您只是想将引脚调整到模式7.如果有人读到这个问题有同样的问题,以下链接可能有所帮助:http://bbbadventures.blogspot.ca/2013/06/pinmuxing.html它提供最基本的模板.
如果上面的链接断开,这里是提供的代码段(为清楚起见,有一些调整):
/*
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
/plugin/;
/ { compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "pinctrl-test-0";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
pinctrl_test: pinctrl_test_0_pins {
pinctrl-single,pins = <
0x030 0x07 /* P8_12 OUTPUT | MODE7 */
0x034 0x07 /* P8_11 OUTPUT | MODE7 */
/* Add more pins here */
>;
};
};
};
fragment@1 {
target = <&ocp>;
__overlay__ {
test_helper: helper {
compatible = "bone-pinmux-helper";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_test>;
status = "okay";
};
};
};
};
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中添加更多引脚时,可以使用下表来确定哪些十六进制值与引脚匹配:
通过在pinctrl-single引脚中附加一个附加条目来设置每个引脚.格式如下:
[偏移] [模式]
示例:0x030 0x07
在上面链接的两个表中,请参考第三列,标题为"ADDR/OFFSET",用于偏移值.
我希望这有帮助 :)
编辑:我还应该提到马丁和唐提供的答案都很好,应该有助于涵盖其余的重要细节.
我在这里找到了我需要的东西:http://www.armhf.com/index.php/using-beaglebone-black-gpios/.
我正在运行内核3.8.13.
基于此,我写了这个脚本:
#!/bin/bash
# http://www.armhf.com/index.php/using-beaglebone-black-gpios/
# pin 9:11, gpio0[30] - 0 + 30 = 30
echo 30 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio30/direction
cat /sys/class/gpio/gpio30/value
# 1=switch open; 0=switch closed
while [ 1 ] ; do cat /sys/class/gpio/gpio30/value ; sleep .5 ; done
Run Code Online (Sandbox Code Playgroud)
当引脚保持低电平时,脚本显示0,高电平时显示1.我基于http://www.digikey.com/us/en/techzone/microcontroller/resources/articles/protecting-inputs-in-digital-electronics.html对电路进行了测试.
图片右侧的橙色电线充当开关.
我的计划是从死机打开这个和一个门开关来做一个冷冻开关.然后我会修改脚本,当冰箱打开超过10分钟时给我发电子邮件.

编辑:
做了一些研究并找到了有关如何设置pinmux的更多信息,特别是设备树覆盖:
好的,看了这个,并学到了很多东西:http://www.youtube.com/watch?v = wui_wU1AeQc
能够最终通过下面的设备树覆盖控制BBB上的pinmux设置.片段@ 1部分对我来说仍然是神奇的,所以在某些时候希望它会更有意义.不过,至少我可以检测所有引脚上的闭合开关.
一个关键的部分是Derek项目中的图表:https://github.com/derekmolloy/boneDeviceTree/tree/master/docs
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
part-number = "mousetraps";
version = "00A1";
/* https://github.com/derekmolloy/boneDeviceTree/blob/master/docs/BeagleboneBlackP9HeaderTable.pdf */
fragment@0{
target = <&am33xx_pinmux>;
__overlay__ {
mousetrap_pins: pinmux_mousetrap_pins {
pinctrl-single,pins = <
0x070 0x2f /* P9_11 30 INPUT MODE7 none */
0x074 0x2f /* P9_13 31 INPUT MODE7 none */
0x040 0x2f /* P9_15 48 INPUT MODE7 none */
0x15c 0x2f /* P9_17 05 INPUT MODE7 none */
>;
};
};
};
fragment@1{
target = <&ocp>;
__overlay__ {
test_helper: helper {
compatible = "bone-pinmux-helper";
pinctrl-names = "default";
pinctrl-0 = <&mousetrap_pins>;
status = "okay";
};
};
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34231 次 |
| 最近记录: |