Re: 請問 CAN 的接收問題
|
||||
---|---|---|---|---|
版主
|
感覺起來像是因為都有錯誤導致Tx 端一值再重複傳送同一筆資料且 Error Count 也讓 Tx 端進入了 Bus Off 狀態。
建議把速度降到 500Kbps ,先採單筆傳送的測試再慢慢加多筆數來找出塞車的問題。不過要能及時讀到 Tx Error count 來監看錯誤的發生機率。
發表於: 2008/9/26 8:20
|
|||
|
Re: 請問 CAN 的接收問題
|
||||
---|---|---|---|---|
版主
|
1. 如果 A 以 ID 0x001 來傳 message, 其它 8 個節點的 Filter都設 0x001 也就是都能接收 A 的 message,那麼如果都被正確的接收,應該就不會有問題吧;但由果有某 Node 接收錯誤,也表示 message 要重傳,那其它 7 個節點也要再重新接收相同的 message 對吧?
Ans: 只要有人接收錯誤包含 CRC 檢測錯誤都會送出 Erroe Frame 來說明資料的錯誤發生,因為 Error Frame 為連續六個 Dominate bit 已經違反了 bit Stuff 的原則,所以資料會在 Error Frame 之後重新傳送上ㄧ次的封包。如果有人發出Error Frame 出來會造成大家的資料錯誤所以因該不會有人收到正常的封包才對。 CAN 的資料錯誤判斷有 : CRC Erroe, ACK Error, Frame Error, bit error & Stuff Error 等幾種錯誤都會產生 Error Frame. 2. 我想知道 CAN 在應用上是否要避免,多對一的傳送(如:8 nodes 傳給 1 個node),以免發生接收錯誤而導致接收端的當機? Ans: 沒有這樣的規定,可以善用 RTR Frame 來管理 Bus 得流量。 另外,CAN 是可以到 1Mbps 但那是在ISO11898 的標準規範裡,接頭絞線都是有規定的才能在 40 Feet 跑到 1Mbps. 可是在一般車廠裡只會跑 500Kbps 給高速使用,另 125Kbps 給ㄧ般低速使用。如果你要跑高速 PIC 最好能在 10MIPS 下工作。
發表於: 2008/9/25 11:57
|
|||
|
Re: 請問 CAN 的接收問題
|
||||
---|---|---|---|---|
高級會員
|
參照:
謝謝各位的回答, CAN 的碰撞機制我知道,我好奇的是經由碰撞機制後,傳送的資料是否能都正常的被接收到,如 ID 為 0x001 ,0x002, ....,0x008 共 8 個節點,那傳送時的順序,就是0x001,0x002....,0x008,也就是幾乎連續的 8 筆 message,這樣的話,負責接收的 Node 也能都正常的接收嗎?(用中斷接收後,只做儲存於陣列的工作) 另外,引用版主的話: CAN 的發送端視檢測傳出去的 ACK bit 來得知該筆資料是否有被正確接收如果有人因接收錯誤也會發送 Error Frame 出去這時 Node A 會在重送並記錄一次傳送錯誤! ==> 我有兩個問題: 1. 如果 A 以 ID 0x001 來傳 message, 其它 8 個節點的 Filter都設 0x001 也就是都能接收 A 的 message,那麼如果都被正確的接收,應該就不會有問題吧;但由果有某 Node 接收錯誤,也表示 message 要重傳,那其它 7 個節點也要再重新接收相同的 message 對吧? 2. 我想知道 CAN 在應用上是否要避免,多對一的傳送(如:8 nodes 傳給 1 個node),以免發生接收錯誤而導致接收端的當機?
發表於: 2008/9/25 11:29
|
|||
|
Re: 請問 CAN 的接收問題
|
||||
---|---|---|---|---|
資深會員
|
任何“一條”bus 同一時間只能有一個發送者,若有兩個或以上同時發送則訊號會發生衝突/衝撞 (collision)
如果8個節點同時檢測 bus 有空,又同時送出訊號,顯然 bus 上會有嚴重衝突,必須有進一步的衝突解決機制。 各種 Bus 有各式解決方式與規範,CAN 的作法是要偵測送出的 bit ,有高優先的(不會被壓過的)可以繼續傳送,低修先(讀回的bit值不同,被壓過)的,該封包就要等待機會再重送。 PS.前面已經有更細的回答了
發表於: 2008/9/25 9:49
|
|||
|
Re: 請問 CAN 的接收問題
|
||||
---|---|---|---|---|
版主
|
參照:
8 個節點同時以中斷方式接收,並回傳 message A 節點? CAN 的發送端視檢測傳出去的 ACK bit 來得知該筆資料是否有被正確接收如果有人因接收錯誤也會發送 Error Frame 出去這時 Node A 會在重送並記錄一次傳送錯誤;也就是說 CAN 不是靠每個 note 的回傳 Message 做錯誤檢測。 如果同一時間 所有的 Node 都要發資料這時所謂的"非破壞性縱裁"就會啟動,打架輸的 Node 自動讓出 Bus 等待下一次傳送的機會。 請問,你有沒有使用 CAN Bus Data Logger or Monitering 來檢測 BUS 的資料,如果沒有你怎樣知道有人發了何種封包出來?
發表於: 2008/9/25 9:39
Edited by Ryang on 2008年09月25日 10:01:23
|
|||
|
請問 CAN 的接收問題
|
||||
---|---|---|---|---|
高級會員
|
簡述:
由一個 CAN 節點 A 廣播給 8 個節點, 8 個節點同時以中斷方式接收,並回傳 message (有用 CANIsTXReady() 偵測) 給 A . ==> 實驗結果: A 的主程式無法運作,但中斷功能正常! 想請問 CAN 是否無法負擔多個節點連續的傳 message 給某一節點?
發表於: 2008/9/24 23:42
|
|||
|