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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 40649|回復: 3
收起左側

關于CAN報文中ACK應答錯誤的檢測原理

[復制鏈接]
ID:80436 發表于 2015-5-20 14:23 | 顯示全部樓層 |閱讀模式


以前曾經有一段時間認真的想過CAN數據報文中的ACK應答機制問題,原以為自己想通了,但前兩天又再想想,覺得還是沒有想清楚故將其放到論壇上,雖然到如今還沒有人來回復,但通過與一些朋友的確認,發現自己犯了一個不小錯誤,對協議本身的理解產生了錯誤,以至后來竟無法找到答案,改換過前提后,問題得以解決。下面將此次思考的情況一一列出,以希各位同道中的朋友不要再犯與我相似之低級錯誤:)
CAN協議里對ACK(應答場)有如下的描述:
應答場長度為2個位,包含應答間隙(ACK SLOT)和應答界定符(ACK DELIMITER)。在應答場里,發送站發送兩個“隱性”位。當接收器正確地接收到有效的報文,接收器就會在應答間隙(ACK SLOT)期間(發送ACK信號)向發送器發送一“顯性”的位以示應答。
應答間隙:所有接收到匹配CRC序列(CRC SEQUENCE)的站會在應答間隙(ACK SLOT)期間用一“顯性”的位寫入發送器的“隱性”位來作出回答。
ACK界定符:ACK界定符是ACK場的第二個位,并且是一個必須為“隱性”的位。因此,應答間隙(ACK SLOT)被兩個“隱性”的位所包圍,也就是CRC界定符(CRC DELIMITER)和ACK界定符(ACK DELIMITER)。
此主題相關圖片如下:

  

在CAN協議的錯誤檢測部分有這樣的描述:
位錯誤:站單元在發送位的同時也對總線進行監視。如果所發送的位值與所監視的位值不相符合,則在此位時間里檢測到一個位錯誤(BIT ERROR)。但是在仲裁場(ARBITRATION FIELD)的填充位流期間或ACK間隙(ACK SLOT)發送一“隱性”位的情況是例外的——此時,當監視到一“顯性”位時,不會發出位錯誤(BIT ERROR)。

應答錯誤:只要在ACK間隙(ACK SLOT)期間所監視的位不為“顯性”,則發送器會檢測到一個應答錯誤(ACKNOWLEDGMENT ERROR)。

從協議所描述的內容來看,我們不難得出一個結論:CAN是一種基于廣播的通訊方式,為了保證總線上的每一個節點(處于normal mode)都能正確的接收到報文,報文的發送者要求每一個接收節點在報文發送結束前,也就是ACK slot的時間內,作出應答,即要求接收的節點都在這個時間發送一個“顯性”位。發送者在發送的同時,會監視總線上的數據,如果與發送的婁據不一致,則表示發送失敗或自己失去仲裁,立即停止發送或轉入接收模式。如果有一個節點在ACK SLOT的時間內發送“顯性”位,則發送者認為此次發送報文成功;如果發送者檢測到ACK SLOT為隱性位,則表示沒有節點填充ACK SLOT,則發送者會檢測到這個隱性位而知道發送失敗,此條報文需要重發。所以,當總線上只有一個節點的時候,或是只有一個節點可以收發數據的時候,這個節點是發不出去數據的,因為它所發出的數據幀中的ACK SLOT沒有另外一個節點來填充,將永遠是隱性位,這個節點會一直重發數據直到發送成功或發送被取消。
(注:一:總線上只有一個節點而且它向外發送了數據。它確實不會收到任何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)

ACK SLOT只有一個BIT,而接下去的ACK delimiter始終為隱性(我們可認為是1),當數據到達ACK SLOT的時候,所有的節點都會發送顯性位(我們可以認為是0),而發送者在ACK這個時間里保持隱性位(即發送者在發送的時候ACK SLOT為1),這時發送者會檢測總線上的ACK時間內的信號,如果是0,則表示正確,如果是1,表示有錯誤。如果當中有某一個節點在ACK SLOT填入隱性位,則總線上同樣還是顯性位電平,故只要總線上有一個節點正確接收到數據,則ACK SLOT就會被填入顯性電平;那么,接收錯誤的節點如何來告知發送者此次發送不成功呢?這時候就要用到CAN的錯誤幀,當一個接收者收到錯誤的數據的時候(怎樣判斷的),它立即開始發送一個錯誤幀,則接下去總線上的信號就是這個錯誤幀,其它的節點和發送者也都會收到這個錯誤幀,那所有的節點都知道出錯了,接收者會丟掉此次消息,而發送者會試圖重發此次消息。這才是ACK SLOT真正的含義。

下面我們通過一個實例來看看CAN節點是如何進行ACK SLOT的動作的。我們抓取一個總線上面的信號波形,此波形已經是通過82C251解碼過后的。

此主題相關圖片如下:
         




抓取的波形,圖中的四個通道分別表示兩個節點的CANTX和CANRX,其中通道A,B表示NODE 1的CANTX和CANRX,通道C,D表示NODE 2的CANTX和CANRX。將其正對坐標中軸的部分展開,得到如下的圖形,由上圖我們清楚的看到,NODE 1的CANTX在接收到數據后立即響應,即向外發送數據,當數據發送完畢,到了ACK的時間內,見下圖中黃色圖標處,NODE 1的CANTX發送兩個隱性位,而對于NODE 2,當發送者NODE 1的CANTX到了報文的ACK時間,NODE2也接收完數據,如果CRC校驗通過,則NODE2的CANTX會相應的發送顯性位,即通道C的紅色圖標處。如果總線上存在NODE 3和NODE 4或是更多NODE,則波形相同。圖中的B和D都是CANRX,所以都有ACK的顯性位出現。
此主題相關圖片如下:




我們認為,發送者在發數據的時候,CANTX在發送數據,而CANRX同時也在接收數據,當發送者發送ACK為隱性時,接收到的ACK SLOT一定要是顯性才會正確。那么,當有節點正確接收到了數據,在ACK SLOT填上顯性位后,接收錯誤的節點這時候會如何呢?接收錯誤的節點就會馬上發送錯誤幀,一般是發送連續的6個0或1,根據CAN的位填充原理,當有五個連續的0或1出現時,為了傳送中的同步,必須插入一個反相位的BIT作為填充位,如果連續出現6個或以上的相同信號,則此次傳送錯誤,數據將被丟棄。故當發送者收到這個錯誤幀后,便會知道發送出錯,并試圖重發數據。

回復

使用道具 舉報

ID:103417 發表于 2016-4-22 14:24 | 顯示全部樓層
回復

使用道具 舉報

ID:198951 發表于 2017-5-10 09:09 | 顯示全部樓層
ACK界定符后面是EOF 連續7個隱性, 位填充只出現在起始幀到CRC之間,如果在ACK那里出現被動錯誤檢測不出來吧
回復

使用道具 舉報

ID:248394 發表于 2017-12-15 16:52 來自手機 | 顯示全部樓層
收藏,正想找相關資料
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国av在线免费观看 | 国产玖玖 | 精品免费视频一区二区 | 岛国av免费在线观看 | 日本久久久影视 | 波多野结衣精品 | 视频一区二区三区四区五区 | 亚洲综合中文字幕在线观看 | 国产剧情久久 | 91资源在线观看 | 欧美亚洲免费 | 久久综合久久综合久久综合 | 国产免费又黄又爽又刺激蜜月al | 日本亚洲精品成人欧美一区 | 日韩视频一区二区 | 美女毛片 | 日韩高清中文字幕 | 成人av在线大片 | 一区二区三区在线电影 | 久久免费观看视频 | 爱操av| 亚洲精品高清视频在线观看 | 国产精品一区在线观看 | 国产福利视频导航 | 久久久久国产一区二区三区 | 婷婷色成人 | 欧美性吧| 国产高清一区二区三区 | 色永久 | 国产精品久久久久久久久久久久久 | 亚洲精品视频免费观看 | 人人看人人干 | 视频一区在线观看 | 中文字幕亚洲欧美 | 一级片av| 久久首页 | 95国产精品 | 国产成人精品一区二区三区网站观看 | 成人免费片| 欧美精品片 | 欧美日韩不卡合集视频 |