1

由于 Silicon Labs 停止使用 SL-Thread 堆栈,我们正在考虑将新设备迁移到 OT,以便在已经基于 EFR32 的系统中使用新设备。

该设备将是一个相对简单的电源供电 FTD(想想“范围扩展器”)。

我正在尝试估计工作量,特别是我有点担心 OTA 固件更新。查看 GitHub 存储库中的 EFR 目录,我看到:没有 Gecko 引导加载程序的踪迹。这是否意味着我们应该使用从 SL SDK 构建的常规 Gecko 引导加载程序?或者是否有我缺少的特定于 OT 的引导加载程序?没有 OTA 协议的痕迹(在 SL'Thread 中曾经有一个 TFTP 实现和一个点点实现) 是否有计划使用 OpenThread 特定的 OTA 方法?还是官方建议使用 GeckoBootloader 并实现自己的传输协议?

提前致谢, 马特奥

4

2 回答 2

1

OpenThread 技术负责人 Jonathan Hui 在Google Group中回复。

引用他的话:“OpenThread 项目的主要目标是实现 Thread 协议。鉴于 Thread 是一种网络层技术,它没有为 OTA 指定协议。同样,OpenThread 项目在其中也不包含引导加载程序和 OTA范围。”

于 2020-02-07T05:44:33.120 回答
1

我在 efr32 系列微控制器方面拥有丰富的经验,顺便说一下,我还尝试将我们的 Silicon Labs Thread 实现移植到 OpenThread。所以我想我可以在这里帮助你...

如果您只需要一个有源(假设非休眠)全线程设备,这可能不是什么大问题。您可以从命令行(在 Linux 或适用于 Linux 的 Windows 子系统中)构建演示项目,只需更改其中一个演示项目即可满足您的需求。

如果您需要一个用于高级调试功能或一般可用性的 IDE 构建,这将是一个更大的挑战。

不过,引导加载程序可能有点问题。OpenThread 仅设计用于实现 Thread 协议,并且是通用的,因此可以在无数应用程序中使用。你不会在那里看到任何 Gecko Bootloader 的东西,或者任何与此相关的引导加载程序的东西。

Gecko 引导加载程序本质上是一个在微控制器复位后运行的应用程序,它在外部闪存或内部闪存中查找 Gecko 引导加载程序映像 (.gbl)。如果它找到一个图像,它将覆盖现有的应用程序并启动到它。如果它没有找到图像,它将跳转到应用程序。所以你的引导加载程序挑战是 2 倍。

1) 应用程序必须将 .gbl 映像放入 Gecko 引导加载程序期望的内存位置。据我所知,没有标准的方法来解决这个问题,这取决于应用程序。例如,我的应用程序反复轮询 CoAP 端点以获取 .gbl 图像的块以放入外部闪存(这是我的引导加载程序期望图像的位置)。然后,当它获得整个图像时,它会重新启动。

  1. openthread 中 efr32 板的演示项目使用不包含 Gecko 引导加载程序空间的链接器脚本。您必须对 Simplicity Studio 构建中使用的链接过程进行逆向工程。它使用 2 个链接器文件以及一些 #defines 将应用程序放在正确的位置。根据您对构建过程的舒适程度,这可能困难也可能不困难。

注意事项:如果您需要将现有的基于 Silicon Labs Thread 堆栈的项目迁移到 OpenThread 项目,那么您就是一个项目的野兽。Silicon Labs 线程堆栈集成了一个简单的非基于 rtos 的调度程序和睡眠功能。OpenThread,甚至是 efr32 演示项目,都不包含这些。由于 Silicon Labs Thread 堆栈是闭源的,这使得这变得更加困难。我现在正在尝试这样做,这非常不愉快。我不希望它在我更坏的敌人身上。

于 2020-02-13T16:09:34.603 回答