~~~CAN概述~~~
CAN,全稱為“Controller Area Network”,CAN總線是控制器局域網(wǎng)總網(wǎng),,由德國博世公司研發(fā)出來的IOS國際標(biāo)準(zhǔn)化串行通信協(xié)議總線,,是一種分布式實時控制的串行網(wǎng)絡(luò),用于在不同的ECU下傳輸數(shù)據(jù),是國際應(yīng)用最廣的現(xiàn)場總線之一,。 2.CAN總線標(biāo)準(zhǔn)CAN總線標(biāo)準(zhǔn)規(guī)定數(shù)據(jù)鏈路層和物理層,,應(yīng)用層需要用戶定義,不同場景使用的不同的應(yīng)用層標(biāo)準(zhǔn),,例如物理層和數(shù)據(jù)鏈路層使用ISO 11898 協(xié)議。 3.CAN網(wǎng)絡(luò)分層遵循IOS\OSIwnagl標(biāo)準(zhǔn)模型,,can規(guī)定了數(shù)據(jù)鏈路層和物理層,,數(shù)據(jù)鏈路層又分邏輯鏈路控制子層LLC和媒介訪問控制子層MAC,不同的can標(biāo)準(zhǔn)僅物理層不同,。 4.CAN協(xié)議CAN有兩個ISO國際通信協(xié)議 : ISO11519:定義了通信速率10~125kbps的低速can通信標(biāo)準(zhǔn),,屬于開環(huán)總線,傳輸速度為40kbps時,總線長度可達(dá)1000米 ,。低速can用于車身控制系統(tǒng)等要求高的場景,,低速can在斷掉任一線路時還可以繼續(xù)接收數(shù)據(jù) 。 ISO11898:定義了通信速率為125kbps~1mbps的高速can通信標(biāo)準(zhǔn),,屬于閉環(huán)總線,,最高可達(dá)1mbps,總線長度<40米 ,。高速can用于發(fā)動機(jī) 變速箱等要求實時性 傳輸效率高場景,。 5.CAN應(yīng)用層CAN總線只提供可靠的傳輸服務(wù),所以節(jié)點接收報文時,,要通過應(yīng)用層協(xié)議來判斷是誰發(fā)送的數(shù)據(jù),,數(shù)據(jù)代表什么含義。 CAN應(yīng)用層協(xié)議驅(qū)動是運行在主控制器上的程序,,它按照應(yīng)用層協(xié)議對CAN報文進(jìn)行定義,,完成報文的解析和拼裝,例如:將幀ID當(dāng)作節(jié)點地址,,當(dāng)接收到的幀ID與自身節(jié)點ID不通過時,,就直接丟棄或交給上層處理。 6.ISO11898與ISO11519物理層不同點7.CAN電壓CAN總線上通過CAN_H和CAN_L兩條線的電位差來表示can信號,,can總線上兩種電位差分別為顯性電平邏輯0和隱性電平邏輯1,,顯性電平優(yōu)先級高于隱性電平,can控制器將cpu傳來的信號轉(zhuǎn)為邏輯電平,,can發(fā)射器將接收到的邏輯電平轉(zhuǎn)化成差分電發(fā)送到can總線上,。 8.CAN差分信號9.開環(huán)總網(wǎng)絡(luò)/閉環(huán)總網(wǎng)絡(luò) 來自CSDN 來自CSDN 10.CAN的優(yōu)點傳輸速度:傳輸最高速度可達(dá)1mbps,最遠(yuǎn)1000米,,無損位仲裁機(jī)制,,多主結(jié)構(gòu) 低成本:ECUs通過單個CAN接口通信,布線成本低 高集成:CAN總線系統(tǒng)允許在所有ECUs上進(jìn)行集中診斷和配置 可靠性:該系統(tǒng)對子系統(tǒng)故障和電磁干擾有很強(qiáng)的魯棒性,,是汽車控制系統(tǒng)的理想選擇 高效率:可以對信息ID進(jìn)行優(yōu)先排序,,以便最高等級的的信息不被中斷 靈活性:每個ECU包含一個用于can信號收發(fā)芯片,隨意添加can節(jié)點 11.CAN的特點多主控制:總線空閑時ECU都可以發(fā)送信號,,兩個以上單位同時發(fā)送信號時以標(biāo)識符(ID)決定優(yōu)先級 ,。 系統(tǒng)柔軟性:連接總線的單元沒有“地址”信息,所以添加新的單元時,,其他的已連接的單元軟硬件和應(yīng)用層都不需要做出改變 具有錯誤檢測,,錯誤通知,錯誤恢復(fù)功能:所有單元都可以檢測錯誤(錯誤檢測功能),,檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能),,正在發(fā)送消息的單元一旦檢測出錯誤,會強(qiáng)制結(jié)束當(dāng)前的發(fā)送。強(qiáng)制結(jié)束發(fā)送的單元會不斷反復(fù)地重新發(fā)送此消息直到成功發(fā)送為止(錯誤恢復(fù)功能),。 故障封閉功能:CAN可以判斷出錯誤的類型是總線上暫時的數(shù)據(jù)錯誤(如外部噪聲等)還是持續(xù)的數(shù)據(jù)錯誤(如單元內(nèi)部故障,、驅(qū)動器故障、斷線等),。由此功能,,當(dāng)總線上發(fā)生持續(xù)數(shù)據(jù)錯誤時,可將引起此故障的單元從總線上隔離出去,。 ~~~CAN通訊詳解~~~ 1.CAN的通訊流程CAN通訊是一種基于信號的通信,,信號的發(fā)送一般是基于事件和周期的屬性,CAN信號發(fā)送可以一對一,,也可以一對多,,采用廣播形式,也就一條總線上一個節(jié)點發(fā)送的信號會被其他節(jié)點接收到,,所以一條can總線上不允許多個ECU發(fā)送相同的CANID,,避免總線沖突。 來自CSDN 2.CAN通信網(wǎng)絡(luò)結(jié)構(gòu)實際上,,CAN總線網(wǎng)絡(luò)底層只采用了OSI基本參照模型中的數(shù)據(jù)鏈路層,、傳輸層。 3.CAN通訊載體常見CAN總線是由帶屏蔽層的雙絞線,、收發(fā)器,、控制器和終端電阻組成的。 4.CAN的通訊節(jié)點can通訊節(jié)點是由一個can控制器和can收發(fā)器組成,,控制器與收發(fā)器之間通過can-Tx和can-Rx信號相連接,,收發(fā)器與can總線之間用can-low和can-high信號線相連,其中can-tx和can-rx使用的普通類似ttl巡邏信號,,而can-high和can-low是一對差分信號線,,使用比較特別差分信號 。 TTL:晶體管_晶體管邏輯電平,,TTL信號電平規(guī)定,, 5V等價于邏輯1,0V等價于邏輯0,,這樣的數(shù)據(jù)通信及電平規(guī)定方式,,被稱為TTL。 5.CAN節(jié)點CAN收發(fā)器是實現(xiàn)CAN控制器邏輯電平和CAN總線差分電平的互換,,實現(xiàn)CAN收發(fā)器的方案有兩種: 一是使用CAN收發(fā)IC(需要加電源隔離和電氣隔離) 二是使用CAN隔離收發(fā)模塊 CAN控制器是CAN的核心元件,,它實現(xiàn)了CAN協(xié)議中數(shù)據(jù)鏈路層的全部功能,能夠自動完成CAN協(xié)議的解析,,CAN控制器一般有兩種 一是控制器IC(SJA1000)二是集成CAN控制器的MCU(LPC11C00) ,。 MCU負(fù)責(zé)實現(xiàn)對功能電路和CAN控制器的控制,在節(jié)點啟動時初始化CAN控制器參數(shù),;通過CAN控制器讀取和發(fā)送CAN幀,;在CAN控制器發(fā)生中斷時,處理CAN控制器的中斷異常,;根據(jù)接收到的數(shù)據(jù)輸出控制信號,。 6.CAN節(jié)點構(gòu)建構(gòu)建節(jié)點,實現(xiàn)相應(yīng)控制,,由下而上分為4部分,,: CAN節(jié)點電路 CAN控制器驅(qū)動 CAN應(yīng)用層協(xié)議 CAN節(jié)點應(yīng)用程序 雖然不同節(jié)點完成的功能不同,但是都有相同的硬件和軟件架構(gòu),。 CAN的收發(fā)器和控制器分別對應(yīng)CAN的物理層和數(shù)據(jù)鏈路層,,完成CAN報文的收發(fā) 功能電路完成特定的功能,如信號采集或控制外設(shè)等 主控制器與應(yīng)用程序按照CAN報文格式解析報文,,完成相應(yīng)控制CAN硬件驅(qū)動是運行在主控制器上的序,,它主要完成以下工作: 基于寄存器的操作、初始化 CAN控制器,、發(fā)送CAN報文,、接收CAN報文 如果直接使用CAN硬件驅(qū)動,當(dāng)更換控制器時,,需要修改上層應(yīng)用程序,,移植性差,在應(yīng)用層和硬件驅(qū)動層加入虛擬驅(qū)動層,,能夠屏蔽不同CAN控制器的差異 ,。 一個CAN節(jié)點除了完成通信功能,還包括一些特定的硬件功能電路,,功能電路驅(qū)動向下直接控制功能電路,,向上為應(yīng)用層提供控制功能電路的函數(shù)接口,特定功能包括 數(shù)據(jù)采集,、人機(jī)顯示等,。 7.CAN控制器接口管理邏輯 解釋MCU指令,尋址CAN控制器中各功能模塊的寄存器單元,,向主控制器提供中斷信息和狀態(tài)信息 ,。 發(fā)送緩沖區(qū)和接收緩沖區(qū)都可以儲存CAN總線網(wǎng)絡(luò)的完整信息 驗收濾波是將儲存的驗證碼與CAN報文的識別碼比較,跟驗證碼符合的CAN幀才會儲存到接收緩沖區(qū) CAN內(nèi)核實現(xiàn)數(shù)據(jù)鏈路的全部協(xié)議,。 ~~~CAN報文發(fā)送流程~~~1.報文發(fā)送節(jié)點發(fā)送要檢測到總線空閑狀態(tài)(連續(xù)11位隱性) ,。 只有總線空閑時節(jié)點才能發(fā)送報文 在發(fā)送過程中進(jìn)行回讀,判斷發(fā)出的位和回讀的位是否一致,。 2.報文仲裁線與機(jī)制 通過ID進(jìn)行制裁 顯性位能夠覆蓋隱性位,,報文ID值越小,,優(yōu)先等級越高。 報文同時發(fā)送時才啟動仲裁機(jī)制 3.仲裁處理非破壞性仲裁 退出仲裁后進(jìn)入接收狀態(tài) ,。 總線空閑時重新發(fā)送 4.報文接收和過濾通過濾波器對接收的報文進(jìn)行過濾 ,。 相關(guān)就接收,不相關(guān)就過濾,。 ~~~CAN幀解析~~~
數(shù)據(jù)幀:用于發(fā)送單元向接收單元傳送數(shù)據(jù)的楨 遙控幀:用于接收單元向相同ID單元發(fā)送請求的楨 錯誤幀:用于當(dāng)檢測出錯誤時向其他單元通知錯誤的楨 過載幀:用于接收單元通知其尚未做好準(zhǔn)備的楨 幀間隔:用于將數(shù)據(jù)楨和遠(yuǎn)程楨與前面楨隔開的楨 2.CAN數(shù)據(jù)幀格式來自CSDN 一,、幀起始(SOF)楨最開始就是起始幀,也叫(SOF),。 SOF恒定為顯性(1bit),。 來自CSDN 1.NRZ編碼與位填充NRZ(非歸零)編碼 確保報文緊湊,相同寬帶下信息量更大 ,。 不能保證足夠的跳變沿同步,,帶來節(jié)點間計時器誤差的累積。 2.CAN的波特率及位同步由于can屬于異步通信,,沒有時鐘信號線,,連接在同一個總線網(wǎng)絡(luò)中的各個節(jié)點會像串口異步通訊那樣,節(jié)點間使用約定好的波特率進(jìn)行通訊,,特別的 CAN 還會使用“位同步”的方式來抗干擾,、吸收誤差,實現(xiàn)對總線電平信號進(jìn)行正確的采樣,,確保通訊正常,。 (1)位時序分解為了實現(xiàn)位同步,CAN 協(xié)議把每一個數(shù)據(jù)位的時序分解成如圖 所示的 SS 段,、PTS 段,、PBS1 段、PBS2 段,,這四段的長度加起來即為一個 CAN 數(shù)據(jù)位的長度,。分解后最小的時間單位是 Tq,而一個完整的位由 8~25 個 Tq 組成,,總線上的各個通訊節(jié)點只要約定好 1 個 Tq 的時間長度以及每一個數(shù)據(jù)位占據(jù)多少個 Tq,,就可以確定 CAN 通訊的波特率。 (2)CAN的同步機(jī)制一個位時間內(nèi)只允許一種同步方式 任何一個從隱性到顯性的下降沿都可以用來同步 硬同步發(fā)生在報文SOF位,,所有接收節(jié)點調(diào)整自己當(dāng)前位的同步段 重同步發(fā)生在一個報文SOF位之外的其他段,,當(dāng)下降沿在同步段之外時發(fā)生重同步 從SOF到?jīng)_裁場發(fā)送時間段內(nèi),如果有多個節(jié)點同時發(fā)送報文,,那么這些節(jié)點對跳變沿不發(fā)生重同步,。 (3)硬件同步接收單元在總線空閑時檢測出幀起始時進(jìn)行的同步調(diào)整 。 在檢測出邊沿的地方不考慮SJW值,,而認(rèn)為SS段,。 (4)再同步在接收過程中檢測總線電平發(fā)生變化時進(jìn)行同步調(diào)整 當(dāng)檢測出邊沿時,,根據(jù)SJW值通過加長PBS1段或縮短PBS2段進(jìn)行同步,,但如果發(fā)生超出SJW值的誤差時,,最大調(diào)整量不能超過SJW值。 來自CSDN 二,、仲裁段仲裁段是用來判斷一幀報文的優(yōu)先等級(包含報文源地址和目標(biāo)地址),。 數(shù)據(jù)仲裁段RTR恒定為顯性,遠(yuǎn)程幀恒定為隱性(標(biāo)準(zhǔn)幀11位bit,,拓展幀29位bit,。 仲裁場SSR與標(biāo)準(zhǔn)幀同一位置,故名遠(yuǎn)程代替請求位 SRR為隱性1,,確保標(biāo)準(zhǔn)幀收發(fā)高于拓展幀優(yōu)先級,。 仲裁場IDE位,標(biāo)準(zhǔn)幀中的IDE對應(yīng)拓展幀中的IDE,,確保前11位ID相同下,,數(shù)據(jù)幀優(yōu)先于拓展幀 區(qū)分標(biāo)準(zhǔn)幀和拓展幀 。 標(biāo)準(zhǔn)楨為顯性0(11位ID) 拓展楨為隱性1(29位ID),。 三,、控制段保留位r0,r1發(fā)送時必須是顯性,,接受方可以是顯性和隱性任意組合 最后4個字節(jié)的DLC代表數(shù)據(jù)長度,,指示了數(shù)據(jù)楨中的數(shù)據(jù)長度,對于沒有數(shù)據(jù)段的遙控幀,,DLC表示該遙控幀對應(yīng)的數(shù)據(jù)幀的數(shù)據(jù)段的字節(jié)數(shù),。 四、數(shù)據(jù)段數(shù)據(jù)段為數(shù)據(jù)幀的核心內(nèi)容,,它是節(jié)點要發(fā)送的原始信息,,由 0~8 個字節(jié)組成,MSB 先行,。 五,、校驗場(CRC)CRC段包含了CRC校驗序列(15位)和CRC界定符1(隱性)。 六,、應(yīng)答場(ACK)發(fā)送節(jié)點在ack段發(fā)送2個隱性位,,即發(fā)送方發(fā)送報文ack槽為隱性 。 接受節(jié)點在接收到正確信息后在ack槽發(fā)送顯性,,通知發(fā)送節(jié)點正常接收,。 七、幀結(jié)束(EOF)固定格式,,連續(xù)7個隱性單位,,表示數(shù)據(jù)楨結(jié)束,。 八、ITM間歇場固定格式 :3個連續(xù)的隱性位 ITM后進(jìn)入總線空閑狀態(tài),,此時節(jié)點可以收發(fā)報文,。 3.遙控幀來自CSDN 來自CSDN 4.錯誤幀在發(fā)送和接收報文時,總線上的節(jié)點如果檢測出了錯誤,,那么該節(jié)點就會發(fā)送錯誤幀錯誤一共有5種,,多種錯誤可能同時發(fā)生: 位錯誤 填充錯誤 CRC錯誤 格式錯誤 ACK錯誤。 (1).錯誤幀的輸出檢測出滿足錯誤條件的單元輸出錯誤標(biāo)志通報錯誤,。 處于主動錯誤狀態(tài)的單元輸出的錯誤標(biāo)志為主動錯誤標(biāo)志,;處于被動錯誤狀態(tài)的單元輸出的錯誤標(biāo)志為被動錯誤標(biāo)志。 發(fā)送單元發(fā)送完錯誤幀后,,將再次發(fā)送數(shù)據(jù)幀或遙控幀,、 來自CSDN (2).節(jié)點狀態(tài)節(jié)點始終處于3種狀態(tài):
不能收發(fā)任何報文
能夠進(jìn)行總線通信 錯誤產(chǎn)生時發(fā)送被動錯誤標(biāo)志(6個連續(xù)隱性位) 限制(不能連續(xù)發(fā)送2次報文)
正常進(jìn)行總線通信,錯誤產(chǎn)生時發(fā)送主動錯誤標(biāo)志(6個連續(xù)顯性位) 5.過載幀6.幀間隔~~~CAN網(wǎng)絡(luò)負(fù)載率~~~1.CAN網(wǎng)絡(luò)負(fù)載率CAN負(fù)載率概念CAN總線負(fù)載率是指在CAN總線上單位時間內(nèi)實際傳送的位數(shù)和可以傳送的位數(shù)之比,。 2.標(biāo)準(zhǔn)CAN負(fù)載率計算幀起始(1bit),、仲裁域(12bit)、控制域(6bit),、數(shù)據(jù)域(8×8bit),、循環(huán)冗余碼域(15bit)、應(yīng)答域(2bit),、1(bit)分隔符和幀結(jié)尾(7bit),,共108位,但實際發(fā)送一幀報文長度應(yīng)該在111左右,。 3.拓展幀負(fù)載率計算幀起始(1bit),、仲裁域(29bit)、控制域(6bit),、數(shù)據(jù)域(8×8bit),、循環(huán)冗余碼域(15bit)、應(yīng)答域(2bit)和幀結(jié)尾(7bit),,共124位,,但實際發(fā)送一幀報文長度應(yīng)該在128左右。
|
|