我正在使用Arduino Nano(32Kb闪存,其中引导加载程序使用2Kb,2Kb SRAM,1Kb EEPROM)。

微控制器通过RS485模块从电气设备获取输入,并使用GPRS A6模块将读取的数据发布到远程服务器。该产品应该与远程服务器进行交互,并定期发送数据。

我已经完成了集成部分,设备工作正常,收集了数据并发送到了服务器上(距离约10-15公里) )。我面临的唯一挑战是,如果有100台这样的设备,并且我需要使用远程服务器(或任何其他合适的机制)来更新固件,我应该如何进行处理。

我已经有很多帖子建议使用另一个Arduino作为ISP,这可能是我最后的方法(因为这会增加产品的最终成本)。

空中固件更新仍然不明确,就像低端微控制器在Stack Exchange社区上一样。任何讨论都可能对许多人有很大帮助。

评论

为用户描述距离10米,1公里,10公里的“远程位置”?

@BenceKaulics我们正在使用GPRS模块将请求发送到距离大约10公里的微控制器。

您需要更清楚地描述用例,包括软件堆栈。看看其他的空中更新问题。

这是一个新的发展,还是您想对现有产品进行改造?

@ SeanHoulihane这是一个新的发展。我可以选择任何微控制器(价格是唯一的限制),它可以将数据发送到周围的远程位置(10公里)的服务器。我已经使用GPRS模块发送数据,这是我目前面临的唯一挑战,即如何远程更新固件。

#1 楼

简短答案:有可能。

长答案:这很复杂。这就是为什么存在这么多非常糟糕的实现的原因。
至少在任何远程/无线更新过程中,您都有两个步骤。


传输固件
安装固件。

当然,这是绝对的最低要求。如果您要进行迭代,那么这也是非常有效的第一步。如果您有多个设备,则必须能够将正确的固件关联到正确的设备。如果您想减少设备变砖的机会,则需要一种方法来验证更新前后的设备状态,还需要保护传输并使传输尽可能可靠,并且自然地-如果发生更新错误,则有一个后备策略。

这五个步骤可以使您获得可靠的产品。这些方面有最佳实践,但它们取决于您的项目环境。也许是便宜的东西,并且5%的更新失败率是可以的,也许这是一个起搏器,甚至一个错误也是不可接受的,因为这会导致致命的情况。您必须找到适合您产品的基础解决方案。

此外,还需要考虑许多其他问题。请问有顾客吗?您需要通知他们吗?他们在更新时间/安装方面有发言权吗?您的设备在不同的国家吗?有法律限制吗?规范性标准是否适用?您要更新多少台设备? 1?一打?几百个?百万?

如果您更新五台设备,该过程可能会非常麻烦。如果要更新数百万,这可能会变得非常昂贵。是的,这会影响上面列出的第一步(传输固件)。也许您确实创建了一个起搏器,并且考虑到替代方案,每次更新数百条消息的处理成本是可以的。

这些只是我两分钟内写下的问题,因此此列表当然并不详尽。我的意思是,没有有关我们无法真正为您提供适当帮助的方案的信息。

评论


非常感谢@Helmar,我将尽可能详细地更新问题。对于不支持在其上运行操​​作系统的微控制器,远程固件更新仍然含糊不清,一个好的清晰解决方案不仅对我有帮助,对于许多从事低端开发板工作的人也有帮助。我也要求您在更新后也进行检查。

– Ashish K
17年5月17日在9:10

只要平台允许将闪存分为至少3个区域(或者您希望在重新闪存时从RAM运行,并且具有大量备用磁盘或可远程部署的JTAG),就可以。

– Sean Houlihane
17年5月17日在10:59

@SeanHoulihane ATmega系列无法从RAM运行。

–克里斯·斯特拉顿(Chris Stratton)
17年5月24日在6:29

#2 楼

该问题已得到解答,但也许对其他人来说很有价值。

您可以将基于ESP32的板或模块连接到Arduino,并使用https://vcon.io进行远程OTA。 。 vcon固件可以充当AVR(而不仅仅是AVR)编程器,并远程刷新Arduino。

此外,作为副作用,您还将获得Arduino的远程控制功能。 https://dash.vcon.io云服务为您提供设备仪表板以及用于远程控制和OTA的API。

免责声明:我确实代表https://vcon.io产品。