先说两句
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进入正常工作模式后再处理之后的工作。
再说点什么
写得不好敬请谅解,如有错误或疏漏,烦请指出,不胜感激。