MCU沒有CAN或CAN接口數量不夠怎么辦?目前市面上有串口轉CAN的相關模塊或設備,但大家知道串口轉CAN是如何實現的嗎?轉換后的幀格式是如何的?本文將為大家詳細介紹串口經過轉換后的CAN幀格式與注意事項。
適用場景
串口轉CAN模塊在什么時候需要用到呢?一是老產品面臨升級,需要用到CAN總線通信,但硬件平臺中的MCU沒有集成CAN總線的控制器。二是選用的MCU已經包含CAN總線接口,但數量上不能滿足項目需求。若出現類似以上兩種情況且MCU有閑置串口,則可以選用串口轉CAN模塊解決。

圖1 應用行業
使用方法
該類模塊可以很方便地嵌入到具有UART接口的設備中,在不需改變原有硬件結構的前提下使設備獲得CAN-bus通訊接口,實現具有UART設備和CAN-bus網絡之間的數據通訊。工業級的轉換模塊內部還包括實現帶隔離的CAN和UART轉換所必須的模擬和數字器件、光電耦合器、DC/DC變換器、CAN-bus接口等。

圖2 產品架構
轉換說明
CSM100系列模塊提供3種協議轉換方式:透明轉換、透明帶標示轉換、自定義協議轉換。下面以CSM100系列的模塊簡述模塊的透明轉換格式。
該模式下,CSM100接收到一側總線的數據就立即轉換發送至另一總線側。該模式下的模塊數據轉換效率最高,能承擔較大流量的數據傳輸。串行幀轉CAN幀時,模塊將來自串口的數據直接打包,并插入預先配置的CAN幀信息、幀ID一同作為一幀數據發送到總線上。同理,來自CAN總線上的數據將按順序拆分為字節流發送到串口上,字節流的前幾個字節為該CAN幀的信息。

圖3 轉換方式
說到這,大家肯定有個疑惑,CAN幀的信息及CAN幀ID是如何表示的呢?
幀信息主要用來區分標準幀、擴展幀,長度為1個字節。在“自定義協議轉換”中,標準幀固定為 0x00, 擴展幀固定為 0x80; 在“透明轉換”“透明帶標識轉換” 中, 標準幀為 0x0_,擴展幀為 0x8_,其中“_” 代表每個幀中的數據域長度, 范圍為 0~8。
標準幀的幀ID拆分為2個字節表示,擴展幀的幀ID拆分為4個字節表示。如果實際配置時給幀ID預留的只有一個字節且幀類型為擴展幀,方向是CAN幀轉串行幀,那么將只能得到幀ID的高8位。如果實際配置時給幀ID預留的只有一個字節且幀類型為擴展幀,方向是串行幀轉CAN幀,那么將幀ID的高8位正常填充,其他三字節全補零。

圖4 幀ID轉換說明