先說兩句
MCP2515是一款SPI轉CAN的控制芯片,市面上有很多MCU有自帶CAN控制,但我手頭上這款MCU暫時沒有。但是應用上需要,所以就必須得加了。
參考鏈接
我在對接開發這款芯片的時候參考了不少連接,以下貼出:
1)首先得先寫好SPI的驅動,看這個可以更理解深入如何配置
https://blog.csdn.net/zhengyanan815/article/details/55211620
1)這個鏈接讓我快速認識讀懂了datasheet中的頻率設置方法
https://blog.csdn.net/debugcc2530/article/details/107937250
2)這個鏈接的工具讓我快速計算出我需要的波特率CNF1、CNF2、CNF3配置數,目前我試了WIN7能運行,WIN10不行。
https://download.csdn.net/download/jx119/9329391?utm_medium=distribute.pc_relevant_download.none-task-download-2~default~BlogCommendFromBaidu~Rate-2.dl_default&depth_1-utm_source=distribute.pc_relevant_download.none-task-download-2~default~BlogCommendFromBaidu~Rate-2.dl_default&dest=https%3A%2F%2Fdownload.csdn.net%2Fdownload%2Fjx119%2F9329391&spm=1003.2020.3001.6616.2
3)接着就是一款邏輯分析儀了,能更好地抓取SPI、CAN協議波形,分析問題所在,我用的是個人版的。
https://item.taobao.com/item.htm?spm=a230r.1.14.6.194e296a91MxSJ&id=43809938149&ns=1&abbucket=8&mt=
4)重中之重就是要看產品的數據手冊了,我一般是上立創搜索下載
如果有需要的聯系我要,有中、英文版本。
正文開始
1)SPI驅動注意點
- 注意確認是否打開時鍾使能
- SPI所需要用到的引腳:CLK、MOSI、MISO、NSS(可采用軟件IO控制,如果是硬件I2C配置為SPI_NSS_SOFT方式)
- SPI初始化方向:SPI_DIRECTION_2LINES(雙向通訊)
- 數據大小:SPI_DATASIZE_8BIT
- SPI Clock Phase :SPI_PHASE_2EDGE
- 主從模式:MCU主機(SPI_MODE_MASTER)、MCP2515從機
- 大端:SPI_FIRSTBIT_MSB
- TI模式關閉:SPI_TIMODE_DISABLE
- 時鍾頻率:數據手冊明確指出為10M
- 邏輯分析儀調試的時候注意看時序與數據手冊中的時序是否一致,最重要的是NSS是否拉低后通訊,通訊完是否拉高,時鍾腳是否正常輸出使能
- 記住在讀寫前先關閉中斷使能,讀寫完后再打開中斷使能,避免出現問題。
- 全雙工的通訊,接收的方法就是寫入0數據,為總線提供時鍾獲取MISO的數據位。
2)MCP2515驅動注意點
- 配置之前先確定你的SPI輸出時序正常了再往下調,就是發送CAN_RESET寄存器值時序電平邏輯分析儀正常解析:NSS拉低、0xC0、NSS拉高,時鍾8bit。
- 接下來就是MCP2515的工作模式:正常運行、休眠模式、回環模式、監聽模式、配置模式。數據手冊有,不再贅述。
- CNF1、CNF2、CNF3需要在配置模式下才可以配置,其他模式不行。Reset后也是進入配置模式,如果不放心可以配置CANCTRL寄存器。再想確認可以讀取CANSTAT寄存器
- 我目前只用到B0寄存器,其他還沒用。
- 如果需要數據中斷使能需配置CANINTF和CANINTE,收到后也要清除中斷。
- 記住發送命令后切換模式並不是立即切換,需要等待發送完成后他才會切換成功,如果要正常傳輸,需要讀取CANSTAT進入正常工作模式后再處理之后的工作。
再說點什么
寫得不好敬請諒解,如有錯誤或疏漏,煩請指出,不勝感激。