基于NIOS II的双端口CAN通信回环测试
小梅哥编写,未经授权,严禁用于任何商业用途
说明:本稿件为初稿,如果大家在使用的过程中有什么疑问或者补充,或者需要本文中所述工程源文件,欢迎以邮件形式发送相关内容到我的邮箱xiaomeige_fpga@foxmail.com。如果需要FPGA开发套件,可以上我们的淘宝网址选购:https://xiaomeige.taobao.com。
CAN通信基本概念
略(我暂时也不会多少,会的人也不用我讲,所以第一稿略去本部分)
使用FPGA实现CAN通信
硬件电路
针对小梅哥红色Starter教学板,使用Starter教学板主板和多功能通信板实现。Starter教学板上有SDRAM存储器、EPCS存储器,多功能通信板上有两个CAN收发器,收发器型号为TI的VP230。多功能通信板上CAN电路如下所示:
多功能通信板上的两路CAN共有4个信号需要与FPGA主板连接,分别为CAN0_TXD、CAN0_RXD、CAN1_TXD、CAN1_RXD,多功能通信板使用一个40针的简易牛角座,通过排线连接Starter开发板或者AC6102或AC620开发板。
CAN0_TXD、CAN0_RXD、CAN1_TXD、CAN1_RXD这些信号分别分配在简易牛角座的6、7、8、9号引脚上(顺序不对应,请读者自行核对上图端子与信号名,也可直接查看多功能通信卡背面的信号功能名称)。下图为Starter开发板和多功能通信卡的连接实物图,多功能通信卡使用40p简牛排线连接到Starter的GPIO0上。
按照上述连接方式,则CAN0和CAN1与Starter开发板上FPGA引脚的连接关系如下表所示:
CAN电路引脚分配 |
|||
插件引脚编号 |
信号功能 |
对应主板接口功能引脚 |
与FPGA相连管脚 |
P3_6 |
CAN1 TXD |
GPIO5 |
PIN_L8 |
P3_7 |
CAN1 RXD |
GPIO6 |
PIN_M8 |
P3_8 |
CAN0 TXD |
GPIO7 |
PIN_P8 |
P3_9 |
CAN0 RXD |
GPIO8 |
PIN_M7 |
做回环测试时,请按照下图所示的连接方式,用杜邦线或者专用的防呆连接线(默认有配送2根)进行连接
系统框架设计
整个CAN通信系统基于NIOS II软核CPU和完全兼容SJA1000芯片的CAN通信软核IP(以下简称SJA1000兼容IP)。SJA1000兼容IP实现CAN通信底层的协议实现,NIOS II CPU实现对SJA1000兼容IP的控制以及应用层数据的收发,整个系统框图如下所示:
NIOS II CPU:实现对SJA1000兼容IP的控制以及应用层数据的收发
SJA1000兼容IP:实现CAN通信收发底层协议的处理
JTAG UART:调试数据打印,在NIOS II软件开发IDE的控制台上打印信息
UART:调试数据打印,使用Starter板上USB转串口电路,在PC端用串口调试助手接收并显示调试信息
SDRAM控制器+SDRAM存储器:实现大容量指令和数据的存储,作为NIOS II CPU的运行内存。
VP230收发器:CAN通信电气接口芯片,在多功能通信板上。
回环测试工程的使用
1、按照前面通信板和Starter板的连接示意图连接好两个板,使用自制的跳线将两个CAN口连接到一起,形成回环,给开发板供电,连接USB Blaster下载器。
2、工程名称为can_loopback_test,使用时,将提供的工程包解压到一个不含中文字符的文件目录中,双击can_loopback_test.qpf文件打开工程,注意,工程使用Quartus II 13.0版本创建,其他版本打开请自行处理差异。
3、直接点击Programmer工具,下载outputfiles文件夹下的can_loopback_test.sof
4、在tools中选择Nios II Software Build Tools for Eclipse,切换路径到当前Quartus II工程的目录,如D:fpgastarterdemo_debugcan_loopback_test(此为小梅哥电脑上该工程的目录)
5、工作空间打开后会默认存在两个工程,这里直接选中两个工程,然后delete删除掉。
6、然后在这个Project Explorer空白处右击,选择Import选项。
7、选择导入已经存在的工程到工作空间中。
8、定位路径到当前工程所在路径,点击确定,就会自动找到已经存在的工程,然后点击Finish即可。
9、展开新导入的can_loopback_bsp工程,找到settings.bsp文件,双击打开,修改下面两个位置为你工程当前路径。
10、修改完成之后,选中can_loopback_bsp,右击选择NIOS II,然后选择Generate BSP。
11、选中can_loopback工程,按键盘组合键Ctrl + B启动对整个工程的编译,编译完成后,可以看到整个工程的程序文件大小。这是默认开启了各种驱动支持的情况,所以文件较大,如果针对性的关闭掉不必要的外设驱动,程序文件大小会大幅下降。
12、依次点击Run——>Run Configurations,打开下载配置界面。
13、选择需要运行的工程,刷新Jtag链,使得Run按钮可选后,点击Run按钮即可开始下载程序。
14、程序运行起来后会在Console窗口持续打印接收到的数据值,如果断开或者短路两个CAN接口之间的连线,则不会再显示接收到的数据内容,仅显示Tx_Done。
15、分析软件代码
该部分内容就留给客户自己去分析啦,能用上CAN接口的客户,肯定不缺这方面能力和经验
16、固化程序到开发板上掉电运行。
首先选中can_loopback_bsp工程,右击选择NIOS II,然后选择BSP Editor。在打开的界面中,先设置标准输入输出设备为uart_0。然后选择Advance选项,勾选上图中圈出来的两个位置,然后Generate,再Exit。
17、此时再次Ctrl + B全编译工程,然后使用标准的烧写流程将sof和elf烧写到开发板上就可以啦。烧写完成后重新对开发板上电,使用USB线连接Starter开发板和电脑,使用串口助手就可以接收到调试信息了。