)
介紹CAN總線Controller Area Network Bus控制器局域網(wǎng)總線。CAN總線構(gòu)建的是一種局域網(wǎng)網(wǎng)絡(luò)每一個掛載在CAN總線的設(shè)備都可以利用這個局域網(wǎng)去發(fā)送自己的消息也可以接收局域網(wǎng)的各種消息每個設(shè)備都是平等的都在共享這個局域網(wǎng)的通信資源。不存在什么主從關(guān)系。CAN總線是由BOSCH公司開發(fā)的一種簡潔易用、傳輸速度快、易擴(kuò)展、可靠性高的串行通信總線廣泛應(yīng)用于汽車、嵌入式、工業(yè)控制等領(lǐng)域。can總線特征兩根通信線CAN_H、CAN_L線路少無需共地差分信號通信抗干擾能力強(qiáng)若線路產(chǎn)生干擾則一般兩根線的電壓都會同時出現(xiàn)波動但是兩根線的電壓差值仍然是不變的所以用電壓差值來傳遞數(shù)據(jù)可以極大的避免干擾高速CANISO11898125k~1Mbps, 傳輸距離40 m本課程側(cè)重學(xué)習(xí)的是高速CAN低速CANISO1151910k~125kbps, 傳輸距離1 km異步無需時鐘線通信速率由設(shè)備各自約定半雙工不可以同時發(fā)送和接收可掛載多設(shè)備多設(shè)備同時發(fā)送數(shù)據(jù)時通過仲裁判斷先后順序11位/29位報文ID用于區(qū)分消息功能同時決定優(yōu)先級高速can:低速can:差分信號can_High和can_Low走的是一對差分信號傳統(tǒng)的單端信號傳輸一根信號線和一根地線差分傳輸是一種信號傳輸?shù)募夹g(shù)差分傳輸在這兩根線上都傳輸信號這兩個信號的振幅相同相位相反信號接收端比較這兩個電壓的差值來判斷發(fā)送端發(fā)送的邏輯狀態(tài)。在電路板上差分走線必須是等長、等寬、緊密靠近、且在同一層面的兩根線。優(yōu)點(diǎn)抗干擾能力強(qiáng)干擾噪聲一般會等值、同時的被加載到兩根信號線上而其差值為0即噪聲對信號的邏輯意義不產(chǎn)生影響。差分走線必須是等長、等寬、緊密靠近就是為了讓外界干擾同等的附加在這兩根線上最后的差值為0缺點(diǎn)差分信號一定要走兩根等長、等寬、緊密靠近、且在同一層面的線。對電路板比較小走線比較緊張的情況下給布線帶來挑戰(zhàn)。can差分信號的邏輯電平高速can邏輯1隱性電平can_High can_Low 2.5V標(biāo)準(zhǔn)電壓差為-0.5 0.05之間邏輯0顯性電平can_High - can_Low 2.0V標(biāo)準(zhǔn)電壓差為1.5 3.0之間低速can邏輯1隱性can_High - can_Low -1.5標(biāo)準(zhǔn)電壓差為-0.3 ∞邏輯0顯性can_High - can_Low 3.0標(biāo)準(zhǔn)電壓差為0.3 ∞can總線協(xié)議幀can總線的報文種類CAN總線是廣播類型的總線。這意味著所有節(jié)點(diǎn)都可以偵聽到所有傳輸?shù)膱笪?。無法將報文單獨(dú)發(fā)送給指定節(jié)點(diǎn)所有節(jié)點(diǎn)都將始終捕獲所有報文。但是CAN硬件能夠提供本地過濾功能讓每個節(jié)點(diǎn)對報文有選擇性地做出響應(yīng)。這段話的意思是當(dāng)一個節(jié)點(diǎn)發(fā)送數(shù)據(jù)時所有的節(jié)點(diǎn)都能得知這個數(shù)據(jù)但是會有一個本地過濾功能讓指定的節(jié)點(diǎn)來接收數(shù)據(jù)。五中不同的報文類型數(shù)據(jù)幀數(shù)據(jù)幀是最常見的報文類型用于發(fā)送單元向接收單元發(fā)送數(shù)據(jù)。遠(yuǎn)程幀遙控幀遠(yuǎn)程幀用于接收單元向具有相同id的發(fā)送單元請求發(fā)送數(shù)據(jù)。不帶數(shù)據(jù)僅僅就是發(fā)送一個求數(shù)據(jù)的請求錯誤幀錯誤幀當(dāng)檢測出錯誤時向其他單元通知錯誤的幀。過載幀接收設(shè)備通知其尚未做好接收準(zhǔn)備過載幀并不常用因?yàn)楫?dāng)今的CAN控制器會非常智能化地避免使用過載幀幀間隔用于將數(shù)據(jù)幀及遙控幀與前面的幀分離開來的幀其中錯誤幀、過載幀、幀間隔都是由硬件自動完成的沒有辦法用軟件來控制。對于一般使用者來說只需要掌握數(shù)據(jù)幀與遙控幀。數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式與擴(kuò)展格式。標(biāo)準(zhǔn)格式有11位標(biāo)識符擴(kuò)展格式有29位標(biāo)識符。數(shù)據(jù)幀介紹標(biāo)準(zhǔn)幀幀起始1位總線空閑時發(fā)送總裁段標(biāo)識符位11位可以理解為節(jié)點(diǎn)ID高位在前遠(yuǎn)程發(fā)送請求位區(qū)分是數(shù)據(jù)幀還是遠(yuǎn)程幀顯性信號0代表數(shù)據(jù)幀控制段IDE位1位 區(qū)分標(biāo)準(zhǔn)格式還是拓展格式顯性電平代表標(biāo)準(zhǔn)格式R0位保留位以后使用DLC段4位 用于表示本報文中的數(shù)據(jù)有多少個字節(jié)。數(shù)據(jù)段64位。8個字節(jié)CRC段CRC校驗(yàn)碼15位 用于校驗(yàn)傳輸是否正確界定符隱性位表示CRC校驗(yàn)的結(jié)束同時釋放總線等待接收方拉低ACK段ACK確認(rèn)位發(fā)送方發(fā)送完之后接收方會將總線置顯性0表示接收到了信息。界定符隱性位用于跟后面的分開同時接收方釋放總線幀結(jié)束7個隱性位表示幀的結(jié)束拓展幀擴(kuò)展幀與標(biāo)準(zhǔn)幀的不同在于仲裁段和控制段其他完全一樣。遙控幀遙控幀就是發(fā)送一個請求沒有數(shù)據(jù)。錯誤幀總線上所有設(shè)備都會監(jiān)督總線的數(shù)據(jù)一旦發(fā)現(xiàn)“位錯誤”或“填充錯誤”或“CRC錯誤”或“格式錯誤”或“應(yīng)答錯誤” 這些設(shè)備便會發(fā)出錯誤幀來破壞數(shù)據(jù)同時終止當(dāng)前的發(fā)送設(shè)備錯誤幀分主動錯誤幀和被動錯誤幀主動錯誤幀是將總線拉低被動錯誤幀是將總線拉高根據(jù)線與的特性主動錯誤幀會破壞原有的數(shù)據(jù)被動錯誤幀不會破壞原有的數(shù)據(jù)。過載幀當(dāng)接收方收到大量數(shù)據(jù)而無法處理時其可以發(fā)出過載幀延緩發(fā)送方的數(shù)據(jù)發(fā)送以平衡總線負(fù)載避免數(shù)據(jù)丟失幀間隔幀間隔是在數(shù)據(jù)幀/遙控幀與前面的幀分開幀間隔也分主動錯誤與被動錯誤主動錯誤是上方的有三個幀間隔被動錯誤是下方的三個幀間隔后還有八個延遲傳送。位填充位填充規(guī)則發(fā)送方每發(fā)送5個相同電平后自動追加一個相反電平的填充位接收方檢測到填充位時會自動移除填充位恢復(fù)原始數(shù)據(jù)例如作用當(dāng)發(fā)送方發(fā)送一連串相同的電平時會對接收方的接受造成干擾將正常數(shù)據(jù)流與“錯誤幀”和“過載幀”區(qū)分開標(biāo)志“錯誤幀”和“過載幀”的特異性can總線仲裁CAN總線處于空閑狀態(tài)的時候最先發(fā)送消息的單元獲得發(fā)送權(quán)。多個單元同時開始發(fā)送時從仲裁段報文id的第一位開始進(jìn)行仲裁。連續(xù)輸出顯性電平最多的單元可以繼續(xù)發(fā)送即首先出現(xiàn)隱性電平的單元失去對總線的占有權(quán)變?yōu)榻邮铡?即報文id小的優(yōu)先級高)。因?yàn)槲覀兊闹俨枚问歉呶辉谇暗恼l先出現(xiàn)0誰的優(yōu)先級就高競爭失敗會自動檢測總線空閑在第一時間再次嘗試發(fā)送。can的位時序介紹位同步是為了解決時序同步的機(jī)制這里一幀包含了四位同步段的時間往往被看做是這一幀的時間單元后面三段的時間都需要是同步段時間的整數(shù)倍同步段ss的大小固定是1Tq若通訊節(jié)點(diǎn)檢測到總線上信號的跳變沿被包含在 SS段的范圍之內(nèi)則表示節(jié)點(diǎn)與總線的時序是同步的。這段看不懂不用管了傳播時間段CAN總線上數(shù)據(jù)的傳輸會受到各種物理延遲。比如發(fā)送單元的發(fā)送延遲、總線上信號的傳播延遲、接收單元的輸入延遲等。PTS段就是用來補(bǔ)償這些因素產(chǎn)生的時間延遲。這樣降低波特率來實(shí)現(xiàn)穩(wěn)定的功能相位緩沖段1主要是來補(bǔ)償邊沿階段的誤差。它的時間長度在重新同步階段的時候可以被自動加長。PBS1段的初始大小可以為1~8Tq。相位緩沖段2另一個相位緩沖段也是用來補(bǔ)償邊沿階段誤差的他的時間長度在重新同步階段會被縮短。位同步CAN總線沒有時鐘線總線上的所有設(shè)備通過約定波特率的方式確定每一個數(shù)據(jù)位的時長發(fā)送方以約定的位時長每隔固定時間輸出一個數(shù)據(jù)位接收方以約定的位時長每隔固定時間采樣總線的電平輸入一個數(shù)據(jù)位理想狀態(tài)下接收方能依次采樣到發(fā)送方發(fā)出的每個數(shù)據(jù)位且采樣點(diǎn)位于數(shù)據(jù)位中心附近硬同步因?yàn)閏an總線沒有時鐘線他們傳輸數(shù)據(jù)是按照雙方約定好的波特率來實(shí)現(xiàn)的。當(dāng)發(fā)送方率先發(fā)送報文隨后接收方接收到SOF的下降沿后接收方會直接把自己的位時序周期撥動到ss的位置與發(fā)送方的時序保持一致??梢灶惐葹橛疫叺溺姳砻恳粫r刻所有的節(jié)點(diǎn)都必須指向同一位置。再同步我們的理想狀態(tài)下是接收方在數(shù)據(jù)中心采樣但是這只是一種理想的狀態(tài)我們難免會因?yàn)橐恍┯绊憣?dǎo)致我們的采樣點(diǎn)不在數(shù)據(jù)中心位所以我們有一個解決方法就是我們在一個跳變沿開始計時到采樣時刻如果時間短的話那就讓后面采樣慢一點(diǎn)。以此類推。仲裁不同時發(fā)這時設(shè)備1正在發(fā)送數(shù)據(jù)然后設(shè)備2檢測到有設(shè)備正在發(fā)送數(shù)據(jù)所以說設(shè)備2進(jìn)入等待狀態(tài)。等待下一次總線空閑總線空閑當(dāng)檢測到11位隱性電平時就認(rèn)為此時總線是空閑狀態(tài)。一旦有設(shè)備正在發(fā)數(shù)據(jù)總線就會變成活躍狀態(tài)必然不會出現(xiàn)11個隱性電平。同時發(fā)總線空閑時來了兩個設(shè)備來爭奪那么ID號小的優(yōu)先級高的先發(fā)送ID號大的優(yōu)先級低后發(fā)送。這里有兩個特點(diǎn)就是1.總線的線與特性2.回讀機(jī)制。因?yàn)檫@兩個特性正是硬件自身判斷ID號大小的關(guān)鍵。兩個設(shè)備同時來的設(shè)備1和設(shè)備2發(fā)送起始位都是顯性0將總線拉低他們分別回讀后發(fā)現(xiàn)與自身一樣就進(jìn)行下一位的判斷。隨后通過判斷前幾位兩個設(shè)備對總線的操作都是一樣的回讀也與自身一樣。直到紅色時刻。單元1發(fā)送隱性1拉高總線單元2發(fā)送顯性0拉低總線。因?yàn)榭偩€線與的特性所以總線呈現(xiàn)出拉低的狀態(tài)單元1回讀后發(fā)現(xiàn)與自身不一樣那他就放棄總線的爭奪等到下一次的總線空閑再去爭奪。錯誤類型錯誤共有5種 位錯誤、填充錯誤、CRC錯誤、格式錯誤、應(yīng)答錯誤當(dāng)這些發(fā)送單元和接收單元檢測到以上的錯誤是會產(chǎn)生錯誤通知。錯誤幀產(chǎn)生后這幀數(shù)據(jù)就會報廢。數(shù)據(jù)傳輸也會終止。等錯誤幀結(jié)束后總線就會回歸空閑。大家誰想發(fā)數(shù)據(jù)誰就開始一個新的幀??偩€上的每個設(shè)備都是一個獨(dú)立的檢察官。但是有一個新的問題如果有一個設(shè)備壞了那么他收到的數(shù)據(jù)不管是不是錯誤的他都會認(rèn)為是錯誤的就會一直發(fā)送錯誤幀干擾其他設(shè)備的運(yùn)行。所以就引出了錯誤狀態(tài)我們的設(shè)備狀態(tài)都被分為主動錯誤狀態(tài)和被動錯誤狀態(tài)主動錯誤狀態(tài)的設(shè)備檢測到錯誤就發(fā)送主動錯誤相反被動錯誤狀態(tài)的設(shè)備檢測到錯誤就發(fā)被動錯誤狀態(tài)。因?yàn)橹鲃渝e誤狀態(tài)能打斷總線上的數(shù)據(jù)所以當(dāng)一個設(shè)備發(fā)生主動錯誤狀態(tài)的次數(shù)越來越多時總線就會覺得這個設(shè)備會不會壞了就把他變成被動錯誤狀態(tài)。變成被動錯誤狀態(tài)后如果還頻繁產(chǎn)生錯誤就把他轉(zhuǎn)入總線關(guān)閉狀態(tài)不讓他參與通信。每個設(shè)備內(nèi)部會有一個TEC發(fā)送錯誤計數(shù)值和REC接收錯誤計數(shù)值的值TEC是設(shè)備作為發(fā)送方每次檢測到一個錯誤后會1成功發(fā)送一幀數(shù)據(jù)后會-1。相反REC也是當(dāng)設(shè)備作為接收方時檢測到一個錯誤REC就會1接收到一幀數(shù)據(jù)后會-1.設(shè)備在主動狀態(tài)下TEC或REC的值大于127后會被轉(zhuǎn)入被動錯誤狀態(tài)。被動錯誤狀態(tài)下TEC的值大于255后被轉(zhuǎn)入總線關(guān)閉狀態(tài)。STM32 can外設(shè)can基本結(jié)構(gòu)這里的CAN_TX和CAN_RX與我們芯片上的GPIO相連。當(dāng)接收到數(shù)據(jù)后我們的發(fā)送和接收控制器會自動根據(jù)過濾器的配置進(jìn)行過濾然后發(fā)送數(shù)據(jù)時我們可以通過發(fā)送和接受控制器來設(shè)置要發(fā)送的報文ID標(biāo)識符過濾器