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