簡明易懂教程-磁致伸縮位移傳感器CAN總線
每組報文開頭的11 位字符為標識符,定義了報文的優先級,這種報文格式成為面向內容的編制方案。同一系統中標識符是唯一的,不可能有兩個站發送具有相同標識符的報文,當幾個站同時競爭總線讀取時,這種配置十分重要。
在我看到的很多文章里,有很多顯性和隱性的地方,為此我頭痛不已,最終我把它們徹底弄明白了。
這個靜電平狀態就是隱形狀態,也稱隱性電平,也就是沒有任何干擾的時候的狀態稱為隱性狀態。當有信號修改時,CAN_High 線上的電壓值變高了,一般來說會升高至少1V;而CAN_Low 線上的電壓值會降低一個同樣值,也是1v。
在隱性狀態下,CAN_High 線與CAN_Low 沒有電壓差,這樣我們看到沒有任何變化也就檢測不到信號。但是在顯性狀態時,改值最低為2V,我們就可以利用這種變化才傳輸數據了。所以出現了那些幀,那些幀中的場,那些場中的位,云云~~~~~~~~~~~
一般來說,控制單元通過收發器連接到 CAN 驅動總線上,這個收發器(顧名思義,可發送,可接收)內有一個接收器,該接收器是安裝在接收一側的差動信號放大器。然后,這個放大器很自然地就放大了CAN_High 和CAN_Low 線的電平差,然后傳到接收區.
由此可知,當有電壓差,差動信號放大器放大傳輸,將相應的數據位轉化為0。
所謂報文,就是CAN 總線上要傳輸的數據報,為了安全,我們要給我們傳輸的數據報編碼定一下協議,這樣才能不容易出錯,所以出現了很多的幀,以及仲裁啊,CRC 效驗。這些都是難點。
識別符的概念
CAN 的報文格式有兩種,不同之處其實就是識別符長度不同,具有11 位識別符的幀稱為標準幀,而還有29 位識別符的幀為擴展幀,CAN 報文有以下4 個不同的幀類型。分別是:
(2) 遠程幀:總線節點發出遠程幀,請求發送具有同一標識符的數據幀;
(4) 過載幀:過載幀用已在先行的后續的數據幀(或遠程幀)之間提供一附加的延時。
我們先研究數據幀吧。
這里的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。一開始是一位幀起始,也叫SOF。它用顯性位表示,也就是0;它告訴我們,兩個線上有電壓差了,也就是有數據了。
然后下一個場是仲裁場。這個仲裁很抽象,其實在這里就是為了解決一個問題。如果2 個或2 個以上的單元同時開始傳送報文,那么就會有總線訪問沖突,那么仲裁機制就是用來根據標識符優先級來一個一個的去掉低級別的數據。我們可以詳細的描述這場生動的爭搶總線的戰斗。
首先搞明白兩點,
二、當隱性碰到顯性,就變為顯性。
為什么呢,因為A 節點同時發出顯性位,讓總線也變成顯性了,也就是0。節點B 會退出發送處于單純監聽方式而不發送數據;節點A 成功發送仲裁位從而獲得總線的控制權,繼而發送全部消息。
在獲得總線控制權的節點發送數據過程中,其他節點成為報文的接收節點,并且不會在總線再次空閑之前發送報文,在這逐位的比較中,最終節點B 因為第七位的偏差丟掉了總線。從此單純監聽,江山就拱手讓給了節點A 了。這就是仲裁機制
但在擴展格式里,包括29 位識別符、SRR 位、IDE 位、RTR 位。
我暈,為什么這么搞呢,不急,先留著這個問題。
這時候,標準幀的RTR 為顯性,而擴展幀SRR 為隱性,這樣,總線自然就被標準幀占據。
對于擴展格式,IDE位屬于仲裁場;對于標準格式,IDE位屬于控制場。標準格式的IDE位為“顯性”,而擴展格式的IDE
控制場結構
數據場
循環冗余碼CRC場
CRC場包括CRC序列(CRC Sequence),其后是CRC界定符(CRC Delimiter),結構如圖:
任意一個由二進制位串組成的代碼都可以和一個系數僅為‘0’和‘1’取值的多項式一一對應。例如:代碼1010111 對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1 對應的代碼101111。
要傳輸的信息序列為1101,在末尾添加所給多項式的最高次階個0,如本題為x^3,則添加3個0,變為:1101000;
應答場長度為2個位,包含應答間隙(ACK Slot)和應答界定符(ACK Delimiter),如圖所示。在ACK場(應答場)里,發送節點發送兩個“隱性”位。
管理員
該內容暫無評論