串口轉(zhuǎn)換CAN詳解:透明帶標(biāo)識(shí)轉(zhuǎn)換篇
1 . 適用場(chǎng)景
串口轉(zhuǎn)CAN模塊在什么時(shí)候需要用到呢?一是老產(chǎn)品面臨升級(jí),需要用到CAN總線通信,但硬件平臺(tái)中的MCU沒有集成CAN總線的控制器。二是選用的MCU已經(jīng)包含CAN總線接口,但數(shù)量上不能滿足項(xiàng)目需求。若出現(xiàn)類似以上兩種情況且MCU有閑置串口,則可以選用串口轉(zhuǎn)CAN模塊解決。
圖1 應(yīng)用行業(yè)
2 . 使用方法
該類模塊可以很方便地嵌入到具有UART接口的設(shè)備中,在不需改變?cè)杏布Y(jié)構(gòu)的前提下使設(shè)備獲得CAN-bus通訊接口,實(shí)現(xiàn)具有UART設(shè)備和CAN-bus網(wǎng)絡(luò)之間的數(shù)據(jù)通訊。工業(yè)級(jí)的轉(zhuǎn)換模塊內(nèi)部還包括實(shí)現(xiàn)帶隔離的CAN和UART轉(zhuǎn)換所必須的模擬和數(shù)字器件、光電耦合器、DC/DC變換器、CAN-bus接口等。
圖2 產(chǎn)品架構(gòu)
3 .格式說明
CSM100系列模塊提供3種協(xié)議轉(zhuǎn)換方式:透明轉(zhuǎn)換、透明帶標(biāo)識(shí)轉(zhuǎn)換、自定義協(xié)議轉(zhuǎn)換。上篇文章已介紹過透明轉(zhuǎn)換模式的轉(zhuǎn)換方法,本文將以CSM100系列的模塊簡述模塊的透明帶標(biāo)識(shí)轉(zhuǎn)換格式。
該轉(zhuǎn)換模式串行幀中的“幀ID”自動(dòng)轉(zhuǎn)換成CAN報(bào)文中的幀ID。只要在配置中告訴模塊該“幀ID”的地址編號(hào)在串行幀的起始位置和長度,模塊在轉(zhuǎn)換時(shí)提取出這個(gè)“幀ID”填充在CAN報(bào)文的幀ID域里,作為該串行幀轉(zhuǎn)發(fā)時(shí)的CAN報(bào)文的幀ID。在CAN報(bào)文轉(zhuǎn)換成串行幀的時(shí)候也把CAN報(bào)文幀ID轉(zhuǎn)換在串行幀的相應(yīng)位置。
圖3 轉(zhuǎn)換方式
對(duì)比“透明轉(zhuǎn)換”模式和“透明帶標(biāo)識(shí)”模式不難發(fā)現(xiàn)它們之間的區(qū)別:CAN ID信息來自串口流數(shù)據(jù)中還是來自模塊本身的配置信息中。由于“透明轉(zhuǎn)換”模式下的CAN ID來自模塊配置信息,配置信息由上位機(jī)軟件提供,因此對(duì)于使用此模式的節(jié)點(diǎn)來說發(fā)送的幀ID是固定的。而“透明帶標(biāo)識(shí)”模式下不同,它可以一個(gè)節(jié)點(diǎn)發(fā)送多個(gè)幀ID 的CAN幀。
4 .轉(zhuǎn)換形式
串行幀的最大緩沖區(qū)長度為255個(gè)字節(jié),且處于該模式時(shí)串行接收設(shè)置有超時(shí)時(shí)間,即在一定時(shí)間內(nèi)收不到串口數(shù)據(jù)則默認(rèn)打包為一幀發(fā)送。因此,在透明帶標(biāo)識(shí)轉(zhuǎn)換模式下,必須保證模塊取得完整的串行數(shù)據(jù)幀,否則會(huì)造成分包錯(cuò)誤。
圖4 分包方式
透明帶標(biāo)識(shí)轉(zhuǎn)換模式下,串行幀轉(zhuǎn)為CAN報(bào)文時(shí)的形式如圖5。需要注意的是,串行幀中所帶有的CAN報(bào)文“幀ID”在串行幀中的起始地址和長度可由配置設(shè)定。起始地址的范圍是0~7,長度范圍分別是1~2(標(biāo)準(zhǔn)幀)或1~4(擴(kuò)展幀)。如果在配置中指定幀類型為標(biāo)準(zhǔn)幀,幀ID信息起始地址為3長度為1,則幀ID的有效位只有8位。地址3中的CAN ID1作為標(biāo)準(zhǔn)幀ID的高8位,其余位全部補(bǔ)0。
圖5 串行幀到CAN幀
透明帶標(biāo)識(shí)轉(zhuǎn)換模式下, CAN報(bào)文轉(zhuǎn)為串行幀時(shí)的形式如圖6。若同樣配置CAN幀信息為標(biāo)準(zhǔn)幀,幀ID信息為起始3長度1,則轉(zhuǎn)換時(shí)將丟失ID0的數(shù)據(jù)。此時(shí)CAN幀中的數(shù)據(jù)能正常被接收,但必然缺失幀ID信息(ID0本身不全為0時(shí))。為了正常轉(zhuǎn)換標(biāo)準(zhǔn)幀的幀ID信息,下圖的轉(zhuǎn)換情景必須將幀ID信息中的幀長度設(shè)置為2。
圖6 CAN幀到串行幀
4 .轉(zhuǎn)換示例
假設(shè)CAN報(bào)文“幀ID”在串行幀中的起始地址是2,長度是3(擴(kuò)展幀情況下),串行幀發(fā)送的數(shù)據(jù)分別為0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,則轉(zhuǎn)換結(jié)果如圖7。
圖7 示例1
若配置起始地址是2,長度是3(擴(kuò)展幀情況下),CAN報(bào)文的幀ID為0x00123456,數(shù)據(jù)為0x55,0x55,0x55,0x55,0x55,0x55則轉(zhuǎn)換結(jié)果如圖8。
圖8 示例2
4 .總結(jié)
以上為串口轉(zhuǎn)CAN“透明帶標(biāo)識(shí)”模式下的的轉(zhuǎn)換方式,該模式特點(diǎn)是可以靈活設(shè)定一個(gè)節(jié)點(diǎn)發(fā)送的CAN幀ID信息。筆者將介紹透明轉(zhuǎn)換、透明帶標(biāo)識(shí)轉(zhuǎn)換、自定義協(xié)議轉(zhuǎn)換以及moudbus轉(zhuǎn)換的內(nèi)容,歡迎關(guān)注往期及后期文章。