我在 efr32 系列微控制器方面拥有丰富的经验,顺便说一下,我还尝试将我们的 Silicon Labs Thread 实现移植到 OpenThread。所以我想我可以在这里帮助你...
如果您只需要一个有源(假设非休眠)全线程设备,这可能不是什么大问题。您可以从命令行(在 Linux 或适用于 Linux 的 Windows 子系统中)构建演示项目,只需更改其中一个演示项目即可满足您的需求。
如果您需要一个用于高级调试功能或一般可用性的 IDE 构建,这将是一个更大的挑战。
不过,引导加载程序可能有点问题。OpenThread 仅设计用于实现 Thread 协议,并且是通用的,因此可以在无数应用程序中使用。你不会在那里看到任何 Gecko Bootloader 的东西,或者任何与此相关的引导加载程序的东西。
Gecko 引导加载程序本质上是一个在微控制器复位后运行的应用程序,它在外部闪存或内部闪存中查找 Gecko 引导加载程序映像 (.gbl)。如果它找到一个图像,它将覆盖现有的应用程序并启动到它。如果它没有找到图像,它将跳转到应用程序。所以你的引导加载程序挑战是 2 倍。
1) 应用程序必须将 .gbl 映像放入 Gecko 引导加载程序期望的内存位置。据我所知,没有标准的方法来解决这个问题,这取决于应用程序。例如,我的应用程序反复轮询 CoAP 端点以获取 .gbl 图像的块以放入外部闪存(这是我的引导加载程序期望图像的位置)。然后,当它获得整个图像时,它会重新启动。
- openthread 中 efr32 板的演示项目使用不包含 Gecko 引导加载程序空间的链接器脚本。您必须对 Simplicity Studio 构建中使用的链接过程进行逆向工程。它使用 2 个链接器文件以及一些 #defines 将应用程序放在正确的位置。根据您对构建过程的舒适程度,这可能困难也可能不困难。
注意事项:如果您需要将现有的基于 Silicon Labs Thread 堆栈的项目迁移到 OpenThread 项目,那么您就是一个项目的野兽。Silicon Labs 线程堆栈集成了一个简单的非基于 rtos 的调度程序和睡眠功能。OpenThread,甚至是 efr32 演示项目,都不包含这些。由于 Silicon Labs Thread 堆栈是闭源的,这使得这变得更加困难。我现在正在尝试这样做,这非常不愉快。我不希望它在我更坏的敌人身上。