【问题标题】:How to program factory reset switch in a small embedded device如何在小型嵌入式设备中对出厂重置开关进行编程
【发布时间】:2016-03-04 10:40:02
【问题描述】:

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

【问题讨论】:

  • “带有...中断的高级设计”嗯?
  • 除了所有基于中断的方法外,您甚至可以非常简单地通过偶尔轮询相关引脚来完成。假设您有一个有节奏的循环方法(在许多/[大多数?]嵌入式系统中很常见),您可以简单地检查引脚的状态,并且当引脚处于“按键”状态时增加一个计数器,否则归零。递增后,如果计数器超过 5 秒对应的值,您可以调用您的事件。 (例如,如果您将节奏循环设置为每 10 毫秒循环一次,那么在您调用重置事件之前,您的计数器将达到 500)。
  • 如果设备有,请将其直接连接到偏置复位引脚。如果您需要按重置,则无法保证该软件甚至可以正常运行。找到盖子后面的开关,用户需要 5 秒钟才能打开。如果设备没有 RESET 引脚,请中断其电源。

标签: embedded interrupt reset interrupt-handling rtos


【解决方案1】:

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

可能设备手册可能会说明“按住开关”(switch down)每秒产生的中断数。如果你有这个值,你可以很容易地计算出 5 秒。

如果没有,您也需要使用计时器。当您收到“switch down”的第一个中断时启动计时器并最多计数 5 秒。

请注意,您还应该监视“switch up”,即“release of switch”。我希望也会有一个中断。 (可能具有不同的状态值)。 所以当你看到这个中断时,你应该打破上面的循环(你不应该做复位)。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    中断驱动意味着低电平,接近硬件。一个中断驱动的解决方案,例如一个裸机微控制器,应该是这样的:

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

    【讨论】:

      【解决方案3】:

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

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

      。线程所做的只是计算按下开关的时间(您定期扫描开关)

      如果开关按下所需的时间在 eeprom 中设置一个全局变量/设置将触发出厂重置功能

      否则再次启用中断并使线程进入睡眠状态

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

      还要定义一下恢复出厂设置是什么意思?

      一般有两种,两种情况我都会帮忙用eeprom

      1. 恢复所有配置(低成本、更简单)

      在这种情况下,您对 eeprom 进行分区,拥有工作配置和出厂配置。您将出厂配置复制到工作分区并执行软件重置

      1. 恢复完整固件(成本高,需要更多测试) 这比较棘手,但可以借助允许从 eeprom/或 sd 卡进行闪存的引导加载程序来完成。

      在这种情况下,二进制固件 blob 也将与出厂配置一起存储在安全分区中,并将用于刷新控制器闪存和配置。

      一切都取决于大小/内存和成本。可以用更多方式设计,我只是列出最简单的例子。

      【讨论】:

        【解决方案4】:

        我创建了一些带有组合开关的产品。我通过使用电容器在设备的复位引脚上启动复位脉冲来做到这一点(电流和电平受某些电阻器和/或二极管的限制)。在启动时,我监视连接到开关的输入引脚的状态。我只是等到这个引脚在 5 秒内超时。在超时的情况下,我将我的配置重置为默认值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-05
          • 1970-01-01
          • 1970-01-01
          • 2018-06-03
          • 2011-08-07
          • 2013-02-23
          相关资源
          最近更新 更多