Re: [問卦] 玩過 CAN bus 的請進

作者: hydralee (LCM)   2022-12-23 23:55:50
在 Controller Area Network (CAN) 中,當一個節點發送一個 frame 時,它會先發送
header,然後是 payload,最後是結尾的 CRC 和 ACK 訊號。如果在這個節點發送
header 的過程中,其他節點也開始發送資料,則這個節點會暫停發送,直到其他節點發
送完資料為止。這是因為 CAN 使用了優先序制度,當系統中有多個節點同時發送資料時
,只有優先序最高的節點才能繼續發送,其他節點必須暫停發送,等待其他節點傳送完資
料之後再重新嘗試發送。
在 CAN 中,優先序是由 CAN ID(也稱為標題)決定的。CAN ID 是一個 11 位二進制數
,優先序越高的 frame 會有較小的 CAN ID。當多個節點同時發送資料時,接收器會先接
收優先序最高的 frame,然後再接收其他 frame。因此,如果一個節點在傳送 header 的
過程中,其他節點也開始發送資料,則這個節點會暫停發送,直到其他節點發送完資料為
止。
在 CAN 中,transceiver 的主要職責是在物理層和通信層之間傳遞資料。它會在接收到資料後將資料轉換為物理信號,並在收到物理信號時將資料轉換回
通信層。Transceiver 不會直接參與傳送資料的過程,而是接收到資料後將資料轉換為物
理信號,並在收到物理信號時將資料轉換回通信層。因此,如果一個節點在傳送 header
的過程中,其他節點也開始發送資料,則這個節點會暫停發送,直到其他節點發送完資料
為止。
ChatGPT 說的,看不懂也不要問我.....
※ 引述《dces4212 ()》之銘言:
: 內葛阿
: 我在研究 CAN 的規格的時候遇到個想不通的點,
: 我們知道,在 CAN bus 裡面,當一個 sender 收到與自己正在傳輸的位元不一樣的準位
: 的信號時,也就是它原本正在送 1,結果收到 0,它會知道發生碰撞,並且讓出 bus 給
: 正在傳輸的節點。
: 問題來了!
: 如果 header 已經傳完了,當下正在傳輸的是 payload,並且正在傳送 1 的資料,這時
: 剛好其他節點開始說話了,並且發送 0。這樣不就造成即便 can_id 是最小的 frame,
: 也就是優先序最高的 frame,也會失去這次發送資料的機會?!?!
: 還是說,transceiver 的實做會在收完 header 的那幾個位元之後,就停止自己這個節點
: 的發送,直到其他節點傳送完資料,才會再次發送待傳送的資料,以避免上述情況發生?
: 蛤?

Links booklink

Contact Us: admin [ a t ] ucptt.com