大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來基于FPGA的CAN總線控制器的設(shè)計,由于篇幅較長,分三篇。今天帶來第一篇,上篇,CAN 總線協(xié)議解析以及CAN 通信控制器程序基本框架。話不多說,上貨。
為了方便參考學(xué)習(xí),后兩篇這里也放上超鏈接:
基于FPGA的CAN總線控制器的設(shè)計(中)
基于FPGA的CAN總線控制器的設(shè)計(下)
導(dǎo)讀
CAN 總線(Controller Area Network)是控制器局域網(wǎng)的簡稱,是 20 世紀 80 年代初德國 BOSCH 公司為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信協(xié)議。目前,CAN 總線已經(jīng)被列入 ISO 國際標準,稱為 ISO11898。CAN 總線已經(jīng)成為工業(yè)數(shù)據(jù)通信的主流技術(shù)之一。
CAN 總線作為數(shù)字式串行通信技術(shù),與其他同類技術(shù)相比,在可靠性、實時性和靈活性方面具有獨特的技術(shù)優(yōu)勢,主要特點如下:
CAN 總線是一種多主總線,總線上任意節(jié)點可在任意時刻主動地向網(wǎng)絡(luò)上其他節(jié)點發(fā)送信息而不分主次,因此可在各節(jié)點之間實現(xiàn)自由通信。
CAN 總線采用非破壞性總線仲裁技術(shù)。當多個節(jié)點同時向總線發(fā)送信息時,優(yōu)先級低的節(jié)點會主動退出發(fā)送,而最高優(yōu)先級的節(jié)點可以不受影響地繼續(xù)傳輸數(shù)據(jù),從而大大節(jié)省總線沖突的仲裁時間。即使在網(wǎng)絡(luò)負載很重的情況下也不會發(fā)生網(wǎng)絡(luò)癱瘓情況。
CAN 總線的通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,選擇靈活。
CAN 總線的通信速率可達 1Mbit/s(此時通信距離最長為 40 米),通信距離最遠可達 10km(速率在 5kbit/s 以下)。
CAN 總線上的節(jié)點信息分成不同的優(yōu)先級,可以滿足不同級別的實時要求,高優(yōu)先級的數(shù)據(jù)可以在 134μs 內(nèi)得到傳輸。
CAN 總線通過報文濾波即可實現(xiàn)點對點、一點對多點及全局廣播等幾種方式傳送數(shù)據(jù),無需專門的調(diào)度。
CAN 總線的數(shù)據(jù)采用短幀結(jié)構(gòu),傳輸時間短,受干擾概率低,具有極好的檢錯效果。
CAN 總線采用 CRC 檢驗并可提供相應(yīng)的錯誤處理功能,保證了數(shù)據(jù)通信的可靠性。
CAN 總線上的器件可被置于無任何內(nèi)部活動的睡眠方式,相當于未連接到總線上,可以有效降低系統(tǒng)功耗。
CAN 總線上的節(jié)點在錯誤嚴重的情況下具有自動關(guān)閉輸出的功能,以使總線上其他節(jié)點的操作不受影響。CAN 總線卓越的特性、極高的可靠性和獨特的設(shè)計,特別適合工業(yè)過程中監(jiān)控設(shè)備的互連,因此,越來越受到工業(yè)界的重視,并被公認為是最有前途的現(xiàn)場總線之一。另外,CAN 總線協(xié)議已被國際標準化組織認可,技術(shù)比較成熟,控制的芯片已經(jīng)商品化,性價比高,特別適用于分布式測控系統(tǒng)之間的數(shù)通訊。
CAN 總線插卡可以任意插在 PC AT XT 兼容機上,方便地構(gòu)成分布式監(jiān)控系統(tǒng)。因此,用 FPGA 實現(xiàn) CAN 總線通信控制器具有非常重要的應(yīng)用價值。本篇將通過一個實例講解利用 FPGA 實現(xiàn) CAN 總線通信控制器的實現(xiàn)方法。
第一篇內(nèi)容摘要:本篇會介紹CAN 總線協(xié)議解析,包括CAN 總線通信模型、CAN 總線協(xié)議中的基本概念、報文的數(shù)據(jù)結(jié)構(gòu)、位時序(Bit Timing)、同步(Synchronization)等相關(guān)內(nèi)容。還會介紹CAN 通信控制器程序基本框架,包括SJA1000CAN 通信控制器、CAN 通信控制器程序框架等相關(guān)內(nèi)容。
一、CAN 總線協(xié)議解析
在講解實現(xiàn) CAN 總線的實例以前,讀者需要具備有關(guān) CAN 總線的基本知識。為此,將在這里簡要介紹與實例相關(guān)的基礎(chǔ)知識。
1.1 CAN 總線通信模型
參照 ISO/OSI 標準模型,CAN 總線的通信參考模型如圖 1 所示。
圖 1 CAN 總線通信模型
這 4 層結(jié)構(gòu)的功能如下:
? 物理層規(guī)定了節(jié)點的全部電氣特性,在一個網(wǎng)絡(luò)里,要實現(xiàn)不同節(jié)點間的數(shù)據(jù)傳輸,所有節(jié)點的物理層必須是相同的。
? 傳輸層描述了 CAN 總線協(xié)議的內(nèi)核,它負責(zé)位時序(bit timing)、同步、仲裁、應(yīng)答、錯誤探測等。
? 對象層負責(zé)報文的過濾、狀態(tài)和控制。
? 應(yīng)用層完成用戶指定的數(shù)據(jù)傳輸任務(wù)。
CAN 總線的物理層為數(shù)據(jù)通信提供了物理連接,而實際的數(shù)據(jù)通信在其他 3 層中完成。
1.2 CAN 總線協(xié)議中的基本概念
在講解 CAN 總線協(xié)議之前,需要介紹有關(guān)協(xié)議中的基本概念。
1.報文(Messages)
在 CAN 總線傳輸?shù)臄?shù)據(jù)具有固定的格式和有限的長度,稱為報文。
2.發(fā)送器(Transmitter)和接收器(Receiver)
在 CAN 總線的數(shù)據(jù)傳輸過程中,發(fā)出報文的節(jié)點稱為發(fā)送器。節(jié)點在總線進入空閑狀態(tài)前或丟失仲裁前為發(fā)送器。如果一個節(jié)點不是報文發(fā)送器,并且總線不處于空閑狀態(tài),則該節(jié)點為接收器。
3.比特率(bit rate)
CAN 總線的輸出速度以單位時間內(nèi)傳輸?shù)奈粊砗饬?,稱為比特率。CAN 總線在不同的系統(tǒng)中可以有不同的比特率。但是在給定的系統(tǒng)中,比特率是統(tǒng)一的和固定的。
4.優(yōu)先級(Priorities)
優(yōu)先級表示總線傳輸中一個報文的優(yōu)先級別。
5.遠程數(shù)據(jù)請求(Remote Data Request)
當一個節(jié)點向另一個節(jié)點請求數(shù)據(jù)時,需要首先發(fā)送一個遠程幀(Remote Frame),然后發(fā)送一個和遠程幀相符的數(shù)據(jù)幀(Data Frame)。遠程幀和數(shù)據(jù)幀具有相同的標識符。
6.位流(Bit Stream)
CAN 總線通信過程中的數(shù)據(jù)流。
7.編碼方式CAN 總線通信協(xié)議規(guī)定,報文中的位流按照非歸零(Non-Return to Zero)碼的方法編碼,一個完整的電平要么是顯性,要么是隱性。
8.非歸零編碼(Non-Return to Zero encoding,簡稱 NRZ)
非歸零編碼是一種用在低速通信接口中的編碼方式,同時提供同步和非同步兩種方式。在非歸零編碼方式中,邏輯“1”在傳輸過程中用一位高電平表示,邏輯“0”用一位低電平表示。非歸零編碼方式如圖 2 所示。
圖 2 非歸零編碼方式
9.總線數(shù)值
在數(shù)據(jù)傳輸時,CAN 總線有兩種邏輯值:顯性值(dominant)和隱性值(recessive)。如果同時傳輸顯性值和隱性值時,總線上的最終結(jié)果是顯性值。在線與(wired-AND)總線連接方式中,顯性值用邏輯“0”表示,隱性值用邏輯“1”表示。
1.3報文的數(shù)據(jù)結(jié)構(gòu)
CAN 總線的報文傳輸是通過 4 種不同類型的幀(Frame)來表示和控制的:
? 數(shù)據(jù)幀(Data Frame) 用來在數(shù)據(jù)傳輸過程中攜帶數(shù)據(jù)。
? 遠程幀(Remoter Frame) 接收器發(fā)送遠程幀來請求發(fā)送器發(fā)送數(shù)據(jù),具有和數(shù)據(jù)幀同樣的標識符。
? 出錯幀(Error Frame) 用來檢測 CAN 總線數(shù)據(jù)傳輸過程中的錯誤。
? 超載幀(Overload Frame) 用于提供當前和后續(xù)數(shù)據(jù)幀或遠程幀之間的附加延遲。
a.數(shù)據(jù)幀
數(shù)據(jù)幀的具體組成如圖 3 所示。
圖 3 數(shù)據(jù)幀的具體組成
數(shù)據(jù)幀由幀起始(Start of Frame,SOF)、仲裁字段、控制字段、數(shù)據(jù)字段、CRC 字段、ACK 字段(應(yīng)答字段)和幀尾組成。
幀起始標志數(shù)據(jù)幀的開始(遠程幀同樣具有幀起始),它僅由一個顯性值組成。只有在總線處于空閑時,才允許節(jié)點開始發(fā)送。所有節(jié)點必須與首先開始發(fā)送的那個節(jié)點的幀起始位前沿同步。
仲裁字段由標識符和遠程發(fā)送請求位(RTR 位)組成,如圖 4 所示。標識符的長度為 11位。遠程發(fā)送請求位在數(shù)據(jù)幀中必須是顯性值,在遠程幀中必須是隱性值。
圖 4 仲裁字段的組成
控制字段由保留位和數(shù)據(jù)長度碼組成,如圖 5 所示。數(shù)據(jù)長度碼表示數(shù)據(jù)字段的長度。
圖 5 控制字段的組成
數(shù)據(jù)字段由數(shù)據(jù)幀中被發(fā)送的數(shù)據(jù)組成,它可以包括 0~8 個字節(jié),每個字節(jié) 8 位。首先發(fā)送的是最高有效位。
CRC 字段包括 CRC 序列和 CRC 界定符。CRC 序列用來實現(xiàn) CRC 計算,CRC 界定符只包括一個隱性值。應(yīng)答字段為兩位,包括應(yīng)答間隙和應(yīng)答界定符。幀尾由 7 個連續(xù)的隱性值組成,作為數(shù)據(jù)幀和遠程幀的結(jié)束標志。
b.遠程幀
作為接收器的節(jié)點可以通過向相應(yīng)的數(shù)據(jù)源節(jié)點發(fā)送一個遠程幀來激活該節(jié)點,讓它把數(shù)據(jù)發(fā)送給接收器。遠程幀由幀起始、仲裁字段、控制字段、CRC 字段、應(yīng)答字段和幀尾 6 個不同的字段組成。遠程幀的組成如圖 6 所示。
圖 6 遠程幀的組成
c.出錯幀
出錯幀由出錯疊加標志和錯誤界定符組成。出錯疊加標志包括了多個出錯信息的標志。
d.超載幀
超載幀包括超載標志和超載界定符。超載發(fā)生在兩種情況下:一個是接收器因內(nèi)部條件要求推遲下一個數(shù)據(jù)幀或者遠程幀的發(fā)送;另一個是在間歇字段檢測到顯性值時。
e.幀間空間
數(shù)據(jù)幀或遠程幀通過幀間空間與前一幀隔開,而不管前一幀是何種類型的幀。而在超載幀與出錯幀前面不需要幀間空間,多個超載幀之間也不需要幀間空間來作分隔。
1.4位時序(Bit Timing)
CAN 總線協(xié)議規(guī)定,報文傳輸?shù)耐交蛘叻峭椒绞降倪x擇通過位時序來實現(xiàn)。CAN 總線中位時序包括正常位速率和正常位時間兩個參數(shù)。
? 正常位速率(Nominal Bit Rate):在非重同步情況下,借助理想發(fā)送器每秒發(fā)送的位數(shù)。
? 正常位時間(Nominal Bit Time):正常位速率的倒數(shù)。正常位時間由幾個不同的時間段組成,它們是同步段(SYNC_SEG)、傳播段(PROP_SEG)、相位緩沖段 1(PHASE_SEG1)、相位緩沖段 2(PHASE_SEG2),如圖 7 所示。
圖 7 正常位時間的組成
? 同步段:在這段時間內(nèi),完成總線上各個節(jié)點的同步,需要一個跳變沿。
? 傳播段:這個時間段是指網(wǎng)絡(luò)上傳輸?shù)难舆t時間,它是信號在總線上傳播時間、輸入比較器延遲和輸出驅(qū)動器延遲之和的兩倍。
? 相位緩沖段 1 和相位緩沖段 2:它們用于彌補跳變沿的相位誤差造成的影響。通過重同步,這兩個時間段可以被延長或縮短。
? 采樣點:這是讀取總線電平并理解該位數(shù)值的時刻,它位于相位緩沖段 1 的終點。
1.5同步(Synchronization)
a.硬同步(Hard Synchronization)
硬同步后,內(nèi)部位時間從同步段(SYNC_SEG)重新開始,它迫使觸發(fā)該硬同步的跳變沿處于新的位時間的同步段(SYNC_SEG)之內(nèi)。
b.重同步(Resynchronization)
當引起重同步沿的相位誤差小于或等于重同步跳轉(zhuǎn)寬度編程值時,重同步的作用和硬同步相同。若相位誤差大于重同步跳轉(zhuǎn)寬度且相位誤差為正時,則相位緩沖段 1(PHASE_SEG1)延長總數(shù)為重同步跳轉(zhuǎn)寬度。若相位誤差大于重同步跳轉(zhuǎn)寬度且相位誤差為負時,則相位緩沖段2(PHASE_SEG2)縮短總數(shù)為重同步跳轉(zhuǎn)寬度。
c.重同步跳轉(zhuǎn)寬度(Resynchronization Jump Width)
由于重同步的結(jié)果,PHASE_SEG1 可被延長或 PHASE_SEG2 可被縮短。相位緩沖段長度的改變量不應(yīng)大于重同步跳轉(zhuǎn)寬度。
d.同步的規(guī)則CAN
通信協(xié)議規(guī)定,同步包括硬同步和重同步兩種形式。它們遵從下列幾條規(guī)則:
在一個位時間內(nèi)僅允許一種同步。
對于一個跳變沿,僅當它前面的第一個采樣點數(shù)值與緊跟該跳變沿之后的總線值不相同時,才把該跳變沿用于同步。
在總線空閑期間,若出現(xiàn)一個從隱性值到顯性值的跳變沿,則執(zhí)行一次硬同步。
符合規(guī)則前兩條規(guī)則的從隱性值到顯性值的跳變沿都被用于重同步(在低比特率時也可選擇從顯性值到隱性值的跳變沿),例外的情況是具有正相位誤差的隱性值到顯性值的跳變沿將不會導(dǎo)致重同步。
二、CAN 通信控制器程序基本框架
CAN 總線的通信協(xié)議由 CAN 通信控制器完成。CAN 通信控制器由實現(xiàn) CAN 總線協(xié)議部分和微控制器部分的電路組成。下面將通過一個實例講解如何用 FPGA 實現(xiàn) CAN 通信控制器的功能。這個實例從功能和結(jié)構(gòu)上完全參照 SJA 1000 CAN 通信控制器。
2.1 SJA1000CAN 通信控制器
SJA1000 是 Philips 公司于 1997 年推出的一種獨立 CAN 總線控制器。它實現(xiàn)了 CAN 總線物理層和數(shù)據(jù)鏈路層的所有功能。SJA 1000 通信控制器的功能框圖如圖 8 所示。
SJA 1000 主要由以下幾部分構(gòu)成:
? 接口管理邏輯 處理來自主 CPU 的命令,控制 CAN 寄存器的尋址,并為主 CPU 提供中斷和狀態(tài)信息。
? 發(fā)送緩沖器 它是 CPU 和位數(shù)據(jù)流處理器(BSP)之間的接口,能存儲一條可發(fā)送到 CAN總線上的完整報文。報文由 CPU 寫入,由位數(shù)據(jù)流處理器讀出。
圖 8 SJA1000 通信控制器功能框圖
? 接收緩沖器 它是接收 FIFO 的一個可被 CPU 訪問的窗口。在接收 FIFO 的支持下,CPU可以在處理當前信息的同時接收總線上的其他信息。
? 接收濾波器 它把收到的報文標識符和接收濾波器寄存器中的內(nèi)容進行比較,以判斷該報文是否應(yīng)該被接收。如果符合接收條件,則報文被存入接收 FIFO 中。
? 位數(shù)據(jù)流處理器 它是一個序列發(fā)生器,控制發(fā)送緩沖器、接收 FIFO 和 CAN 總線之間的數(shù)據(jù)流,同時它也執(zhí)行錯誤檢測、仲裁、位填充和 CAN 總線錯誤處理功能。
? 位時序邏輯 它監(jiān)視串行 CAN 總線并處理與總線相關(guān)的位時序。它在報文開始發(fā)送,總線電平從隱性值跳變到顯性值時同步于 CAN 總線上的位數(shù)據(jù)流(硬同步),并在該報文的傳送過程中,每遇到一次從隱性值到顯性值的跳變沿就進行一次重同步(軟同步)。位時序邏輯還提供可編程的時間段來補償傳播延遲時間和相位漂移(如晶振導(dǎo)致的漂移),還能定義采樣點以及每一個位時間內(nèi)的采樣次數(shù)。
? 錯誤管理邏輯 它按照 CAN 協(xié)議完成傳輸錯誤界定。它接收來自位數(shù)據(jù)流處理器 BSP 的出錯通知,并向位數(shù)據(jù)流處理器 BSP 和接口管理邏輯提供出錯統(tǒng)計。
2.2 CAN 通信控制器程序框架
實現(xiàn)的 CAN 通信控制器參照 SJA1000 CAN 通信控制器的結(jié)構(gòu),程序基本框架如圖 9 所示。
圖 9 CAN 通信控制器結(jié)構(gòu)框圖
本篇到此結(jié)束,下一篇帶來基于FPGA的CAN總線控制器的設(shè)計(中),會介紹CAN 通信控制器的具體實現(xiàn),包括頂層控制程序、寄存器控制、位時序邏輯(Bit Timing Logic)、位數(shù)據(jù)流處理器(BitStream Processor)、CRC 校驗 、FIFO等相關(guān)內(nèi)容。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602977 -
控制器
+關(guān)注
關(guān)注
112文章
16332瀏覽量
177803 -
CAN總線
+關(guān)注
關(guān)注
145文章
1946瀏覽量
130726 -
CAN
+關(guān)注
關(guān)注
57文章
2744瀏覽量
463612 -
局域網(wǎng)
+關(guān)注
關(guān)注
5文章
751瀏覽量
46277
原文標題:基于FPGA的CAN總線控制器的設(shè)計
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論