LemcUSB:为ARM Cortex M0+设备打造的纯软件USB外设
项目介绍
LemcUSB 是一款专为 ARM Cortex M0+ 设备设计的纯软件 USB 外设解决方案。通过这款软件,Cortex M0+ 设备能够作为低速 USB 设备运行。LemcUSB 拥有一个轻量级的 USB 和 HID 堆栈,并且可以轻松优化以仅消耗 4KB 的闪存空间。
项目技术分析
LemcUSB 的开发经历了长时间的努力,特别是测试阶段。尽管项目团队之前已经开发过多种 USB 设备和堆栈,但此次开发仍然充满挑战。每次看似正常工作时,总会出现新的问题需要解决,如位填充的特殊情况、与时间相关的问题等。
对于一个运行在 24 MHz 的 Cortex M0+ 芯片而言,可以在单个循环内完成整个 USB 解码过程。通过循环展开和其他技术,可以进一步降低时钟频率。为了保持低内存占用,开发团队决定在第一版中仅支持 24 MHz。
目前,项目正在评估使用内部 RC 振荡器的同步方法。未来,可能可以使用例如 EFM32ZG 的 21 MHz HFRCO 作为时钟源。与其他解决方案相比,这种同步方法很可能不会重新调整 HFRCO,而是像 DPLL 一样工作。
关键代码在 RAM 中执行,以避免不确定的等待状态。从 RAM 执行时,总是以 0 等待状态进行。
项目及技术应用场景
LemcUSB 在 EFM32ZG110F32 上进行了测试(参见 EFM32ZG110 Quick Start Board v1.1)。理论上,它应该适用于任何其他 EFM32ZG 设备。
硬件连接上,目前需要将 PA0 通过 1K5 电阻连接到 PC0,PC0 连接到 USB 端口的 D-,PC1 连接到 D+。
除了外部 24 MHz 晶振外,不需要其他额外的硬件。
项目还包括了一个通过 LemcUSB 工作的引导程序,以及一个基于 Qt 的跨平台 GUI。这些将在测试后发布。
为什么选择 EFM32 Zero Gecko?
EFM32 Zero Gecko 提供了许多适用于爱好者的特性,价格合理。此外,Silicon Labs 的 EFM32 外设库(emlib)是完全开源的,遵循 Zlib 风格的开源许可。
项目特点
- 纯软件USB外设:LemcUSB 不需要任何特殊的硬件支持,完全通过软件实现 USB 功能,为开发带来了极大的灵活性。
- 轻量级堆栈:通过优化,LemcUSB 的内存占用极低,非常适合资源受限的 Cortex M0+ 设备。
- 低功耗设计:LemcUSB 专为低功耗应用设计,能够帮助设备在不牺牲性能的前提下降低能耗。
- 开源许可:项目遵循 GNU General Public License version 3.0,可以自由地修改和分发。
LemcUSB 为 ARM Cortex M0+ 设备的 USB 开发提供了一个强大而灵活的解决方案。通过其轻量级的堆栈和低功耗设计,LemcUSB 适用于各种嵌入式应用,尤其是那些对资源消耗有严格要求的场景。如果你正在寻找一个简单易用、性能高效的 USB 解决方案,LemcUSB 绝对值得你尝试。