几种可能的原因:
1)你设置了输入管脚的IO方向吗?
例如。echo "in" > /sys/class/gpio/gpioN/direction
2)(不太可能)您用作输入的 GPIO 引脚是否复用为 GPIO 线并且方向正确?OMAP SoC 上的大多数 GPIO 引脚都是多功能的。您的内核可能已将其设置为备用功能。
您可以通过以下方式进行检查:
cat /sys/kernel/debug/omap_mux/board/core
它会转储所有 IO 引脚的配置。输出如下所示:
OMAP4_MUX(CSI22_DY1, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
/* gpio_81 */
OMAP4_MUX(CAM_SHUTTER, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
OMAP4_MUX(CAM_STROBE, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
/* gpio_83 */
在这种情况下,CAM_SHUTTER
设置一个输出,并路由到 GPIO 模块 ( OMAP_MUX_MODE3
)
[警告:这是来自我的 OMAP4 板 - 手头没有 OMAP3 数据表 - 会有相当多的相似之处]
您无法通过 sysfs 更改它 - 相反,您需要修改您的内核(或者如果内核使用它设置的配置,则可能是引导加载程序)。
在您系统的板文件中 - 我认为在您的情况下将在其中<linux_source_root>/arch/arm/mach-omap2/board-omap3beagle.c
- 您会找到 MUX 表的初始化程序。您将需要电路板的原理图、内核源代码树和 SoC 数据表来获取引脚的主要功能名称(在我上面的示例中CAM_SHUTTER
)和 GPIO 编号。
3)即使我将 0 传递给 pinA 的值,我也有点困惑- 我想知道你是不是这个意思?然而,这确实指出了另一件需要注意的事情——每个 IO 引脚上都有可编程的上拉或下拉。这些是使用 MUX 设置进行设置的。可以想象还有一个外部的——同样你需要确定原理图。