CAN匯流排 ACK應答機制分析

2021-09-11 07:58:32 字數 1136 閱讀 4359

應答場長度為 2 個位,包含應答間隙(ack slot)和應答界定符(ack delimiter)。在應答場裡,傳送站傳送兩個「隱性」位。當接收器正確地接收到有效的報文,接收器就會在應答間隙(ack slot)期間(傳送 ack 訊號)向傳送器傳送一「顯性」的位以示應答。

can的傳送是個雙向互動過程,傳送節點在傳送資料的同時會對匯流排上資料進行回讀以及ack slot場的判定;接收節點在傳送節點傳送過程中需及時確認報文正確性並令匯流排上ack slot位置 「顯性」,以告知傳送節點資料正常接收;

can是一種基於廣播的通訊方式,為了保證匯流排上的每乙個節點都能正確的接收到報文,報文的傳送者要求每乙個接收節點在報文傳送結束前,也就是ack slot 的時間內,作出應答,即在ack段上,要求接收節點在報文正確性的基礎上及時傳送乙個「顯性」位。傳送者在傳送的同時會監視匯流排上的資料,如果與傳送的資料不一致,則表示傳送失敗或自己失去仲裁,立即停止傳送或轉入接收模式。由於傳送者在傳送資料的同時會向ack段連續寫入2個隱性位,如果傳送者在回讀過程中監控到ack slot 位為「顯性」位,則說明接收者已正確接收;如果傳送者在回讀過程中監控到ack slot 位為「隱性」位,則說明沒有節點正確接收該報文,則傳送者會檢測到這個隱性位而知道傳送失敗,此條報文需要重發。

多節點接收工況下若出現僅單節點正確接收,那麼又會出現什麼情況呢?  由於某節點正常接收,基於線與機制匯流排上ack slot 位必定為「顯性」,隱性失效,從而可以說明:ack場是用於確定報文被至少乙個節點正確接收。該工況下就無法基於ack場進行判斷,但會觸發錯誤幀相關機制,立即開始傳送乙個錯誤幀,則接下去匯流排上的訊號就是這個錯誤幀,其它的節點和傳送者也都會收到這個錯誤幀,那所有的節點都知道出錯了,接收者會丟掉此次訊息,而傳送者會試圖重發此次訊息。

補充:1 通道表徵傳送節點的 tx;2 通道表徵傳送節點的 rx;3 通道表徵接收節點的 tx;4通道表徵接收節點的 rx;

確認應答機制 超時重傳機制

確認應答機制能夠保證tcp協議的可靠性。主機a傳送的第乙個tcp資料報中的序列號是1,傳送的長度是1000個位元組,說明1 1000個位元組都傳送過去了。1001表示小於1001序號的資料都已經到達接收端,接下來主機b就應該從1001這個序號開始傳送。確認序號表示的含義 確認序號之前的資料都已經正確...

RabbitMQ訊息應答 ack機制

執行乙個任務可能需要花費幾秒鐘,你可能會擔心如果乙個消費者在執行任務過程中掛掉了。一旦rabbitmq將訊息分發給了消費者,就會從記憶體中刪除。在這種情況下,如果正在執行任務的消費者宕機,會丟失正在處理的訊息和分發給這個消費者但尚未處理的訊息。但是,我們不想丟失任何任務,如果有乙個消費者掛掉了,那麼...

CAN匯流排的仲裁機制

報文的優先順序,是通過對 id 的仲裁來確定的。根據前面對物理層的分析我們知道如果匯流排上同時出現顯性電平和隱性電平,匯流排的狀態會被置為顯性電平,can 正是利用這個特性進行仲裁。對於can來說,0為顯性,1為隱性。所以當對不同的id號來進行仲裁時,id號越小,優先順序越高。對於標準資料幀和擴充套...