PTT推薦

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

看板Gossiping標題Re: [問卦] 玩過 CAN bus 的請進作者
hydralee
(LCM)
時間推噓 X 推:0 噓:1 →:1

在 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 的那幾個位元之後,就停止自己這個節點: 的發送,直到其他節點傳送完資料,才會再次發送待傳送的資料,以避免上述情況發生?: 蛤?

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.114.15 (臺灣)
PTT 網址

lianpig5566 12/23 23:57這裡是 八

wkuochen 12/24 00:05你沒有回答到他的點~