1.概要
因为公司业务需要,需要将某款产品从ethercat总线替换为CAN总线。作为刚从PLC转行到FPGA的工程师,这也是我第一次独立开发产品。拿到工作需求后,立马看手册,发现手册内容繁多,寄存器很多,为此花费了大量时间筛选和测试,最后终于将其简化,实现了CAN的通讯功能。
在实现过程中,刚开始采用了面向过程的控制方式,结果发现仅仅实现一个初始化功能就有上千行代码,最后参照软件的编程方式,面向对象,以方法的方式实现SPI的数据访问,结果良好。
2.硬件搭建
最初的设定是一个CAN做主站,4个做从站,用到5个MCP2515。但是因为第一次做该类产品,害怕让项目周期延长,所以最终实现方式就是1个CAN做主站,1个CAN做从站,共搭建4路,使用8个MCP2515模块。具体连接图如下:
3.详细流程
MCP2515分成了初始化,发送和接收功能,此3部分可在操作手册中找到,在代码中我进行了部分简化,只使用了spi的4路信号,而中断引脚,复位引脚,发送引脚和接收引脚均使用软件代替,没有占用FPGA的IO资源。接收和发送各使用了一个缓冲器。
3.1初始化流程
初始化流程按以下顺序执行:
上电等待--进入测试模式(H0F)--设置波特率(H28-H2A)--设置中断