王 越 胡 宇
?
簡(jiǎn)析基于PIC32單片機(jī)的CAN總線通信
王 越1胡 宇2
1.沈陽(yáng)金科精密儀器設(shè)備有限公司,遼寧 沈陽(yáng) 110136 2.嵐山嵌入系統(tǒng)(沈陽(yáng))有限公司,遼寧 沈陽(yáng) 110000
CAN全稱(chēng)為“Controller Area Network”即控制器局域網(wǎng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。隨著通信技術(shù)的快速發(fā)展,CAN總線通信得到廣泛的應(yīng)用?;诖?,闡述了CAN總線數(shù)據(jù)庫(kù)的設(shè)計(jì),對(duì)基于PIC32單片機(jī)的CAN總線結(jié)構(gòu)及其總線通信進(jìn)行了簡(jiǎn)要分析。
CAN總線;數(shù)據(jù)庫(kù);結(jié)構(gòu);通信
PIC32單片機(jī)系列適用于各種嵌入式應(yīng)用領(lǐng)域,包括:工業(yè)、通信、家電以及消費(fèi)電子產(chǎn)品等等。以下就基于PIC32單片機(jī)的CAN總線通訊進(jìn)行分析。
CAN總線數(shù)據(jù)庫(kù)的設(shè)計(jì)主要包括:
(1)CAN節(jié)點(diǎn)。具體包括CAN總線網(wǎng)絡(luò)中所有節(jié)點(diǎn)的名稱(chēng)以及通信ID。
(2)信號(hào)signal。信號(hào)signal代表一種類(lèi)型的變量,一般用消息中的一位或者幾位來(lái)表示。一般包含的主要信息有:startBit,即開(kāi)始位;length即這個(gè)變量的長(zhǎng)度是多少位的。除此之外還有最大值、最小值的設(shè)置等。
(3)消息Message。其實(shí)質(zhì)就是在CAN總線上通信的數(shù)據(jù)幀,一個(gè)Message包含的主要信息有:ID,表明這個(gè)數(shù)據(jù)幀是從哪個(gè)節(jié)點(diǎn)發(fā)出的:DLC,也就是數(shù)據(jù)幀的長(zhǎng)度,即多少個(gè)字節(jié)(Byte):信號(hào)signal,一條消息一般含有一個(gè)或多個(gè)信號(hào)。
PIC32控制器局域網(wǎng)模塊實(shí)現(xiàn)了CAN規(guī)范2.0B,該規(guī)范主要用于工業(yè)和汽車(chē)。該異步串行數(shù)據(jù)通信協(xié)議能在電氣噪聲環(huán)境下提供可靠的通信。PIC32器件系列可以集成最多兩個(gè)CAN模塊。
2.1 CAN模塊支持以下主要特性
第一,符合標(biāo)準(zhǔn)。
(1)完全符合CAN規(guī)范2.0B;(2)最高1 Mbps的可編程比特率。
第二,報(bào)文接收和發(fā)送。
(1)最多32個(gè)報(bào)文FIFO。
(2)每個(gè)FIFO最多可包含32個(gè)報(bào)文,總共最多可包含1 024個(gè)報(bào)文;
知識(shí)鏈組織若能有效地開(kāi)發(fā)利用有價(jià)值的、稀缺的、難以模仿的知識(shí)資源,那么就可以獲得相對(duì)于其他知識(shí)鏈的知識(shí)優(yōu)勢(shì)。然而,知識(shí)鏈組織之間是一種戰(zhàn)略伙伴關(guān)系,依靠合同協(xié)議和相互信任維持合作,在運(yùn)行過(guò)程中容易受到目標(biāo)分歧、文化差異、利益不均等的干擾而產(chǎn)生沖突,因此需要運(yùn)用正式的契約機(jī)制、非正式的自實(shí)施機(jī)制、第三方?jīng)_突管理機(jī)制、關(guān)系強(qiáng)度調(diào)節(jié)機(jī)制等多種手段,掃除知識(shí)鏈開(kāi)發(fā)利用知識(shí)資源的組織障礙,促進(jìn)知識(shí)鏈知識(shí)優(yōu)勢(shì)的形成。
(3)FIFO可以作為發(fā)送報(bào)文FIFO或接收?qǐng)?bào)文FIFO;
(4)用戶可為用于發(fā)送的報(bào)文FIFO定義優(yōu)先級(jí);
(5)最多32個(gè)用于報(bào)文過(guò)濾的接收過(guò)濾器;
(6)最多4個(gè)用于報(bào)文過(guò)濾的接收過(guò)濾器屏蔽器寄存器;
(7)自動(dòng)響應(yīng)遠(yuǎn)程發(fā)送請(qǐng)求(Remote Transmit Request,RTR);
(8)支持DeviceNetTM尋址。
第三,其他特性。
(1)環(huán)回、監(jiān)聽(tīng)所有報(bào)文和監(jiān)聽(tīng)模式,用于自檢、系統(tǒng)診斷和總線監(jiān)視。(2)低功耗工作模式。(3)CAN模塊是PIC32系統(tǒng)總線上的總線主機(jī)。(4)操作不需要直接存儲(chǔ)器訪問(wèn)(Direct Memory Access,DMA)通道。(5)專(zhuān)用的時(shí)間標(biāo)記定時(shí)器。(6)僅數(shù)據(jù)報(bào)文接收模式。
2.2 PIC32CAN模塊的大體結(jié)構(gòu)框圖(如圖1所示)
注:不是所有特性在所有器件上均可用,而是需要參考具體器件數(shù)據(jù)冊(cè)中的“控制器局域網(wǎng)(CAN)”以確定可用性。
圖1PIC32CAN模塊的大體結(jié)構(gòu)框圖
CAN模塊由協(xié)議引擎、報(bào)文接收過(guò)濾器和報(bào)文組合緩沖區(qū)(Message Assembly Buffer,MAB)組成。協(xié)議引擎通過(guò)CAN總線(按照CAN規(guī)范2.0B)發(fā)送和接收?qǐng)?bào)文。所接收的報(bào)文在接收?qǐng)?bào)文組合緩沖區(qū)中組合。然后,接收到的報(bào)文通過(guò)報(bào)文接收過(guò)濾器進(jìn)行過(guò)濾。發(fā)送報(bào)文組合緩沖區(qū)在協(xié)議引擎進(jìn)行處理時(shí)存放待發(fā)送的報(bào)文。CAN報(bào)文緩沖區(qū)駐留在器件RAM中。CAN模塊中沒(méi)有CAN報(bào)文緩沖區(qū)。因此,所有報(bào)文都存儲(chǔ)在器件RAM中。CAN模塊是PIC32系統(tǒng)總線上的總線主機(jī),它會(huì)根據(jù)需要向器件RAM讀寫(xiě)數(shù)據(jù)。CAN模塊執(zhí)行操作時(shí)不使用DMA,它可以在無(wú)須DMA或CPU干預(yù)的情況下,從器件RAM中讀取報(bào)文。
3.1 CAN報(bào)文格式
CAN總線協(xié)議使用異步通信。信息以數(shù)據(jù)幀的形式從發(fā)送器傳遞到接收器,數(shù)據(jù)幀由定義數(shù)據(jù)幀內(nèi)容的字節(jié)字段組成。每一幀都以幀起始(Start of Frame,SOF)位域開(kāi)始,以幀結(jié)束(End of Frame,EOF)位域結(jié)束。SOF位后面跟隨仲裁和控制字段,它們表示報(bào)文類(lèi)型、格式、長(zhǎng)度和優(yōu)先級(jí)。該信息使CAN總線上的每個(gè)節(jié)點(diǎn)都可以適當(dāng)?shù)仨憫?yīng)報(bào)文。數(shù)據(jù)字段用于傳送報(bào)文內(nèi)容,其長(zhǎng)度可變,范圍為0至8字節(jié)。錯(cuò)誤保護(hù)通過(guò)循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)和應(yīng)答(Ac knowledgement,ACK)字段來(lái)實(shí)現(xiàn)。(1)CAN總線協(xié)議支持五種幀類(lèi)型:第一,數(shù)據(jù)幀——包含發(fā)送器向接收器傳送的數(shù)據(jù);第二,遠(yuǎn)程幀——由總線上某個(gè)節(jié)點(diǎn)發(fā)送,用于請(qǐng)求從另一個(gè)節(jié)點(diǎn)發(fā)送具有相同標(biāo)識(shí)符的數(shù)據(jù)幀;第三,錯(cuò)誤幀——由任意節(jié)點(diǎn)在檢測(cè)到錯(cuò)誤時(shí)發(fā)送;第四,過(guò)載幀——在連續(xù)的數(shù)據(jù)幀或遠(yuǎn)程幀之間提供額外的延時(shí);第五、幀間間隔一一在連續(xù)的幀之間提供間隔。(2)CAN 規(guī)范2.0B 還定義了兩種額外的數(shù)據(jù)格式:第一,標(biāo)準(zhǔn)數(shù)據(jù)幀—用于使用11個(gè)標(biāo)識(shí)符位的標(biāo)準(zhǔn)報(bào)文;第二,擴(kuò)展數(shù)據(jù)幀—用于使用29個(gè)標(biāo)識(shí)符位的擴(kuò)展報(bào)文。(3)CAN總線規(guī)范有三種版本:第一,2.0A——將29位標(biāo)識(shí)符視為錯(cuò)誤;第二,2.0B Passive——忽略29位標(biāo)識(shí)符報(bào)文;第三,2.0B Active——處理11位和29位標(biāo)識(shí)符。
3.2 CAN寄存器
CAN模塊寄存器可以按照它們的功能分為以下幾組:第一,模塊和CAN比特率配置寄存器;第二,中斷和狀態(tài)寄存器;第三,屏蔽器和過(guò)濾器配置寄存器;第四,F(xiàn)IFO控制寄存器。
3.3 CAN模塊工作模式
用戶應(yīng)用程序可以選擇以下幾種CAN模塊工作模式:(1)配置模式;(2)正常工作模式;(3)監(jiān)聽(tīng)模式;(4)監(jiān)聽(tīng)所有報(bào)文模式;(5)環(huán)回模式;(6)禁比模式。用戶應(yīng)用程序通過(guò)寫(xiě)入CAN控制寄存器中的請(qǐng)求工作模式位REQOP<2:0>(CiCON<26:24>)來(lái)請(qǐng)求所需的工作模式。CAN模塊通過(guò)CAN控制寄存器中的工作模式位OPMOD<2:0>(CiCON<23:21>)確認(rèn)進(jìn)入所請(qǐng)求的模式。模式轉(zhuǎn)換與CAN網(wǎng)絡(luò)同步執(zhí)行。通過(guò)允許CAN中斷寄存器中的模式改變中斷位MODIE(CiINT<19>),用戶應(yīng)用程序可以選擇在所請(qǐng)求的模式改變發(fā)生時(shí)產(chǎn)生中斷。在成功應(yīng)用新模式之后,將會(huì)產(chǎn)生CAN中斷?;蛘撸脩粢部梢赃x擇通過(guò)查詢OPMOD<2:0>位(CiCON<23:21>)來(lái)確定CAN模塊是否成功切換了模式[2]。
基于PIC32單片機(jī)的CAN總線通信在自動(dòng)化領(lǐng)域的應(yīng)用非常廣泛,其特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、成本低,但速度高、實(shí)時(shí)性和可靠性好,因此對(duì)其進(jìn)行分析具有重要意義。
[1]張子明,等.基于C8051F040單片機(jī)+BU61580架構(gòu)的1555B總線通信接口模塊的設(shè)計(jì)[J].測(cè)控技術(shù),2013(12):157-159.
[2]李多,陳軍.基于單片機(jī)串口實(shí)現(xiàn)1-Wire總線通信的方法[J].微型機(jī)與應(yīng)用,2012(11):41-52.
Analysis of CAN Bus Communication Based on PIC32 MCU
Wang Yue1Hu Yu2
1.Shenyang Jinke precision instrument equipment Co., Ltd., Liaoning Shenyang 110136 2.Arashiyama embedded system(Shenyang)Co., Ltd., Shenyang Liaoning 110000
CAN full name “Controller Area Network”Controller area network, Is one of the most widely used field bus in the world. With the rapid development of communication technology, CAN bus communication has been widely used. Based on this, this paper describes the design of the CAN bus database, the CAN bus structure based on PIC32 MCU and its bus communication are analyzed briefly.
CAN bus; database; structure; communication
TP273.5
A
1009-6434(2016)08-0023-02