久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2292|回復: 3
打印 上一主題 下一主題
收起左側

CAN總線教程

[復制鏈接]
跳轉到指定樓層
樓主
ID:422205 發表于 2018-11-7 10:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
為了 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。
可以看看這個圖
由此我們得到
在隱性狀態下, CAN_High 線與 CAN_Low 沒有電壓差,這樣我們看到沒有任
何變化也就檢測不到信號。但是在顯性狀態時,改值最低為 2V,我們就可以利
用這種變化才傳輸數據了。所以出現了那些幀, 那些幀中的場,那些場中的位,
云云~~~~~~~~~~~
在總線上通常邏輯 1 表示隱性。而 0 表示顯性。這些 1 啊, 0 啊,就可以利用起
來為我們傳數據了。
利用這種電壓差,我們可以接收信號。
一般來說,控制單元通過收發器連接到 CAN 驅動總線上,這個收發器(顧名思
義,可發送,可接收)內有一個接收器,該接收器是安裝在接收一側的差動信號
放大器。然后,這個放大器很自然地就放大了 CAN_High 和 CAN_Low 線的電平
差,然后傳到接收區。如下圖
由上圖可知, 當有電壓差, 差動信號放大器放大傳輸, 將相應的數據位任可為 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 的標識符的第 lO98 位電平相同,因此兩個節點偵聽到的
信息和它們發出的信息相同。 第
7位節點B發出一個“1”, 但從節點上接收到的消息卻是“0”
為什么呢,因為
A 節點同時發出顯性位,讓總線也變成顯性了,也就是 0。節點 B 會退出
發送處于單純監聽方式而不發送數據;節點
A 成功發送仲裁位從而獲得總線的控制權,繼
而發送全部消息。總線中的信號持續跟蹤最后獲得總線控制權發出的報文,本例中節點
A
的報文將被跟蹤。 這種非破壞性位仲裁方法的優點在于, 在網絡最終確定哪個節點被傳送前,
報文的起始部分已經在網絡中傳輸了,因此具有高優先級的節點的數據傳輸沒有任何延時。
在獲得總線控制權的節點發送數據過程中,其他節點成為報文的接收節點,并且不會在總線
再次空閑之前發送報文
在這逐位的比較中,最終節點 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 個隱形位
幀間空間
數據幀(或遠程幀)與先行幀的隔離是通過幀間空間實現的。無論此先行幀類
型如何。所不同的是過載幀與錯誤幀之間沒有幀間空間。多個過載幀之間也不是
由幀間空間隔離的。
幀間空間包括間歇,總線空閑的位場。如果錯誤被動的站已作為前一報文的發
送器,則其幀空間除了間歇,總線空閑外,還包括稱作掛起傳送的位場。
1)間歇( Intermission
間歇包括3個“隱性”的位。間歇期間,所有的節點均不允許傳送數據幀或遠程幀,唯
一要做的是標示一個過載條件

如果 CAN 節點有一報文等待發送并且節點在間歇的第三位采集到一顯性位, 則此位被解
釋為幀的起始位,并從下一位開始發送報文的標識符首位,而不用首先發送幀的起始位或成
為一接收器。
2)總線空閑( Bus Idle
總線空閑的時間是任意的。只要總線被認定為空閑,任何等待發送報文的節點就會訪問
總線。在發送其他報文期間,有報文被掛起,對于這樣的報文,其傳送起始于間歇之后的第
一個位。
  

CAN總線嘔心瀝血教程.pdf

174.5 KB, 下載次數: 53, 下載積分: 黑幣 -5

不錯的教程

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:422205 發表于 2018-11-7 10:50 | 只看該作者
贊一個
回復

使用道具 舉報

板凳
ID:446581 發表于 2019-1-11 11:25 | 只看該作者
感謝謝大大分享
回復

使用道具 舉報

地板
ID:351969 發表于 2019-4-13 16:21 | 只看該作者
謝謝大佬分享OA,,,安逸撒
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂久久av | 亚洲网址| 一区日韩| 一区二区小视频 | 色婷婷综合久久久中字幕精品久久 | 亚洲人人舔人人 | 久久精品无码一区二区三区 | 国产伦精品一区二区三区视频金莲 | 日本成人片在线观看 | 亚洲成人免费视频在线观看 | 久久99精品国产麻豆婷婷 | 免费在线毛片 | 色999视频 | 精品无码久久久久久久动漫 | 欧美日韩国产免费 | 岛国精品| 欧美日韩精品一区 | 国产第一亚洲 | 少妇精品亚洲一区二区成人 | 免费色网址| 国产成人a亚洲精品 | 亚洲国产精品激情在线观看 | 一区二区久久电影 | 欧美乱淫视频 | 亚洲精品在线看 | 免费看a | 少妇av片 | 男女视频在线观看 | 亚洲国产精品日本 | 羞羞视频在线观看网站 | 国产成人久久精品 | 欧美一区二区三区在线播放 | 精品亚洲一区二区三区 | 99re视频在线 | 精品精品| 97日日碰人人模人人澡分享吧 | av天天澡天天爽天天av | 黄色网毛片 | 久久99蜜桃综合影院免费观看 | 久久久青草婷婷精品综合日韩 | 超碰人人人人 |