宋耀東,于 淼,杜 雪,李 軍
(中國(guó)電子科技集團(tuán)公司第二十七研究所,河南鄭州 450047)
CAN 總線指的是控制器局域網(wǎng)(Controller Area Network,CAN)總線,是最先由德國(guó)博世公司提出的用于汽車控制的一種實(shí)時(shí)應(yīng)用的串行通信協(xié)議總線網(wǎng)絡(luò),因其具有高性能、高可靠性、高實(shí)時(shí)性和配置靈活等特點(diǎn),已經(jīng)成為世界上應(yīng)用最多的現(xiàn)場(chǎng)總線之一[1-3]。標(biāo)準(zhǔn)CAN 協(xié)議對(duì)物理層及數(shù)據(jù)鏈路層進(jìn)行了定義,但在實(shí)際應(yīng)用中還要對(duì)應(yīng)用層進(jìn)行協(xié)議明確[4-5]。常見的應(yīng)用層協(xié)議有DeviceNET、J1939、CANOpen 等,這些協(xié)議偏重于通用性,其價(jià)格昂貴、結(jié)構(gòu)復(fù)雜,不適用于具體應(yīng)用。因此,通常需要針對(duì)具體應(yīng)用,根據(jù)標(biāo)準(zhǔn)CAN 協(xié)議設(shè)計(jì)相應(yīng)的具體應(yīng)用總線協(xié)議[6]。
隨著航天航空電子綜合化技術(shù)的發(fā)展,航天航空器內(nèi)部的系統(tǒng)功能復(fù)雜化和體量龐大化的同時(shí),不同設(shè)備之間需要快速、可靠的通信。只有采用實(shí)時(shí)、穩(wěn)定、可靠的數(shù)據(jù)傳輸技術(shù)才能實(shí)現(xiàn)此種需求[7]。目前,航天飛行器內(nèi)部常用總線有1553B 總線、CAN 總線等。1553B 總線采用雙余度和指令/響應(yīng)方式異步通信的可靠性設(shè)計(jì),在提高可靠性的同時(shí),其成本也居高不下;而CAN 總線擁有很高的性價(jià)比,采用CAN 總線能夠降低飛行器的研制成本[8]。為滿足某航天項(xiàng)目多節(jié)點(diǎn)高可靠總線通信的需求,從高性能、高可靠性、低成本的角度設(shè)計(jì)了一種基于TMS320F28335 的CAN 總線的硬件接口、通信協(xié)議與軟件配置。
CAN 總線是一種有效支持實(shí)時(shí)控制或分布式控制的串行通信網(wǎng)絡(luò)。CAN 總線中的設(shè)備都可以通過其控制單元上的CAN 總線接口進(jìn)行數(shù)據(jù)的接收和發(fā)送,它是一個(gè)多路傳輸系統(tǒng),當(dāng)某一單元出現(xiàn)故障時(shí)不會(huì)影響其他單元的工作。CAN 總線中數(shù)據(jù)在串聯(lián)總線上可以單個(gè)順序傳送,符合ISO11898 標(biāo)準(zhǔn)。最大傳輸距離和傳輸速率成反比,傳輸速率為1 MB/s時(shí),最大傳輸距離為40 m;傳輸速率為5 kB/s 時(shí),最大傳輸距離為10 km。在傳輸介質(zhì)方面多采用雙絞線、同軸電纜等形式。
在標(biāo)準(zhǔn)CAN 通信協(xié)議中,有遠(yuǎn)程幀、數(shù)據(jù)幀、超載幀和錯(cuò)誤幀等4 種不同的幀格式。該文對(duì)應(yīng)的CAN 總線協(xié)議中只使用數(shù)據(jù)幀進(jìn)行通信,數(shù)據(jù)幀仲裁段采用CAN2.0B 擴(kuò)展格式。利用總線控制器的29 位擴(kuò)展標(biāo)識(shí)符來定義協(xié)議中的重要信息(如發(fā)送、接收設(shè)備等),通訊速率設(shè)為500 kbps,因此,相對(duì)應(yīng)的最大通信距離為130 m。
文中設(shè)計(jì)的CAN 總線網(wǎng)絡(luò)是手拉手形式,連接示意圖如圖1 所示。
圖1 CAN總線網(wǎng)絡(luò)通信節(jié)點(diǎn)連接方式
每臺(tái)設(shè)備的通信接口采用一入一出兩個(gè)插座,并在設(shè)備內(nèi)部將兩個(gè)插座的對(duì)應(yīng)接點(diǎn)一一聯(lián)接,通過雙絞電纜網(wǎng)把各接點(diǎn)一一對(duì)應(yīng)聯(lián)接。終端電阻安置在電纜線的兩端或者兩端節(jié)點(diǎn)的內(nèi)部。
每臺(tái)設(shè)備使用兩個(gè)9 芯插座的標(biāo)準(zhǔn)連接器,這兩個(gè)9芯插座的接點(diǎn)分配完全一致,兩個(gè)連接器各對(duì)應(yīng)點(diǎn)在設(shè)備內(nèi)相互短接,一個(gè)用于連接輸入,一個(gè)用于連接輸出,以方便形成整體鏈路。插座接點(diǎn)分配如表1所示。
表1 總線插座接點(diǎn)分配
CAN 總線網(wǎng)絡(luò)采用雙冗余的總線型網(wǎng)絡(luò)結(jié)構(gòu),包括A、B 兩條CAN 總線,結(jié)構(gòu)如圖2 所示。
圖2 雙冗余CAN總線網(wǎng)絡(luò)結(jié)構(gòu)
TMS320F28335 數(shù)字信號(hào)處理器是德州儀器公司出品的一款C2000 系列的浮點(diǎn)DSP 控制器,主頻高達(dá)150 MHz。該DSP 控制器擁有強(qiáng)大的實(shí)時(shí)處理能力,并將控制器需要的核心外設(shè)功能集于一身,具有實(shí)時(shí)控制能力強(qiáng)、外設(shè)豐富、功耗小等特點(diǎn)。在CAN 通信方面,TMS320F28335 集成了兩個(gè)全功能CAN2.0B 模塊——eCAN-A 和eCAN-B,每個(gè)模塊都具有32 個(gè)完整的、可獨(dú)立配置的郵箱和時(shí)間戳,因此其擁有強(qiáng)大而靈活的CAN 串行通信接口。
CAN 總線接口芯片采用PHILIPS 公司的PCA82 C250,其管腳定義如表2 所示。
表2 PCA82C250管腳說明
TMS320F28335 與PCA82C250 的連接關(guān)系如圖3所示。圖中采用164245電平轉(zhuǎn)換芯片實(shí)現(xiàn)3.3 V和5 V 電平之間的相互轉(zhuǎn)換。
圖3 CAN接口電路設(shè)計(jì)
正常位時(shí)間劃分為以下4 個(gè)互不重疊的時(shí)間段:同步段(SYNC_SEG)、傳播段(PROP_SEG)、相位緩沖段1(PHASE_SEG1)和相位緩沖段 2(PHASE_SEG2)。同步段總是等于1 個(gè)時(shí)間單元(TIME QUANTUM,TQ)。在TMS320F28335 的eCAN模塊中,CAN 總線的位長(zhǎng)度由TSEG1(組合了傳播段和相位緩沖段1)、TSEG2(定義了相位緩沖段2)和BRP(通信速率預(yù)定標(biāo))3 個(gè)參數(shù)決定。位速率公式如下式所示[9]:
其中,BRPreg、TSEG1reg 和TSEG2reg 分別由寄存器BTC 的23-16 位、6-3 位和2-0 位決定。并且設(shè)置需要符合以下規(guī)則:
①TSEG1≥TSEG2;
②2TQ≤TSEG1≤16TQ;
③2TQ≤TSEG2≤8TQ;
④2TQ=3/BRP;
⑤如果設(shè)置了3 次采樣模式,BRP≥5。
如果系統(tǒng)頻率為150 MHz,設(shè)置BRPreg=9、TSEG1reg=10、TSEG2reg=2,那么CAN通信速率為500 kHz。
文中采用的是CAN2.0B 協(xié)議,是具有29 位標(biāo)識(shí)符的擴(kuò)展幀。其各個(gè)位的定義如表3 所示。
表3 CAN2.0B擴(kuò)展幀位序表
需要注意的是,根據(jù)CAN 總線協(xié)議規(guī)范,在構(gòu)成一幀的幀起始、仲裁場(chǎng)、控制場(chǎng)和CRC 序列均借助位填充規(guī)則進(jìn)行編碼,當(dāng)CAN 發(fā)送器在發(fā)送的位流中檢測(cè)到5 位連續(xù)的相同數(shù)值時(shí),將自動(dòng)地在實(shí)際發(fā)送的位流中插入一個(gè)補(bǔ)碼位。比如,連續(xù)位流000000B,在實(shí)際發(fā)送中變?yōu)?000010B。而其余場(chǎng)采用固定格式,不進(jìn)行填充。出錯(cuò)幀和超載幀也是固定格式,也不進(jìn)行位填充。另外,標(biāo)識(shí)符最高7 位(ID28-ID22)不能全是“隱性”電平,即ID28-ID22 不能全為“1”[10]。
將數(shù)據(jù)幀的29 位標(biāo)識(shí)符分成4 部分,如表4所示[11-12]。
表4 數(shù)據(jù)幀標(biāo)識(shí)符組成
優(yōu)先級(jí)PRI 分為00B(備用)、01B(主節(jié)點(diǎn)控制命令)、10B(狀態(tài)查詢、遙測(cè)查詢)和11B(保留)4 種。
站地址表示數(shù)據(jù)幀的目的地地址。各通信節(jié)點(diǎn)根據(jù)站地址設(shè)置屏蔽字,只接收與本通信節(jié)點(diǎn)有關(guān)的數(shù)據(jù)[13]。
幀類型分為兩部分,ID20-ID19定義為00B(主節(jié)點(diǎn)發(fā)送的數(shù)據(jù))、01B(從節(jié)點(diǎn)發(fā)送的數(shù)據(jù))、10B(保留)和11B(保留);ID18來定義單幀(0B)和多幀(1B)。
單幀數(shù)據(jù)場(chǎng)第一字節(jié)為有效數(shù)據(jù)長(zhǎng)度(字節(jié)數(shù)),第二字節(jié)為數(shù)據(jù)包信息標(biāo)識(shí)(包括數(shù)據(jù)類型和發(fā)送端地址),第三字節(jié)開始為有效數(shù)據(jù),數(shù)據(jù)包結(jié)尾為和校驗(yàn)的低字節(jié)[14]。
多幀數(shù)據(jù)起始幀數(shù)據(jù)場(chǎng)長(zhǎng)度為8 字節(jié),第一個(gè)字節(jié)為幀序0,第二個(gè)字節(jié)為數(shù)據(jù)包有效數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù)),其他為數(shù)據(jù)[15];中繼幀數(shù)據(jù)場(chǎng)長(zhǎng)度為8 字節(jié),第一個(gè)字節(jié)為幀序,其他為數(shù)據(jù);結(jié)束幀數(shù)據(jù)場(chǎng)長(zhǎng)度必須小于8 字節(jié),第一個(gè)字節(jié)為幀序,其他為數(shù)據(jù),結(jié)束幀有可能只包含一個(gè)字節(jié)的幀序號(hào)[16]。信息數(shù)據(jù)包格式如表5 所示。
表5 信息數(shù)據(jù)包格式
信息數(shù)據(jù)標(biāo)識(shí)分為高3 比特(數(shù)據(jù)類型同標(biāo)識(shí)符的幀類型TYPE)和低5 比特(發(fā)送端站地址)。
校驗(yàn)和是從序號(hào)0 到N的數(shù)據(jù)累加和的低字節(jié)。
根據(jù)上述規(guī)則設(shè)計(jì)以及TMS320F28335 寄存器設(shè)計(jì),主節(jié)點(diǎn)控制ID、主節(jié)點(diǎn)查詢ID、從節(jié)點(diǎn)控制ID、從節(jié)點(diǎn)查詢ID 示例如表6 所示。
表6 節(jié)點(diǎn)ID設(shè)置示例
根據(jù)上表,主節(jié)點(diǎn)控制ID 設(shè)置為0x89200000,主節(jié)點(diǎn)查詢ID 設(shè)置為0x91200000,從節(jié)點(diǎn)控制ID 設(shè)置為0x89690000,從節(jié)點(diǎn)查詢ID 設(shè)置為0x916 C0000。
TMS320F28335 的eCAN 配置、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的步驟為:
1)使能CAN 模塊的時(shí)鐘;
2)設(shè)置CANTX 和CANRX 引腳到CAN 功能;
3)配置MC.SCB:0 為普通模式;1 為增強(qiáng)模式。該文配置為1;
4)初始化消息控制寄存器。MBOX0 到MBOX31的MSGCTRL 清零;
5)發(fā)送標(biāo)志TA、接收標(biāo)志RMP、中斷標(biāo)志GIF0、GIF1 寫1 清零;
6)設(shè)置CCR=1,等到CCE=1,確認(rèn)能夠更改配置寄存器TC;
7)設(shè)置BRPreg=9、TSEG1reg=10、TSEG2reg=2;
8)設(shè)置SAM=1,采樣3 次;
9)設(shè)置CCR=0,等到CCE=0,關(guān)閉配置寄存器TC 通道;
10)將寄存器ME 清零,以配置郵箱ID;
11)分配郵箱ID,比如郵箱0 的ID 設(shè)置為0x89200000,郵箱1 的ID 設(shè)置為0x91200000,郵箱2的ID 設(shè)置為0x89690000,郵箱3 的ID 設(shè)置為0x916 C0000;
12)設(shè)置郵箱方向,比如設(shè)置郵箱0和郵箱1為發(fā)送郵箱(MD=0);郵箱2 和郵箱3 為接受郵箱(MD=1);
13)使能郵箱,比如使能郵箱0,ME0=1;
14)設(shè)置郵箱數(shù)據(jù)區(qū)長(zhǎng)度,比如郵箱0 數(shù)據(jù)區(qū)長(zhǎng)度為8,MBOX0.MSGCTRL.bit.DLC=8;
15)設(shè)置發(fā)送郵箱的數(shù)據(jù)區(qū)數(shù)據(jù),比如MBOX0.M DL.all=0x55AA55BB,MBOX0.MDH.all=0x11 223344;
16)設(shè)置發(fā)送郵箱發(fā)送標(biāo)志位,比如TRS0=1;等到發(fā)送應(yīng)答標(biāo)志TA0=1;置位TA0=1,寫1 清零,清除發(fā)送應(yīng)答位;
17)接收數(shù)據(jù)時(shí),接收郵箱的消息掛起寄存器(RMP)中的相應(yīng)位為1,比如郵箱16,判斷RMP16=1,即表明郵箱接收到了數(shù)據(jù);接收程序首先將RMP16寫1 清零,以便接收下一輪數(shù)據(jù)。
利用兩個(gè)CAN 節(jié)點(diǎn)對(duì)文中硬件和軟件設(shè)計(jì)進(jìn)行測(cè)試,設(shè)置為擴(kuò)展幀,速度為500 kbps,CAN 的ID設(shè)置同2.4節(jié)保持一致,數(shù)據(jù)長(zhǎng)度設(shè)置為8字節(jié)。主CAN控制命令測(cè)試數(shù)據(jù)設(shè)置為0x55AA55BB11223344、查詢命令測(cè)試數(shù)據(jù)設(shè)置為0x55CC55DD66 778899;從CAN 控制回復(fù)測(cè)試數(shù)據(jù)設(shè)置為0x7EE7BBAA010 20304、查詢回復(fù)測(cè)試數(shù)據(jù)設(shè)置為0x7EE7DDCC060 70809。
測(cè)試流程為:1)主CAN 向從CAN 發(fā)送控制命令,從CAN 回復(fù)控制命令;2)主CAN 向從CAN 發(fā)送查詢命令,從CAN 回復(fù)查詢命令。通過CANtest 軟件監(jiān)控CAN 總線數(shù)據(jù)。監(jiān)控結(jié)果如圖4 所示。
圖4 CANtest軟件監(jiān)控?cái)?shù)據(jù)
圖4 中第一行數(shù)據(jù)對(duì)應(yīng)主CAN 向從CAN 發(fā)送控制命令數(shù)據(jù),第二行數(shù)據(jù)對(duì)應(yīng)從CAN 回復(fù)控制命令數(shù)據(jù),第三行對(duì)應(yīng)主CAN 向從CAN 發(fā)送查詢命令數(shù)據(jù),第四行對(duì)應(yīng)從CAN 回復(fù)查詢命令數(shù)據(jù)??梢钥闯鰯?shù)據(jù)與設(shè)定值一致。
另外注意幀ID,此圖中幀ID 不完全等于所設(shè)定的幀ID,是因?yàn)門MS320F28335 設(shè)置的ID 格式中第31 到29 位不屬于CAN 的ID范圍,而第28位到0 位是CAN 擴(kuò)展幀的29 位ID。
通過示波器觀測(cè)CAN 數(shù)據(jù)的位時(shí)間,實(shí)測(cè)結(jié)果如圖5 所示??梢钥闯觯粫r(shí)間為2 μs,與設(shè)置的500 kbps 一致。
圖5 CAN數(shù)據(jù)波形圖
1)根據(jù)CAN 總線通信規(guī)范,設(shè)計(jì)了CAN 總線多節(jié)點(diǎn)通信網(wǎng)絡(luò);根據(jù)TMS320F28335 處理器eCAN 外設(shè)特點(diǎn),設(shè)計(jì)了CAN 總線接口電路;
2)介紹了CAN 位速率計(jì)算方法和CAN 擴(kuò)展型數(shù)據(jù)幀的位序構(gòu)成,設(shè)計(jì)了CAN 總線數(shù)據(jù)幀格式,并給出了ID 設(shè)置示例;
3)根據(jù)TMS320F28335 處理器eCAN模塊的設(shè)置規(guī)則,對(duì)該模塊進(jìn)行了軟件配置,最終實(shí)現(xiàn)了CAN總線多節(jié)點(diǎn)的收發(fā)通信;
4)項(xiàng)目的后續(xù)多機(jī)CAN 通信需求可根據(jù)文中所設(shè)定的通信格式進(jìn)行協(xié)議制定。