MCU沒有CAN或CAN接口數(shù)量不夠怎么辦?目前市面上有串口轉CAN的相關模塊或設備,但大家知道串口轉CAN是如何實現(xiàn)的嗎?轉換后的幀格式是如何的?本文將為大家詳細介紹串口經(jīng)過轉換后的CAN幀格式與注意事項。
適用場景
串口轉CAN模塊在什么時候需要用到呢?一是老產(chǎn)品面臨升級,需要用到CAN總線通信,但硬件平臺中的MCU沒有集成CAN總線的控制器。二是選用的MCU已經(jīng)包含CAN總線接口,但數(shù)量上不能滿足項目需求。若出現(xiàn)類似以上兩種情況且MCU有閑置串口,則可以選用串口轉CAN模塊解決。
圖1 應用行業(yè)
使用方法
該類模塊可以很方便地嵌入到具有UART接口的設備中,在不需改變原有硬件結構的前提下使設備獲得CAN-bus通訊接口,實現(xiàn)具有UART設備和CAN-bus網(wǎng)絡之間的數(shù)據(jù)通訊。工業(yè)級的轉換模塊內部還包括實現(xiàn)帶隔離的CAN和UART轉換所必須的模擬和數(shù)字器件、光電耦合器、DC/DC變換器、CAN-bus接口等。
圖2 產(chǎn)品架構
轉換說明
CSM100系列模塊提供3種協(xié)議轉換方式:透明轉換、透明帶標示轉換、自定義協(xié)議轉換。下面以CSM100系列的模塊簡述模塊的透明轉換格式。
該模式下,CSM100接收到一側總線的數(shù)據(jù)就立即轉換發(fā)送至另一總線側。該模式下的模塊數(shù)據(jù)轉換效率最高,能承擔較大流量的數(shù)據(jù)傳輸。串行幀轉CAN幀時,模塊將來自串口的數(shù)據(jù)直接打包,并插入預先配置的CAN幀信息、幀ID一同作為一幀數(shù)據(jù)發(fā)送到總線上。同理,來自CAN總線上的數(shù)據(jù)將按順序拆分為字節(jié)流發(fā)送到串口上,字節(jié)流的前幾個字節(jié)為該CAN幀的信息。
圖3 轉換方式
說到這,大家肯定有個疑惑,CAN幀的信息及CAN幀ID是如何表示的呢?
幀信息主要用來區(qū)分標準幀、擴展幀,長度為1個字節(jié)。在“自定義協(xié)議轉換”中,標準幀固定為 0x00, 擴展幀固定為 0x80; 在“透明轉換”“透明帶標識轉換” 中, 標準幀為 0x0_,擴展幀為 0x8_,其中“_” 代表每個幀中的數(shù)據(jù)域長度, 范圍為 0~8。
標準幀的幀ID拆分為2個字節(jié)表示,擴展幀的幀ID拆分為4個字節(jié)表示。如果實際配置時給幀ID預留的只有一個字節(jié)且?guī)愋蜑閿U展幀,方向是CAN幀轉串行幀,那么將只能得到幀ID的高8位。如果實際配置時給幀ID預留的只有一個字節(jié)且?guī)愋蜑閿U展幀,方向是串行幀轉CAN幀,那么將幀ID的高8位正常填充,其他三字節(jié)全補零。
圖4 幀ID轉換說明
假設配置的轉換成的CAN報文幀信息為“標準幀”,配置的幀ID1,ID0分別為“0x01,0x23”,串行幀的數(shù)據(jù)為01,02,03,04,05,06,07,08共8個字節(jié),那么轉換格式如圖5。CAN報文的幀ID為0x0123(用戶配置),幀信息:標準幀(用戶配置),串行幀中的數(shù)據(jù)部分將不作任何修改地轉換到CAN報文中。
圖5 串行幀到CAN幀
假設CAN報文中幀ID1為0x01,幀ID0為 0x23,數(shù)據(jù)為0x12,0x34,0x56,0x78,0xab,0xcd,0xef,0xff,則CAN報文和轉換后的串行幀如圖6。CAN報文的幀信息(0x08)轉換到串行幀中的第1個字節(jié)(0x08),CAN報文中的ID:0x0123依次轉換到串行幀中的第2個字節(jié)(0x01)及第3個字節(jié)(0x23)。CAN報文的數(shù)據(jù)域將不作任何修改地轉換到串行幀中的數(shù)據(jù)部分。
圖6 CAN幀到串行幀
總結
以上為串口轉CAN透明格式下的轉換方式,后續(xù)筆者將新增透明帶標示轉換、自定義協(xié)議轉換以及moudbus轉換的內容,歡迎持續(xù)關注。
-
CAN
+關注
關注
57文章
2744瀏覽量
463612 -
串口
+關注
關注
14文章
1551瀏覽量
76421
原文標題:串口數(shù)據(jù)轉換為CAN數(shù)據(jù)之后是怎樣的?
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論