Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

CherryECAT: 一个专为实时操作系统设计的嵌入式EtherCAT主站栈

项目背景与痛点

CherryECAT 是一个专为运行在实时操作系统 (RTOS) 上的微控制器 (MCU) 设计的实时性强且低抖动的 EtherCAT 主站栈。它解决了传统 EtherCAT 开发中实时性和稳定性不足的问题,尤其是在嵌入式开发领域。对于开发者而言,高实时性的需求一直是实时嵌入式系统中的核心痛点之一,CherryECAT 的出现让大家无需在复杂性和实时性之间做出妥协。

核心技术揭秘

CherryECAT 的设计无疑是用心良苦的。要维持低延迟和高实时性,需要深入理解以太网通信、处理器性能差异以及如何利用实时操作系统的优势。下面我们以 Mermaid 构建一张数据流图来解读 CherryECAT 的核心数据流程。

graph TD A[应用层请求] --> B[MCU接收到IO请求] B --> C{"实时性能检测?"} C -->|"低抖动"| D[启用低抖动画] C -->|"高抖动"| E[采用稳定性能] D --> F[优化IO响应时间] E --> G[处理数据包] F --> H[返回数据] G --> H

从图中可以看出,CherryECAT 对实时性能的重视体现在每一个IO请求的处理流程之中。执行速度低抖动时,系统启用相应的优化功能,以进一步提高处理效率和响应时间,避免执行中的抖动对系统造成的干扰。

功能亮点与差异

CherryECAT 相比于其他 EtherCAT 实现,最大的亮点在于其专门为嵌入式设备和 RTOS 量身定制的设计,这使得其在运行时能显著减少执行抖动并提升整体系统性能。这种专注于低抖动设计,能使其在处理高实时性要求的场景中,比那些只关注带宽利用率的解决方案更具优势。此外,CherryECAT 提供了丰富的 API 接口和详细的文档,使得开发者能轻松地将其实现到自己的项目中。

应用场景与落地建议

适用于需要低延迟、高实时性的嵌入式控制系统中,尤其是机器人控制、工业自动化、运动控制等领域。在生产环境中,需考虑到不同MCU的性能差异和操作系统对实时性的支持程度。另外,应密切关注网络环境,以确保数据传输的稳定性和低延迟。

综合评价

优点

  • 实时性强:专为 Real-Time System 设计,能在低抖动环境中高效运行。
  • 低资源占用:作为轻量级 EtherCAT 实现,CherryECAT 对资源占用较低,非常适合资源受限的嵌入式系统。
  • API 丰富:提供了丰富的功能接口,易于集成与调试。
  • 高度灵活:能轻易适应多种不同的硬件和软件需求。

缺点

  • 适用性有限:此项目专为 RTOS 设计,对于那些无 RTOS 支持的设备未必适用。
  • 文档撰写不够详细:尽管提供了文档,但面对更复杂的集成和调优需求时,仍会有信息不完全详尽的情况。

总的来说,CherryECAT 是一个为实时操作环境下提供高效 EtherCAT 主站实现的优秀选择,对于寻求提高系统实时性和减少数据传输抖动的开发者来说,它绝不是一个让人失望的选择。

关于

GitHub 原始描述(英文)

CherryECAT is a tiny and beautiful, highly real-time and low-jitter EtherCAT master stack, specially designed for MCUs running with RTOS

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
272
价值分
118
活跃状态
活跃

Release

README

English | 简体中文

CherryECAT

CherryECAT is a tiny and beautiful, high real-time and low-jitter EtherCAT master stack, specially designed for MCUs running with RTOS.

Feature

  • RTOS only, do not support Linux and windows (designed to contrast with the latter)
  • ~ 4K ram, ~40K flash(24K + 16K shell cmd, including log)
  • Asynchronous queue-based transfer (one transfer can carry multiple datagrams)
  • Zero-copy technology: directly use enet tx/rx buffer to fill and parse ethercat data
  • PHY driver internal, scan and configure PHY automatically
  • Support hot-plugging
    • Automatic scanning bus
    • Automatic updating slave information when the topology changes
  • Support automatic monitoring slave status
  • Support distributed clocks
  • Support CANopen over EtherCAT(COE)
  • Support File over EtherCAT(FOE)
  • Support Ethernet over EtherCAT(EOE)
  • Support Slave SII access
  • Support Slave register access
  • Support multi master
  • Support PDO transfer with single domain or multi domain(single domain:all slaves share one LRW datagram,multi domain:each slave has one LRW datagram)
  • Minimum PDO cyclic time < 40 us (depends on master and slave hardware)
  • DC jitter < 3us (depends on master and slave hardware)
  • Support multi cyclic time(every slave can use different proportional cyclic time)
  • Support backup redundancy(TODO)
  • Support ethercat cmd with shell, ref to IgH

The pic shows dc jitter < 3us (hpm6800evk with flash_xip): ethercat

Hardware limitations

  • Master

    • CPU (Coremark/Mhz > 5.0, cache > 16K, memcpy speed > 100MB/s)
    • ENET must support descriptor dma and iperf with lwip > 90 Mbps
    • Must support High-Precision Timer (jitter < 1us)
    • Must support High-Precision timestamp (ARM DWT/RISC-V MCYCLE)
    • Must support long long print
  • Slave

    • Must support DC and system time
    • Must support sdo complete access
    • Must support LRW
    • SII must have sync manager information

Shell cmd

ethercat ethercat ethercat ethercat ethercat ethercat ethercat ethercat ethercat ethercat ethercat

Tool

  • esi_parser

Use esi_parser.py to generate slave eeprom information and download eeprom to slave.

python ./esi_parser.py ECAT_CIA402_ESI.xml eeprom.bin eeprom.h

Parsing XML file: ECAT_CIA402_ESI.xml
Parsed XML: Vendor=0x0048504D, Product=0x00000003
Device Name: ECAT_CIA402
Mailbox RX: 0x1000(128)
Mailbox TX: 0x1080(128)
Generating EEPROM data...
✓ Successfully converted 'ECAT_CIA402_ESI.xml' to 'eeprom.bin'
✓ Generated 2048 bytes of EEPROM data
✓ Vendor ID: 0x0048504D
✓ Product Code: 0x00000003
✓ Revision: 0x00000001
✓ Device Name: ECAT_CIA402
✓ Generated C header file: eeprom.h
  • eni_parser

Use eni_parser.py to generate CherryECAT slave sync config.

python ./eni_parser.py ECAT_CIA402_ENI.xml sync_config.h

Parsing ENI file: ECAT_CIA402_ENI.xml
Generating C code...
✓ Successfully converted 'ECAT_CIA402_ENI.xml' to 'sync_config.h'
✓ Generated C code for 1 slave(s)
✓ Slave 1:
  - RxPDO 0x1602: 3 entries
  - TxPDO 0x1A02: 3 entries

Support Boards

  • HPM6750EVK2/HPM6800EVK/HPM5E00EVK(hybrid internal)
  • RT-Thread RZN2L-EtherKit/RA8P1 Titan/RuiQing Pai
  • STM32H7

Contact

QQ group: 563650597

License

FOE, EOE and backup redundancy features are available in Royalty-Free; other are free to use

评论

暂无评论