CAN总线控制器SJA1000的使用
最近接手了一個項(xiàng)目,需要調(diào)試編寫與CAN總線相關(guān)的程序,在這篇博客內(nèi)做個記錄。
關(guān)于CAN總線介紹就不說了,兩根線CANH和CANL,配合參考電平進(jìn)行高低比較判斷信號值。CAN總線通常通過PCA82C250控制器接口來進(jìn)行CAN總線差分信號的物理層接收發(fā)送,每一個判斷之后的信號值會被送往CAN總線控制器SJA1000進(jìn)行管理。這些單個的數(shù)據(jù)位bit將被整理成一個個字節(jié)的形式,存儲在SJA1000內(nèi)的接收緩存中,然后在用戶的控制下從緩存中一個個讀出,發(fā)送過程相反。
連接大致如圖所示:(參考一個以FPGA為核心主控的板卡原理圖)
這樣到達(dá)用戶端的數(shù)據(jù)已經(jīng)是相對比較完整的了,只差把這些八位的字節(jié)組織成幀和包,進(jìn)行解析完成通信。
那么SJA1000具體完成了哪些工作呢?
SJA1000的數(shù)據(jù)手冊在下面:
https://download.csdn.net/download/Newbeil/12565085
如圖所示為SJA1000內(nèi)部的結(jié)構(gòu)框圖,可以發(fā)現(xiàn)SJA1000這塊芯片內(nèi)部主要由以下幾個模塊構(gòu)成:
接口管理邏輯IML:作為SJA1000與微控制器的主要接口管理,解析來自微控制器的命令,實(shí)現(xiàn)對內(nèi)部寄存器的索引、提供狀態(tài)、中斷等信號給微控制器。
接收緩存RXB:作為ACF和微控制器之間的接口,數(shù)據(jù)由ACF寫入,由微控制器讀出,13字節(jié)長,相當(dāng)于內(nèi)部64字節(jié)深度的RXFIFO的一個長度為13字節(jié)的窗口。
發(fā)送緩存TXB:作為微控制器和BSP之間的接口,數(shù)據(jù)由微控制器寫入,由BSP讀出,13字節(jié)長
接收過濾器ACF:顧名思義,決定了收到的數(shù)據(jù)是否能夠被接收,涉及到的內(nèi)部寄存器包括ACR和AMR。
位流處理器BSP:負(fù)責(zé)協(xié)調(diào)TXB、RXFIFO、CAN總線上的數(shù)據(jù)流,兼顧錯誤檢測,仲裁,錯誤處理等功能
位時序邏輯BTL:負(fù)責(zé)處理CAN總線上數(shù)據(jù)信號的時序相關(guān)功能,可對單個位的采樣點(diǎn)、采樣數(shù)量進(jìn)行可編程地控制(通過對內(nèi)部地寄存器設(shè)置,BTR0和BTR1)
錯誤管理邏輯EML:配合BSP獲得錯誤信息,然后告知IML
?
未完待續(xù)
總結(jié)
以上是生活随笔為你收集整理的CAN总线控制器SJA1000的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL1084C Shared mem
- 下一篇: 查看php的错误日志文件,php查看错误