【问题标题】:Enable wake-up from sleep mode through GPIO signal通过 GPIO 信号启用从睡眠模式唤醒
【发布时间】:2013-01-29 12:07:53
【问题描述】:

我需要通过 GPIO 信号将运行 Angstrom 操作系统的 BeagleBone 设备从睡眠模式唤醒。

我读到使用/sys/class/gpio/gpioXX/power/wakeup 是一种方法。问题是电源目录下没有任何“唤醒”文件。那么,我应该如何进行激活呢?有没有不重新编译内核的解决方案?

我可以从 GPIO 值中正常读取,因此 GPIO sysfs 正在工作。

【问题讨论】:

  • 在其他 OMAPxx 系列处理器(或衍生产品)上,只有第一组 GPIO(一个组为 32 位)具有唤醒功能 - 可能是出于电源管理的原因,否则,整个GPIO 单元需要在睡眠期间处于通电状态。
  • 我使用的端口是 GPIO0_7,所以它在第一个库中,似乎我必须配置一些东西来启用它。我走上正轨了吗?
  • 我认为现在是时候深入内核源代码树了。您可能需要重新编译它。看起来 BeagleBone 内核是使用 BeagleBoard 的 defConfig 构建的,因此请在源代码树中的 arch /arm/mach-omap2/ 中查看 mux.cmux.h。我还会查看用户手册是否可以从该引脚唤醒设备。
  • 可能是 BeagleBone 板没有任何 GPIO 线到处理器的 WAKEUP 信号连接?

标签: linux arm gpio


【解决方案1】:

OMAP4xxx 内核中的 GPIO 驱动程序存在问题,当 GPIO 组在 多路复用子系统初始化之前初始化。这有效地防止了 GPIO 模式下的引脚唤醒。

您可以通过阅读结构gpio_bankmux[] 字段(文件驱动程序/omap/gpio-omap.c)来检查这一点。它们不应包含 NULL 值。

void omap_gpio_mod_init(struct gpio_bank *bank) 函数末尾有一个 for 循环。 您需要删除它,并在 static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) 函数的末尾初始化 mux 指针。

这将确保正确启动它。

此外,据我所知,去抖动时钟存在一些问题。如果我的第一个建议不起作用,请尝试禁用该引脚的去抖动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2019-03-16
    • 1970-01-01
    • 2016-12-27
    • 2022-11-13
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多