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

看板Gossiping作者 (LCM)時間1年前 (2022/12/23 23:55), 編輯推噓-1(011)
留言2則, 2人參與, 1年前最新討論串2/3 (看更多)
在 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.cc), 來自: 1.163.114.15 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1671810952.A.9EB.html

12/23 23:57, 1年前 , 1F
這裡是 八
12/23 23:57, 1F

12/24 00:05, 1年前 , 2F
你沒有回答到他的點~
12/24 00:05, 2F
文章代碼(AID): #1ZfS-8dh (Gossiping)
文章代碼(AID): #1ZfS-8dh (Gossiping)