【问题标题】:Reading GPIO on imx6 wandboard quad在 imx6 wandboard quad 上读取 GPIO
【发布时间】:2015-09-22 13:07:24
【问题描述】:

我正在编写一个驱动程序来控制 GPIO 引脚。我已经确定了 JP4 连接器并在 gpio91 上添加了一个 LED (JP4.06 => /sys/class/gpio/gpio91)。在阅读了许多教程后,我编写了一个简单的内核模块。该模块接收来自用户空间的输入,并根据输入设置 gpio,如gpio_set_value(91,true)。在调用gpio_set_value 之前,我正在调用另一个函数,即gpio_direction_output。因此led是发光的。另一方面,当我从用户空间获取其他命令以获取 PIN 的状态时(为此,我依赖 gpio_get_value(91) 并为此设置输入方向),这里我没有得到正确的值。

我是否错过了获得所需价值的任何步骤?我应该如何尝试这样做?

【问题讨论】:

  • 首先要检查此类问题: 1. 是否为您的模块 (GPIO) 启用了时钟? 2. 您使用的引脚是否复用到 GPIO(而不是其他模块)?首先检查您的设备树文件是否有引脚多路复用器。
  • 另外,请务必调用gpio_request()(在调用任何其他 GPIO 特定函数之前)并检查dmesg 输出:可能其他人已经在使用您的 GPIO。 gpio_request() 会帮你调试。
  • 另外,请向我们提供您正在使用的内核版本,以及它是否为您的设备使用板文件或设备树。也可以链接到内核的 git 存储库。
  • @SamProtsenko 我不确定如何检查时钟是否启用,但我们的内核模块很高兴插入。即使我不确定我的引脚是否被复用但是当我设置引脚时LED 亮起。
  • @SamProtsenko 我正在使用这个内核版本:3.10.17-1.0.1-wandboard+ga6e7fc5 这个图像是 core-image-minimal 版本。

标签: c linux-kernel arm gpio


【解决方案1】:

来自https://github.com/wandboard-org/linux/blob/wandboard_imx_3.10.17_1.0.0_ga/arch/arm/boot/dts/imx6qdl-wandboard.dtsi#L390

EIM_D27 被正确复用为一个 gpio,它的 padconf 是 0x1B880 这意味着:

  • 转换速率慢
  • 驱动强度HIZ
  • 速度:100 MHz
  • 输出为漏极开路
  • 已启用拉取/保持器
  • 启用拉动
  • 100K 欧姆上拉
  • 施密特触发器输入

如果你一直在读 1,也许你可以尝试使用 0x18880 来移除上拉

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多