CAN總線調試心得
2013-9-13 調試成功
這個問題糾結了好幾天,哎,,在群里問,大家各種建議都有,感謝群里的前輩提供的建議,在這里願上帝祝福他們。
先描述一下我搭建的總線。
目的:實現一主多從通信,主要是火情系統傳感器主動向主控設備傳送數據。
解決:485總線一主多從效率不高。
方案:三個節點,A、B、C;A只接受數據(主控板角色),B只負責發送(剛開始沒有接收),C只負責發送(剛開始沒有接收)。總線上還掛着一個CAN分析儀。
首先,運行節點A和節點B,接入CAN分析儀,自動識別波特率,識別成功以后,選擇一個波特率應用,然后CAN分析儀開始抓包。
接入節點C,然后就出現問題了,節點A沒有問題,能正常接收數據,通過485總線顯示在PC機的串口調試終端。但是節點B死機(我認為)了。我在把節點C移除總線,節點B也不能恢復了,這時總線上只有節點A、節點B、CAN分析儀正常運行,CAN分析儀發送數據的時候,節點B也死掉了,死機的節點只有通過硬件上的復位才能正常重啟。
自己搗鼓了好久,沒有解決問題,在群里提問,群友給出了幾種解決方案:
1、 可能是位填充錯誤(這個方法我沒有試驗);
2、 可能是CAN控制器的TX端在每次初始化時會拉低總線,需要在TX端加上一個上了電阻。
我試了第2中方法,還是不管用,繼續在群里提問,有提示使用示波器觀察總線,看看新節點接入總線時,總線上的變化,我也沒有這樣做(因為就在這個時候,我把問題解決了)。
原因:節點B和節點C沒有實現接收,或者可以說沒有對接收郵箱里的數據進行處理,導致接收溢出,然后節點自動離線,我是這么認為的。
解決:最后在CAN軟中接收函數中實現處理接收郵箱的數據
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
這樣每個節點添加這個函數以后,總線就不會出現這個問題了,現在總線上跑了6個節點。
感謝神