宋耀東,于 淼,杜 雪,李 軍
(中國電子科技集團公司第二十七研究所,河南鄭州 450047)
CAN 總線指的是控制器局域網(Controller Area Network,CAN)總線,是最先由德國博世公司提出的用于汽車控制的一種實時應用的串行通信協議總線網絡,因其具有高性能、高可靠性、高實時性和配置靈活等特點,已經成為世界上應用最多的現場總線之一[1-3]。標準CAN 協議對物理層及數據鏈路層進行了定義,但在實際應用中還要對應用層進行協議明確[4-5]。常見的應用層協議有DeviceNET、J1939、CANOpen 等,這些協議偏重于通用性,其價格昂貴、結構復雜,不適用于具體應用。因此,通常需要針對具體應用,根據標準CAN 協議設計相應的具體應用總線協議[6]。
隨著航天航空電子綜合化技術的發展,航天航空器內部的系統功能復雜化和體量龐大化的同時,不同設備之間需要快速、可靠的通信。只有采用實時、穩定、可靠的數據傳輸技術才能實現此種需求[7]。目前,航天飛行器內部常用總線有1553B 總線、CAN 總線等。1553B 總線采用雙余度和指令/響應方式異步通信的可靠性設計,在提高可靠性的同時,其成本也居高不下;而CAN 總線擁有很高的性價比,采用CAN 總線能夠降低飛行器的研制成本[8]。為滿足某航天項目多節點高可靠總線通信的需求,從高性能、高可靠性、低成本的角度設計了一種基于TMS320F28335 的CAN 總線的硬件接口、通信協議與軟件配置。
CAN 總線是一種有效支持實時控制或分布式控制的串行通信網絡。CAN 總線中的設備都可以通過其控制單元上的CAN 總線接口進行數據的接收和發送,它是一個多路傳輸系統,當某一單元出現故障時不會影響其他單元的工作。CAN 總線中數據在串聯總線上可以單個順序傳送,符合ISO11898 標準。最大傳輸距離和傳輸速率成反比,傳輸速率為1 MB/s時,最大傳輸距離為40 m;傳輸速率為5 kB/s 時,最大傳輸距離為10 km。在傳輸介質方面多采用雙絞線、同軸電纜等形式。
在標準CAN 通信協議中,有遠程幀、數據幀、超載幀和錯誤幀等4 種不同的幀格式。該文對應的CAN 總線協議中只使用數據幀進行通信,數據幀仲裁段采用CAN2.0B 擴展格式。利用總線控制器的29 位擴展標識符來定義協議中的重要信息(如發送、接收設備等),通訊速率設為500 kbps,因此,相對應的最大通信距離為130 m。
文中設計的CAN 總線網絡是手拉手形式,連接示意圖如圖1 所示。

圖1 CAN總線網絡通信節點連接方式
每臺設備的通信接口采用一入一出兩個插座,并在設備內部將兩個插座的對應接點一一聯接,通過雙絞電纜網把各接點一一對應聯接。終端電阻安置在電纜線的兩端或者兩端節點的內部。
每臺設備使用兩個9 芯插座的標準連接器,這兩個9芯插座的接點分配完全一致,兩個連接器各對應點在設備內相互短接,一個用于連接輸入,一個用于連接輸出,以方便形成整體鏈路。插座接點分配如表1所示。

表1 總線插座接點分配
CAN 總線網絡采用雙冗余的總線型網絡結構,包括A、B 兩條CAN 總線,結構如圖2 所示。

圖2 雙冗余CAN總線網絡結構
TMS320F28335 數字信號處理器是德州儀器公司出品的一款C2000 系列的浮點DSP 控制器,主頻高達150 MHz。該DSP 控制器擁有強大的實時處理能力,并將控制器需要的核心外設功能集于一身,具有實時控制能力強、外設豐富、功耗小等特點。在CAN 通信方面,TMS320F28335 集成了兩個全功能CAN2.0B 模塊——eCAN-A 和eCAN-B,每個模塊都具有32 個完整的、可獨立配置的郵箱和時間戳,因此其擁有強大而靈活的CAN 串行通信接口。
CAN 總線接口芯片采用PHILIPS 公司的PCA82 C250,其管腳定義如表2 所示。

表2 PCA82C250管腳說明
TMS320F28335 與PCA82C250 的連接關系如圖3所示。圖中采用164245電平轉換芯片實現3.3 V和5 V 電平之間的相互轉換。

圖3 CAN接口電路設計
正常位時間劃分為以下4 個互不重疊的時間段:同步段(SYNC_SEG)、傳播段(PROP_SEG)、相位緩沖段1(PHASE_SEG1)和相位緩沖段 2(PHASE_SEG2)。同步段總是等于1 個時間單元(TIME QUANTUM,TQ)。在TMS320F28335 的eCAN模塊中,CAN 總線的位長度由TSEG1(組合了傳播段和相位緩沖段1)、TSEG2(定義了相位緩沖段2)和BRP(通信速率預定標)3 個參數決定。位速率公式如下式所示[9]:

其中,BRPreg、TSEG1reg 和TSEG2reg 分別由寄存器BTC 的23-16 位、6-3 位和2-0 位決定。并且設置需要符合以下規則:
①TSEG1≥TSEG2;
②2TQ≤TSEG1≤16TQ;
③2TQ≤TSEG2≤8TQ;
④2TQ=3/BRP;
⑤如果設置了3 次采樣模式,BRP≥5。
如果系統頻率為150 MHz,設置BRPreg=9、TSEG1reg=10、TSEG2reg=2,那么CAN通信速率為500 kHz。
文中采用的是CAN2.0B 協議,是具有29 位標識符的擴展幀。其各個位的定義如表3 所示。

表3 CAN2.0B擴展幀位序表
需要注意的是,根據CAN 總線協議規范,在構成一幀的幀起始、仲裁場、控制場和CRC 序列均借助位填充規則進行編碼,當CAN 發送器在發送的位流中檢測到5 位連續的相同數值時,將自動地在實際發送的位流中插入一個補碼位。比如,連續位流000000B,在實際發送中變為0000010B。而其余場采用固定格式,不進行填充。出錯幀和超載幀也是固定格式,也不進行位填充。另外,標識符最高7 位(ID28-ID22)不能全是“隱性”電平,即ID28-ID22 不能全為“1”[10]。
將數據幀的29 位標識符分成4 部分,如表4所示[11-12]。

表4 數據幀標識符組成
優先級PRI 分為00B(備用)、01B(主節點控制命令)、10B(狀態查詢、遙測查詢)和11B(保留)4 種。
站地址表示數據幀的目的地地址。各通信節點根據站地址設置屏蔽字,只接收與本通信節點有關的數據[13]。
幀類型分為兩部分,ID20-ID19定義為00B(主節點發送的數據)、01B(從節點發送的數據)、10B(保留)和11B(保留);ID18來定義單幀(0B)和多幀(1B)。
單幀數據場第一字節為有效數據長度(字節數),第二字節為數據包信息標識(包括數據類型和發送端地址),第三字節開始為有效數據,數據包結尾為和校驗的低字節[14]。
多幀數據起始幀數據場長度為8 字節,第一個字節為幀序0,第二個字節為數據包有效數據的長度(字節數),其他為數據[15];中繼幀數據場長度為8 字節,第一個字節為幀序,其他為數據;結束幀數據場長度必須小于8 字節,第一個字節為幀序,其他為數據,結束幀有可能只包含一個字節的幀序號[16]。信息數據包格式如表5 所示。

表5 信息數據包格式
信息數據標識分為高3 比特(數據類型同標識符的幀類型TYPE)和低5 比特(發送端站地址)。
校驗和是從序號0 到N的數據累加和的低字節。
根據上述規則設計以及TMS320F28335 寄存器設計,主節點控制ID、主節點查詢ID、從節點控制ID、從節點查詢ID 示例如表6 所示。

表6 節點ID設置示例
根據上表,主節點控制ID 設置為0x89200000,主節點查詢ID 設置為0x91200000,從節點控制ID 設置為0x89690000,從節點查詢ID 設置為0x916 C0000。
TMS320F28335 的eCAN 配置、發送數據和接收數據的步驟為:
1)使能CAN 模塊的時鐘;
2)設置CANTX 和CANRX 引腳到CAN 功能;
3)配置MC.SCB:0 為普通模式;1 為增強模式。該文配置為1;
4)初始化消息控制寄存器。MBOX0 到MBOX31的MSGCTRL 清零;
5)發送標志TA、接收標志RMP、中斷標志GIF0、GIF1 寫1 清零;
6)設置CCR=1,等到CCE=1,確認能夠更改配置寄存器TC;
7)設置BRPreg=9、TSEG1reg=10、TSEG2reg=2;
8)設置SAM=1,采樣3 次;
9)設置CCR=0,等到CCE=0,關閉配置寄存器TC 通道;
10)將寄存器ME 清零,以配置郵箱ID;
11)分配郵箱ID,比如郵箱0 的ID 設置為0x89200000,郵箱1 的ID 設置為0x91200000,郵箱2的ID 設置為0x89690000,郵箱3 的ID 設置為0x916 C0000;
12)設置郵箱方向,比如設置郵箱0和郵箱1為發送郵箱(MD=0);郵箱2 和郵箱3 為接受郵箱(MD=1);
13)使能郵箱,比如使能郵箱0,ME0=1;
14)設置郵箱數據區長度,比如郵箱0 數據區長度為8,MBOX0.MSGCTRL.bit.DLC=8;
15)設置發送郵箱的數據區數據,比如MBOX0.M DL.all=0x55AA55BB,MBOX0.MDH.all=0x11 223344;
16)設置發送郵箱發送標志位,比如TRS0=1;等到發送應答標志TA0=1;置位TA0=1,寫1 清零,清除發送應答位;
17)接收數據時,接收郵箱的消息掛起寄存器(RMP)中的相應位為1,比如郵箱16,判斷RMP16=1,即表明郵箱接收到了數據;接收程序首先將RMP16寫1 清零,以便接收下一輪數據。
利用兩個CAN 節點對文中硬件和軟件設計進行測試,設置為擴展幀,速度為500 kbps,CAN 的ID設置同2.4節保持一致,數據長度設置為8字節。主CAN控制命令測試數據設置為0x55AA55BB11223344、查詢命令測試數據設置為0x55CC55DD66 778899;從CAN 控制回復測試數據設置為0x7EE7BBAA010 20304、查詢回復測試數據設置為0x7EE7DDCC060 70809。
測試流程為:1)主CAN 向從CAN 發送控制命令,從CAN 回復控制命令;2)主CAN 向從CAN 發送查詢命令,從CAN 回復查詢命令。通過CANtest 軟件監控CAN 總線數據。監控結果如圖4 所示。

圖4 CANtest軟件監控數據
圖4 中第一行數據對應主CAN 向從CAN 發送控制命令數據,第二行數據對應從CAN 回復控制命令數據,第三行對應主CAN 向從CAN 發送查詢命令數據,第四行對應從CAN 回復查詢命令數據??梢钥闯鰯祿c設定值一致。
另外注意幀ID,此圖中幀ID 不完全等于所設定的幀ID,是因為TMS320F28335 設置的ID 格式中第31 到29 位不屬于CAN 的ID范圍,而第28位到0 位是CAN 擴展幀的29 位ID。
通過示波器觀測CAN 數據的位時間,實測結果如圖5 所示??梢钥闯?,位時間為2 μs,與設置的500 kbps 一致。

圖5 CAN數據波形圖
1)根據CAN 總線通信規范,設計了CAN 總線多節點通信網絡;根據TMS320F28335 處理器eCAN 外設特點,設計了CAN 總線接口電路;
2)介紹了CAN 位速率計算方法和CAN 擴展型數據幀的位序構成,設計了CAN 總線數據幀格式,并給出了ID 設置示例;
3)根據TMS320F28335 處理器eCAN模塊的設置規則,對該模塊進行了軟件配置,最終實現了CAN總線多節點的收發通信;
4)項目的后續多機CAN 通信需求可根據文中所設定的通信格式進行協議制定。