《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > CAN總線教程

CAN總線教程

2015-05-08
關鍵詞: CAN總線 網絡 接收器

  為了CAN研究了不少,看了不少資料,現在我給大家總結一下
  先看看工作原理
  當CAN總線上的一個節點(站)發送數據時,它以報文的形式廣播給網絡中所有節點,對每個節點來說,無論數據是否是發給自己的,都對其接收。每組報文開頭的11位字符為標識符,定義了報文的優先級,這種報文格式成為面向內容的編制方案。同一系統中標識符是唯一的,不可能有兩個站發送具有相同標識符的報文,當幾個站同時競爭總線讀取時,這種配置十分重要。
  大體的工作原理我們搞清了,但是根本的協議我們還要花一番功夫。下面介紹一個重要的名詞,“顯性“和”隱性“
  在我看到的很多文章里,有很多顯性和隱性的地方,為此我頭痛不已,最終我把它們徹底弄明白了。
  首先CAN數據總線有兩條導線,一條是黃色的,一條是綠色的。分別是CAN_High線和CAN_Low線
  當靜止狀態時,這兩條導線上的電平一樣。這個電平稱為靜電平。大約為2.5伏。
  這個靜電平狀態就是隱形狀態,也稱隱性電平。也就是沒有任何干擾的時候的狀態稱為隱性狀態.當有信號修改時,CAN_High線上的電壓值變高了,一般來說會升高至少1V,而CAN_Low線上的電壓值會降低一個同樣值,也是1v,那么這時候。CAN_High就 是2.5v+1v=3.5v,它就處于激活狀態了。而CAN_Low降為2.5v-1v=1.5v。
  可以看看這個圖

QQ截圖20150508153931.png

  由此我們得到
  在隱性狀態下,CAN_High線與CAN_Low沒有電壓差,這樣我們看到沒有任何變化也就檢測不到信號。但是在顯性狀態時,改值最低為2V,我們就可以利用這種變化才傳輸數據了。所以出現了那些,那些幀中的場,那些場中的位,云云~~~~~~~~~~~
  在總線上通常邏輯1表示隱性。而0表示顯性。這些1啊,0啊,就可以利用起來為我們傳數據了。
  利用這種電壓差,我們可以接收信號。
  一般來說,控制單元通過收發器連接到CAN驅動總線上,這個收發器(顧名思義,可發送,可接收)內有一個接收器,該接收器是安裝在接收一側的差動信號放大器。然后,這個放大器很自然地就放大了CAN_High和CAN_Low線的電平差,然后傳到接收區。如下圖

QQ截圖20150508154151.png

QQ截圖20150508153946.png

  由上圖可知,當有電壓差,差動信號放大器放大傳輸,將相應的數據位任可為0。
  下面我們進入重點難點。報文
  所謂報文,就是CAN總線上要傳輸的數據報,為了安全,我們要給我們傳輸的數據報編碼定一下協議,這樣才能不容易出錯,所以出現了很多的幀,以及仲裁啊,CRC效驗。這些都是難點。
  識別符的概念。
  識別符顧名思義,就是為了區分不同報文的可以鑒別的好多字符位。有標準的,和擴展的。標準的是11位,擴展的是29位。他有一個功能就是可以提供優先級,也就是決定哪個報文優先被傳輸,報文標識符的值越小,報文具有越高的優先權。
  CAN的報文格式有兩種,不同之處其實就是識別符長度不同,具有11位識別符的幀稱為標準幀,而還有29位識別符的幀為擴展幀,CAN報文有以下4個不同的幀類型。分別是
  (1)                數據幀:數據幀將數據從發送器傳輸到接收器。
  (2)                遠程幀:總線節點發出遠程幀,請求發送具有同一標識符的數據幀
  (3)                錯誤幀:任何節點檢測到總線錯誤就發出錯誤幀
  (4)                過載幀:過載幀用已在先行的后續的數據幀(或遠程幀)之間提供一附加的延時
  我們先研究數據幀吧。
  一,數據幀由7個不同位場組成。
  這里的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。
  一開始是一位幀起始,也叫SOF。它用顯性位表示,也就是0.它告訴我們,兩個線上有電壓差了,也就是有數據了。這個幀起始看起來只有一位,起始不簡單了。為了讓所有的分站都同步于發送報文的發送站,好接收數據,有很多要考慮的地方。
  然后下一個場是仲裁場。這個仲裁場是個難點。但是不要怕,有我在,你會很明白地搞定的。
  這個仲裁很抽象,其實在這里就是為了解決一個問題。如果2個或2個以上的單元同時開始傳送報文,那么就會有總線訪問沖突。那么仲裁機制就是用來根據標識符優先級來一個一個的去掉低級別的數據。我們可以詳細的描述這場生動的爭搶總線的戰斗。
  當總線處于空閑狀態時呈隱性電平,此時任何節點都可以向總線發送顯性電平作為幀的開始。2個或2個以上的節點同時發送開始爭搶總線,但是總線只能被一個人搶走。總線只屬于一個他。這時候到底怎么決定誰留下,誰滾蛋呢。我們開始考慮,思索,我們以前定義了標識符,標識符有優先級,它越小,它優先級越高。那么怎么實現的呢。看下面把
  首先搞明白兩點,一 下面的圖 低波形代表0,高波形代表1 二 當隱性碰到顯性,就變為顯性。
  如圖所示,節點A和節點B的標識符的第lO、9、8位電平相同,因此兩個節點偵聽到的信息和它們發出的信息相同。第7位節點B發出一個“1”,但從節點上接收到的消息卻是“0”,為什么呢,因為A節點同時發出顯性位,讓總線也變成顯性了,也就是0。節點B會退出發送處于單純監聽方式而不發送數據;節點A成功發送仲裁位從而獲得總線的控制權,繼而發送全部消息。總線中的信號持續跟蹤最后獲得總線控制權發出的報文,本例中節點A的報文將被跟蹤。這種非破壞性位仲裁方法的優點在于,在網絡最終確定哪個節點被傳送前,報文的起始部分已經在網絡中傳輸了,因此具有高優先級的節點的數據傳輸沒有任何延時。在獲得總線控制權的節點發送數據過程中,其他節點成為報文的接收節點,并且不會在總線再次空閑之前發送報文

QQ截圖20150508153959.png

  在這逐位的比較中,最終節點B因為第七位的偏差丟掉了總線。從此單純監聽,江山就拱手讓給了節點A了。這就是仲裁機制
  這里我們涉及到總線值
  總線值
  總線有二個互補的邏輯值:“顯性”或“隱性”。“顯性”位和“隱性”位同時傳送時,總線的結果值為“顯性”。比如,在總線的“寫與”執行時,邏輯0代表“顯性”等級,邏輯1代表“隱性”等級。
  上面我們說過,報文有兩種格式,標準和擴展。這里,不同的格式仲裁場是不一樣的。標準格式下,仲裁場由11位識別符和RTR位組成。但在擴展格式里,包括29位識別符,SRR位,IDE位,RTR位。
  RTR位。Remote Tranmission Request BIT 全稱為 遠程發送請求位。它在數據幀里必須為顯性0 ,但在遠程幀里為隱性1。我暈,為什么這么搞呢,不急,先留著這個問題。
  SRR位,替代遠程請求位,SRR是一隱性位,也就是1,它在擴展格式的標準幀RTR位位置,那么標準幀怪不得優先于擴展幀了,因為在傳輸完11位標識符之后(擴展幀的后18位在最后發送,先發送11位標識符),輪到標準幀的RTR位和擴展幀的SRR位了。這時候,標準幀的RTR為顯性,而擴展幀SRR為隱性,這樣,總線自然就被標準幀占據。同時上面那個問題,也一目了然了,CAN總線協議設計者,肯定是設計了數據幀優先于遠程幀所以
  IDE 全稱識別符擴展位(Identifier Extension Bit),它屬于
  擴展格式的仲裁場
  標準格式的控制場
  標準格式的IDE位為顯性,擴展格式里IDE位為隱性。這樣擴展格式的數據幀優先級又落下了一截。
  控制場
  控制場有6位組成。標準的跟擴展的又不同。標準的格式里的幀先是IDE位
  ,然后保留位r0,然后數據長度代碼(共四位,分別是DLC3,DLC2,DLC1,DLC0)而擴展格式里,IDE替換為r1保留位,其余不變。
  數據長度代碼指示了數據場里的字節數量。
  數據場:
  數據場由發送數據組成,可以為0~8個字節,從高位開始(MSB)先發送。
  CRC場
  包括CRC序列,和CRC界定符。
  這個CRC序列又是一個難點,具體什么是CRC序列呢,
  CRC即循環冗余校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。
  生成CRC碼的基本原理:任意一個由二進制位串組成的代碼都可以和一個系數僅為‘0’和‘1’取值的多項式一一對應。例如:代碼1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的代碼101111。
  參考一下下面的例題.自已再領悟一下吧! 已知信息位為1100,生成多項式G(x) = x3+x+1,求CRC碼。 M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011 M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010 CRC碼為: M(x)*x 3+R(x)=1100000+010 =1100010 其原理是:CRC碼一般在k位信息位之后拼接r位校驗位生成。編碼步驟如下: (1)將待編碼的k位信息表示成多項式 M(x)。 (2)將 M(x)左移 r 位,得到 M(x)*xr 。 (3)用r+1位的生成多項式G(x)去除M(x)*xr 得到余數R(x)。 (4)將M(x)*xr 與R(x)作模2加,得到CRC碼。
  應答場
  應答場(ACK)長度為2個位,包含應答間隙和應答界定符,在ACK場里,發送站發送兩個隱性位。當接收器正確接收到有效地報文,接收器就會在應答間隙期間(發送ACK信號)向發送器發送一顯性位以示應答。
  二 遠程幀
  通過發送遠程幀,總線的節點發出遠程幀,請求以前發送給它數據幀的節點再發送一遍。具體發送哪個數據幀,由遠程幀的標識符決定。
  遠程幀的RTR是隱性的。沒有數據場,其余都與數據幀相同。
  三
  錯誤幀
  錯誤幀由兩個不同的場組成,第一個場是不同站提供的錯誤標志的疊加,第二個場是錯誤界定符。
  1 錯誤標志
  有兩種形式的錯誤標志,主動地和被動的。這就讓人很明白了。也就是說主動發出錯誤的節點發出錯誤幀時,就是主動地錯誤標志,而接收錯誤幀的節點,就發出被動錯誤標志。
  主動地錯誤標志由6個連續的顯性位組成。
  被動的錯誤標志由6個連續的隱形位組成,除非被其他節點的顯性位重寫。
  檢測到錯誤條件的錯誤激活的站通過發送主動錯誤標志指示錯誤。這個錯誤幀也可以看做有著跟數據幀類似的場結構,錯誤標志的形式顯然破壞了從幀起始到CRC界定符的位填充規則(檢測到5個相同的位,就插入一個補充位,但是錯誤幀卻有6個相同的位,顯然破壞了)。或者破壞了ACK場或幀結尾場的固定形式。所有其他的站由此檢測到錯誤條件。并于此同時發送錯誤標志。并且假如有很多站都有自己的錯誤發送,它們會都發送主動錯誤標志,這種顯性標志顯然被疊加在一起。
  (2)錯誤界定符
  錯誤界定符包括8個“隱性”的位。
  錯誤標志傳送了以后,每一個節點就發送一個“隱性”的位,并一直監視總線直到檢測出一個“隱性”的位為止,然后就開始發送其余7個“隱性”位。
  四 過載幀
  過載幀包括2個位場:過載標志和過載界定符
  有三種過載的情況,這三種情況都會引起過載標志的發送
  1接收器的內部情況(此接收器對于下一數據幀或遠程幀需要一定的延時)
  這種情況引發的過載幀只允許起始于所期望間歇的第一個位時間。
  2在間歇的第1和第2字節檢測到一個顯性位
  這里有個間歇的概念。我們可以講講。間歇屬于幀間空間的一部分。它包含三個隱性位。間歇期間,所有的站不允許傳送數據幀或遠程幀。它唯一要做的就是標示一個過載條件。
  3 如果CAN節點在錯誤界定符或過載界定符的第8位采樣到一個顯性位,
  有了上面的情況,則節點會發送一個過載幀。錯誤計數器不會增加。
  對于情況2,3引發的過載幀應起始于所檢測到顯性位之后的位。
  通常為了延時下一個數據幀或遠程幀,兩種過載幀均可產生。
  過載標志
  由6個顯性位組成。過載標志的所有形式和主動錯誤標志一樣。
  過載標志的形式破壞了間歇場的固定形式,因此,所有其他的站都檢測到過載條件并于此同時發出過載標志。
  過載界定符 8個隱形位
  幀間空間
  數據幀(或遠程幀)與先行幀的隔離是通過幀間空間實現的。無論此先行幀類型如何。所不同的是過載幀與錯誤幀之間沒有幀間空間。多個過載幀之間也不是由幀間空間隔離的。
  幀間空間包括間歇,總線空閑的位場。如果錯誤被動的站已作為前一報文的發送器,則其幀空間除了間歇,總線空閑外,還包括稱作掛起傳送的位場。

QQ截圖20150508154015.png

  (1)間歇(Intermission)
  間歇包括3個“隱性”的位。間歇期間,所有的節點均不允許傳送數據幀或遠程幀,唯一要做的是標示一個過載條件。
  如果CAN節點有一報文等待發送并且節點在間歇的第三位采集到一顯性位,則此位被解釋為幀的起始位,并從下一位開始發送報文的標識符首位,而不用首先發送幀的起始位或成為一接收器。
  (2)總線空閑(Bus Idle)
  總線空閑的時間是任意的。只要總線被認定為空閑,任何等待發送報文的節點就會訪問總線。在發送其他報文期間,有報文被掛起,對于這樣的報文,其傳送起始于間歇之后的第一個位。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 一本无线乱码不卡一二三四 | 夜色爽爽| 欧美成人亚洲欧美成人 | 在线免费观看色视频 | 日b毛片| 欧美香蕉视频 | 免费国产成人18在线观看 | 日韩一级欧美一级在线观看 | 妞干网免费在线观看 | 羞羞视频免费观 | 国产一在线 | 极品嫩模众筹福利写真视频 | 亚洲高清专区 | 国美女福利视频午夜精品 | 国产成人一区二区三区影院免费 | 亚洲一区中文字幕在线观看 | 国产欧美二区三区 | 亚洲不卡在线观看 | 亚洲日本欧美在线 | a级片播放 | 91av中文| 欧美一级淫片a免费播放口aaa | 夜夜综合网 | 国产l精品国产亚洲区久久 国产papa | 欧美性受一区二区三区 | xxxx中国hdxxxx| 男女性爽大片视频男女生活 | 亚洲国产成人91精品 | 正在播放日韩 | 日韩在线色 | 成年视频免费观看 | 国产精品视频无圣光一区 | 国产精品亚洲欧美一区麻豆 | 我就色色综合网 | 狠狠干天天爽 | 成年在线观看网站免费视频 | 日本在线视频一区二区三区 | 日本人69视频 | 欧美日韩性视频一区二区三区 | 一级毛片视频在线观看 | 欧美成a人片在线观看 |