入門級的開源CANopen協議棧——MicroCANopen
CANopen協議很龐大,如果手工編寫一個具備完全功能的主站,代碼量將很驚人;相比之下,從站往往功能相對簡單,在熟悉CiA301協議的基礎上,也很容易寫出一個從站代碼。在開源精神的引領下,如今網路上已經有多個CANopen的開源項目,如MicroCANopen、
CANopenNODE、CANfestival等,其中MicroCANopen最為簡單精悍。作為了解CANopen或CAN協議棧的入門教材,MicroCANopen最值得推薦。
MicroCANopen由德國的Embedded System Academy發布,在該機構發行的專業書籍《Embedded Networking with CAN and
MicroCANopen是一個「簡易型」的從站代碼,其代碼量很小(核心文件僅3個,可在很多8位機上運行) ,且編碼風格上沒有很多炫技手法,稍具備嵌入式C編程能力的都可以看得懂。對象字典OD是CANopen協議的核心,其實現方式決定著協議的運行效率,以及協議棧能實現的CANopen特徵。
MicroCANopen的主要功能特點如下:
1、僅能作為CANopen Slave;
2、支持TPDO/RPDO/SDO/HEARTBEAT,可接收處理NMT指令;
3、對象字典是採用數組形式組織起來的,索引及內容是固化的,不可在運行中動態調整(心跳周期可運行中調整);
4、CAN的收發不採用中斷,而是在主循環里由協議棧主程序MCO_ProcessStack ()循環調用。
作為一個簡易版的CANopen協議棧,MicroCANopen協議棧中的CAN收發不採用中斷,也未採用接收緩衝,所以其缺點顯而易見——存在報文漏處理的可能性。
若干年前,曾在做一個小項目的時候,順帶分析移植過這個代碼,並在STM32和PIC18平台上測試運行過。
下圖是我做的一個MicroCANopen程序文件和代碼架構示意。
TAG:CatchCAN |