1.can通訊有
2套國際標準,2套協議版本,3種故障狀態,4種資料幀型別,5種匯流排錯誤型別。
2.can的國際標準有兩種
iso11898
和iso11519
。3.can2.0協議分為a版和
b版兩種,
a版協議僅支援
11位識別符號(稱為標準幀),
b版協議相容
11位,向上擴充套件到
19位識別符號(稱為擴充套件幀)。
4.can匯流排中,任何乙個節點發生了錯誤,那麼這個節點可能處於
3種故障狀態:錯誤主動狀態,錯誤被動狀態,離線狀態。錯誤主動狀態
:可以正常參加匯流排通訊,檢測出錯誤時,輸出主動錯誤標誌。錯誤被動狀態:是易引起錯誤的狀態,雖然能參加匯流排通訊,但為不妨礙其他節點通訊,接收時不能積極的傳送錯誤通知,處於被動錯誤狀態的節點即時檢測出錯誤,而其它處於主動錯誤狀態的節點如果沒有發現錯誤,整個匯流排也被認為沒有錯誤。離線狀態:不能參加匯流排通訊的狀態。
4.can匯流排中有
5類錯誤,這
5類錯誤並不具有排他性,可以同時發生。
can匯流排在任意時刻,只有乙個節點在傳送資料,其他所有節點都是在接收,只有對應的
id報文節點對接收的報文做出應答反應。
5.位錯誤(
bit error
):節點是邊傳送邊檢聽對應的位,傳送的位和檢測的位如果不一致,則檢測到乙個位錯誤。
6.填充錯誤(
stuff error
)監聽到
6個連續相同的為電平時,則檢測到乙個位填充錯誤。
7.crc錯誤(
crc error
)傳送節點會對報文的幀起始,仲裁場,資料場進行
crc計算,求出
crc校驗碼,並將其也傳送出去。接收節點在接收到資料後,會根據
crc校驗碼來判斷接收到的資料在傳送過程中是否出錯。
8.形式錯誤()乙個固定形式的位場中含有非法位時,則檢測到乙個形式錯誤。
9.應答錯誤()只要在應答期間所監聽的位不為顯性,則傳送器檢測到乙個應答錯誤。
應答場包括應答位和應答分隔符,傳送節點傳送的這兩位均為隱性電平,這時只有正確接收報文的接收節點傳送顯性電平來覆蓋它。
11.串列埠通訊是一對一的通訊,
spi的通訊是一對多的通訊。
can的一大特點,多主機序列通訊:也就是在匯流排空閒時,所有單元都可以傳送訊息,最先訪問的節點可以獲得傳送權,若多個節點認為自己獲得傳送權同時開始傳送資料時,根據
id的優先順序來競爭匯流排的傳送權。匯流排上的節點沒有類似於
mac實體地址的資訊,所以在匯流排上增減單元時,連線在匯流排上的其他單元的軟硬體及應用層都不需要改變。單元根據報文
id決定接收或者遮蔽該報文,報文
id在一定程度上也決定了此幀資料的優先順序,傳送的資訊遭到破壞後,可自動重發;節點在錯誤嚴重的情況下具有自動退出匯流排的功能。
12.can匯流排上所有的節點都可以檢測錯誤,檢測出錯誤的單元會立刻通知其他所有單元。正常傳送的節點一旦檢測出錯誤,會強制結束當前的傳送,強制結束傳送的節點會不斷反覆的傳送此資訊直到成功傳送為止,或進入匯流排關閉狀態。
13.can匯流排上的訊號使用差分電壓進行傳送,兩條訊號線被稱為
can_h
和can_l,
靜態時均是
2.5v
左右,這時的狀態表示邏輯
1,也稱為隱性電平,通常
can_h
為3.5
,can_l
為1.5
時,表示為邏輯
0,稱為顯性電平。
14.dsp的can模組的引腳在傳送資料的同時,其接受引腳也在監聽所傳送的資料,也就是,傳送資料的時候,接受引腳上也會有相應的波形可以在示波器上顯示。如果can匯流排上只有傳送節點,卻沒有接受節點,那麼這個傳送節點會一直傳送資料直到傳送成功為止,也就是收到有效的應答訊號。
15.can協議裡對ack(應答場)有如下的描述:
應答場長度為2 個位,包含應答間隙(ack slot)和應答界定符(ack delimiter)。在應答場裡,傳送站傳送兩個「隱性」位。當接收器正確地接收到有效的報文,接收器就會在應答間隙(ack slot)期間(傳送ack 訊號)向傳送器傳送一「顯性」的位以示應答。
15.應答間隙:所有接收到匹配crc 序列(crc sequence)的站會在應答間隙(ack slot)期間用一「顯性」的位寫入傳送器的「隱性」位來作出回答。ack 界定符:ack 界定符是ack 場的第二個位,並且是乙個必須為「隱性」的位。因此,應答間隙(ack slot)被兩個「隱性」的位所包圍,也就是crc 界定符(crc delimiter)和ack 界定符(ack delimiter)。
16.在can協議的錯誤檢測部分有這樣的描述:
位錯誤:站單元在傳送位的同時也對匯流排進行監視。如果所傳送的位值與所監視的位值不相符合,則在此位時間裡檢測到乙個位錯誤(bit error)。但是在仲裁場(arbitration field)的填充位流期間或ack間隙(ack slot)傳送一「隱性」位的情況是例外的—— 此時,當監視到一「顯性」位時,不會發出位錯誤(bit error)。應答錯誤:只要在ack 間隙(ack slot)期間所監視的位不為「顯性」,則傳送器會檢測到乙個應答錯誤(acknowledgment error)。
17.傳送者在傳送的同時,會監視匯流排上的資料,如果與傳送的婁據不一致,則表示傳送失敗或自己失去仲裁,立即停止傳送或轉入接收模式。如果有乙個節點在ack slot的時間內傳送「顯性」位,則傳送者認為此次傳送報文成功;如果傳送者檢測到ack slot為隱性位,則表示沒有節點填充ack slot,則傳送者會檢測到這個隱性位而知道傳送失敗,此條報文需要重發。所以,當匯流排上只有乙個節點的時候,或是只有乙個節點可以收發資料的時候,這個節點是發不出去資料的,因為它所發出的資料幀中的ack slot沒有另外乙個節點來填充,將永遠是隱性位,這個節點會一直重發資料直到傳送成功或傳送被取消。
18.(注:一:匯流排上只有乙個節點而且它向外傳送了資料。它確實不會收到任何ack,它會變成「error passive」但是它不會變成bus off。why?請參考can specificaton 2.0-partb-fault_confinement--rule3--exception1 二:其它檢測到crc錯誤的節點不會馬上傳送錯誤幀,而是在ack delimiter之後才傳送。請參考can specificaton 2.0-partb-error_signalling)
19.ack slot只有乙個bit,而接下去的ack delimiter始終為隱性(我們可認為是1),當資料到達ack slot的時候,所有的節點都會傳送顯性位(我們可以認為是0),而傳送者在ack這個時間裡保持隱性位(即傳送者在傳送的時候ack slot 為1),這時傳送者會檢測匯流排上的ack時間內的訊號,如果是0,則表示正確,如果是1,表示有錯誤。如果當中有某乙個節點在ack slot填入隱性位,則匯流排上同樣還是顯性位電平,故只要匯流排上有乙個節點正確接收到資料,則ack slot就會被填入顯性電平;那麼,接收錯誤的節點如何來告知傳送者此次傳送不成功呢?這時候就要用到can的錯誤幀,當乙個接收者收到錯誤的資料的時候,它立即開始傳送乙個錯誤幀,則接下去匯流排上的訊號就是這個錯誤幀,其它的節點和傳送者也都會收到這個錯誤幀,那所有的節點都知道出錯了,接收者會丟掉此次訊息,而傳送者會試圖重發此次訊息。這才是ack slot真正的含義。
20.我們認為,傳送者在發資料的時候,cantx
在傳送資料,而
canrx
同時也在接收資料,當傳送者傳送
ack為隱性時,接收到的
ack slot
一定要是顯性才會正確。那麼,當有節點正確接收到了資料,在
ack slot
填上顯性位後,接收錯誤的節點這時候會如何呢?接收錯誤的節點就會馬上傳送錯誤幀,一般是傳送連續的6個
0或1,根據
can的位填充原理,當有五個連續的0或
1出現時,為了傳送中的同步,必須插入乙個反相位的
bit作為填充位,如果連續出現
6個或以上的相同訊號,則此次傳送錯誤,資料將被丟棄。故當傳送者收到這個錯誤幀後,便會知道傳送出錯,並試圖重發資料。
CAN通訊協議總結
一 應用範圍 廣泛應用於汽車電子行業,其優點在於傳輸距離遠,抗電磁干擾能力強,有錯誤檢測,錯誤通知以及自動重傳等功能。物理層 序列非同步通訊,半雙工。can通訊節點由can控制器和can收發器組成,只有兩根訊號線,can h和can l,用於產生差分訊號來表示顯性電平和隱性電平。顯性電平 記產生差分...
CAN匯流排通訊的實現
實現mic 3680與f28335 can匯流排通訊的設定 mic 3680can模組濾波使用單濾波模式 can2.0a協議 使用11位識別符號 1 f28335傳送,mic 3680接收 f28335設定 1 設定msgid暫存器中ide位為0 即第31位 時,傳送標準幀 2.f28335的設定要...
CAN通訊學習(一)
can通訊 一 can通訊是什麼?can controller area network 是由以研發和生產汽車電子產品著稱的德國bosch公司開發的,並最終成為國際標準 iso 11898 是國際上應用最廣泛的現場匯流排之一。在北美和西歐,can匯流排協議已經成為汽車計算機控制系統和嵌入式工業控制區...