Embedded 轮询硬件按钮的状态

Embedded 轮询硬件按钮的状态,embedded,embedded-linux,Embedded,Embedded Linux,我需要为在200mhz MIPS cpu上运行嵌入式linux的设备实现以下功能: 1如果按下并按住重置按钮不到一秒钟-继续重新启动 2如果按下并保持重置按钮至少3秒。-使用NVRAM中的默认值恢复系统配置,然后重新启动 我想有两种方法: 1通过GPIO ioctls以适当的时间持续轮询按钮状态的守护进程 可能开销太大,上下文切换太多? 2个简单的char驱动程序轮询按钮,测量计时并报告状态,例如,通过/proc将状态报告给用户空间,守护进程或shell脚本可以在其中检查并执行所需操作 对于这两

我需要为在200mhz MIPS cpu上运行嵌入式linux的设备实现以下功能: 1如果按下并按住重置按钮不到一秒钟-继续重新启动 2如果按下并保持重置按钮至少3秒。-使用NVRAM中的默认值恢复系统配置,然后重新启动

我想有两种方法: 1通过GPIO ioctls以适当的时间持续轮询按钮状态的守护进程 可能开销太大,上下文切换太多? 2个简单的char驱动程序轮询按钮,测量计时并报告状态,例如,通过/proc将状态报告给用户空间,守护进程或shell脚本可以在其中检查并执行所需操作

对于这两种情况,我都不知道如何测量时间:
您有什么建议/建议?

您必须在硬件中实现这些功能。从NVRAM恢复默认值的目的是恢复所谓的bricked设备

例如,如果NVRAM设置是经过修改的宇宙线,该怎么办?使设备无法启动?在这种情况下,您建议的按钮轮询守护进程将永远不会执行

对于保持1秒的重新启动,使用RC电阻器+电容器电路来解除按钮按下的抖动。选择适用于1秒延迟的RC时间常数。使用比较器观察RC电压,向MIPS cpu上的复位引脚发送信号

对于三秒钟的按键功能恢复NVRAM默认值,您可能需要做一些更复杂的事情

一种可能是将一个微型PIC微控制器放入复位电路中,但只使用带保险丝的微控制器,不使用NVRAM,而使用不可擦除ROM

一种更简单的可能性是在与NVRAM相同的电路和总线上有一个包含默认值的ROM。J/K触发器锁存器可以成为重置电路的一部分。您还需要一个三秒调谐的RC电路和比较器。在低于3秒的按下时,触发器应锁定0输出,在3秒以上的按下时,第2个RC电路应在3秒后触发比较器,并向J/K锁存器提供1,从而切换其输出

触发器输出Q将存储单个位,告知电路该复位周期是否在三秒钟的按下之后。如果是这样,输出Q将芯片选择驱动到NVRAM,Q*将芯片选择驱动到ROM。我假设芯片选择在NVRAM和ROM芯片上都是负逻辑

然后,当CPU启动时,它将根据芯片选择行从NVRAM或ROM获取设置

您的引导代码可以检测到它是用ROM芯片select引导的,并且可以稍后用GPIO线重置J/K触发器。然后CPU将能够将良好的值写入NVRAM。希望能解开这个装置


您希望使用不可擦除或不可重复使用的ROM。这种ROM最能抵抗静电、电源故障和辐射。辐射的存在比我们通常意识到的要多得多,例如,在飞机上携带一个设备,宇宙射线通量就会成倍增加。

我不熟悉MIPS处理器和您可能使用的pin的GPIO/中断功能,但可能的方法如下

将输入引脚配置为中断输入。 当中断触发时,禁用中断并启动一个短的100ms ish定时器 当定时器触发时,检查按钮是否仍然按下以进行去抖动。如果没有,则重新启用GPIO中断并重新启动,否则将计时器设置为在3秒超时后重新触发。 此时计时器触发时,如果未按下按钮,则重新启动,否则重置系统配置并重新启动。 如果引脚不能提供中断,则步骤1将是一个轮询任务,以查看输入


从按下重置按钮到运行完全重置过程之间的时间始终为3秒(从按下取消按钮算起)。在重置情况下,这可能并不重要,特别是如果作为步骤3的一部分,您向用户表明重置序列已开始-例如,清空显示。

如果您希望在软件中执行此操作,则需要将其放入内核中断代码中,而不是shell脚本或守护程序中。更好的方法是将其放在硬件中

根据我的经验,重置设备的原因可能是坏的用户代码锁定或阻塞了处理器。如果问题是由于射频能量或类似性质的东西导致内存损坏,您可能需要硬件或外部加固处理器来刷新设备并修复问题

在坏用户代码的情况下,处理器中断,内核代码应该继续运行,而用户代码可能会完全停止运行。如果您可以从中断中轮询pin,那么您实际获得预期重置的机会将大得多。还有这个嗯 使您能够执行事件驱动编程,而不是不断轮询pin

另一种方法不是您列出的规格,但实现相同目标的常用方法是让启动例程检查GPIO行,并在您想要重新初始化设备时按住按钮。在我见过的大多数嵌入式Linux设备上,复位按钮连接到微控制器上的专用复位引脚,而不是GPIO引脚。你可能必须走这条路线,除非你想开始切割痕迹