PTT推薦

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

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

※ 引述《dces4212 ()》之銘言:
: 內葛阿
: 我在研究 CAN 的規格的時候遇到個想不通的點,
: 我們知道,在 CAN bus 裡面,當一個 sender 收到與自己正在傳輸的位元不一樣的準位: 的信號時,也就是它原本正在送 1,結果收到 0,它會知道發生碰撞,並且讓出 bus 給: 正在傳輸的節點。
: 問題來了!
: 如果 header 已經傳完了,當下正在傳輸的是 payload,並且正在傳送 1 的資料,這時: 剛好其他節點開始說話了,並且發送 0。這樣不就造成即便 can_id 是最小的 frame,: 也就是優先序最高的 frame,也會失去這次發送資料的機會?!?!
: 還是說,transceiver 的實做會在收完 header 的那幾個位元之後,就停止自己這個節點: 的發送,直到其他節點傳送完資料,才會再次發送待傳送的資料,以避免上述情況發生?: 蛤?

自己回一下,

後來發現是,當 arbitration field (我所謂的 header) 已經傳完,並且正在傳送後續payload 等內容時,其他節點在這個時間是不會說話的,因為這時 bus 不是 idle 狀態。

什麼時候才可以說話呢?答案是等這個 frame 傳完,並且已經過了 intermission field(frame 之間的間隔,由 3 個 intermission bit 以及 1 個 recessive bit 構成) 之後,其他節點才可說話。

如此一來,我們就解開了上述問題:payload 在傳送時是不會被打斷的。


參考資料:
- http://wiki.csie.ncku.edu.tw/embedded/CAN
- https://copperhilltech.com/blog/controller-area-network-can-bus-bus-
arbitration/

成大 wiki 應該接近第一手資料了吧!?jserv 別搥我R

--

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

lianpig5566 12/26 00:59這裡是八卦板= =

不是男同俱樂部嘛!?

※ 編輯: dces4212 (114.37.13.126 臺灣), 12/26/2022 01:01:38

lianpig5566 12/26 01:02對 男童俱樂部

Mozar 12/26 01:54