如何在小型嵌入式设备中对出厂重置开关进行编程

时间:2016-03-04 10:40:02

标签: embedded interrupt reset interrupt-handling rtos

我正在构建一个小型嵌入式设备。我正在使用复位开关,当按下此按钮超过5秒时,整个设备应复位并清除所有数据并进入出厂复位状态。 我知道这件事发生时应该清楚什么。我想知道的是我如何举办此活动?我的意思是当按下开关时,如何设计系统以知道已经过了5秒,我现在必须重置。我需要任何定时器和中断的高级设计。有人可以帮助我吗?

4 个答案:

答案 0 :(得分:0)

取决于设备。但很少有粗略的想法:

设备手册可能会说出“按住开关”(切换)产生的每秒中断次数。如果您有此值,则可以轻松计算5秒。

如果没有,你也需要使用计时器。当您收到第一次“切换”中断并计数最多5秒钟时启动计时器。

请注意,您还应监控“切换”,即“释放开关”。我希望也会有中断。 (可能具有不同的状态值)。 所以当你看到这个中断时,你应该打破上面的循环(你不应该重置)。

希望这有帮助。

答案 1 :(得分:0)

中断驱动意味着低电平,靠近硬件。中断驱动的解决方案,例如裸机微控制器,看起来像这样:

  • 与读取任何其他开关时一样,对开关 n 进行采样并滤除信号反弹(以及潜在的EMI)。
  • 启动硬件计时器。通常,片上定时器的速度太快,无法计算整整5秒,即使您将其设置为尽可能慢地运行。因此,您需要将计时器设置为预缩放值,并将其选定为使整个计时器周期等于已知时间单位(例如10毫秒)。
  • 定时器溢出时,触发中断。在中断内部,检查开关是否仍然按下,然后增加一个计数器。当计数器达到给定值时,执行重置代码。例如,如果每10毫秒有一个定时器溢出,那么你的计数器应该计数到5000毫秒/ 10毫秒= 500.
  • 如果在时间结束前释放开关,则复位计数器并停止定时器中断。
  • 如何重置系统是高度系统特定的。您应该将系统置于安全系统中,然后通过使用存储在NVM中其他位置的某些默认出厂设置覆盖存储设置的NVM来覆盖当前设置。完成后,您应该强制处理器自行重置并使用新设置重新启动。
  • 这意味着您必须拥有一个具有电子可擦除NVM的系统。根据数据的大小,该NVM可以是微控制器内部的数据闪存,也可以是某些外部存储器电路。

答案 2 :(得分:0)

在中断时使用GPIO可以检测到5S或30S超时。

如果使用rtos, 。中断会将线程从睡眠中唤醒并自行禁用,

。所有线程都会计算按下开关的时间(您定期扫描开关)

如果按下开关所需时间在eeprom中设置全局变量/设置,将触发恢复出厂设置功能

Else 再次启用中断并使线程进入休眠状态

。另外,使用去抖动电路来避免问题。

还要定义出厂重置是什么意思?

一般有两种,这两种情况我都会帮助使用eeprom

  1. 还原所有配置(低成本,更轻松)
  2. 在这种情况下,您对eeprom进行分区,具有工作配置和出厂配置。您将出厂配置复制到工作分区并执行软件重置

    1. 恢复完整固件(成本高昂,需要更多测试) 这更棘手,但可以在允许从eeprom /或SD卡闪存的引导加载程序的帮助下完成。
    2. 在这种情况下,二进制固件blob也将与出厂配置一起存储在安全分区中,并将用于闪存控制器闪存和配置。

      全部取决于尺寸/内存和成本。可以用更多的方式设计,我只是列出最简单的例子。

答案 3 :(得分:0)

我创建了一些组合切换到的产品。我这样做是通过使用电容器在器件的复位引脚上启动复位脉冲(某些电阻和/或二极管的电流和电平限制)。在启动时,我监控连接到开关的输入引脚的状态。我只是等到这个引脚高度超过5秒。如果超时,我将配置重置为默认值。 enter image description here