在Beaglebone Black上配置GPIO的不同方法有哪些优缺点?

时间:2015-12-16 00:01:19

标签: javascript python beagleboneblack device-tree

我正在使用Beaglebone Black创建一个新应用程序。我需要为不同的功能配置GPIO。我将有一些GPIO,一些PWM,可能还有其他一些功能。

我注意到有不同的方法可以做到这一点。这些是优先顺序:

  • 我可以使用Adafruit's Python library编写代码来说明将此引脚设置为PWM'等等;
  • 我可以same in Javascript;
  • 我可以制作和编译设备树覆盖源文件(.dts),并使用它;
  • 我可以做一个bash脚本并回复' out'和' in'等等到文件系统中的不同设备定义;
  • 我认为它有一个C API,但我不会将它用于此应用程序。

我最重要的是可复制性。我不需要高性能。我只需要能够以相同的方式设置一堆Beaglebone Blacks并使它们表现得可靠。

我是否有一些优势,我没有看到做设备树覆盖和所有这些?什么时候有人选择一种方法而不是另一种?

1 个答案:

答案 0 :(得分:1)

引脚多路复用器通过AM335x处理器控制模块子系统中的寄存器配置。运行GNU / Linux时,控制模块寄存器只能从内核空间访问,因此必须由内核驱动程序完成。

在BeagleBone上,有一个名为bone-pinmux-helper的驱动程序,它允许运行时在用户空间的不同pinmux配置之间进行更改。需要设置配置并预先使用设备树覆盖将其传递给驱动程序。例如,在PyBBIO中,我有一个脚本,为每个GPIO引脚生成overlays。他们设置了不同的可能模式(输入,输出,上拉,下拉等),然后将这些模式作为不同模式传递给bone-pinmux-helper驱动程序。然后,当调用pinMode() functino时,PyBBIO使用capemgr驱动程序为引脚加载生成的覆盖,然后使用为该引脚创建的sysfs条目将其设置为请求的模式。

Bonescript使用与PyBBIO相同的方法,而IIRC Adafruit_BBIO没有用于pinmuxing的叠加,并且需要用户单独进行。

因此,长话短说,设备树覆盖是进行pinmuxing的唯一方法,像PyBBIO和bonescript这样的用户空间库只是抽象而已。如果您想要完全控制,那么编写并编译自己的叠加层。如果您不想处理编写DT叠加或担心兼容性,因为事情可能会随着时间的推移而发生变化,请使用像PyBBIO或Bonescript这样的库来抽象出这个级别并相信它们会确保事情继续有效。