CAN通信测试

创建vivado工程

在已有的硬件平台上根据原理图增加参数配置:

之前创建的工程都是通过PS UART0打印调试信息。开发板还有一个PL UART。该UART由PL侧(BANK35)的引脚通过USB转串口芯片(CH340X)转成USB接口的。PS端的UART1可以通过EMIO的方式扩展到PL侧的这两个引脚上。这次我们就通过该串口输出调试信息。

CAN也是通过EMIO的方式扩展到PL侧的B35_IO0和B35_IO25引脚上

VeryCapture_20250619160554

 

VeryCapture_20250619160536

UART1原理图:UART1通过EMIO的方式扩展到PL侧的B35_L20_P和B35_L20_N引脚上

 

image-20250623154702402

VeryCapture_20250619164938

配置界面:

VeryCapture_20250619160015

VeryCapture_20250619164637

在clock配置页面可以配置CAN的时钟,后面配置CAN的波特率和采样点需要用到这个时钟。

image-20250808161826231

点击OK,同样,右击CAN_0,UART_1_0,点击Make External,软件会自动在顶层模块中自动生成与CAN_0,CAN_0,UART_1_0 接口对应的外部引脚:进行后续操作:

VeryCapture_20250619170853

根据原理图配置完成界面:

image-20250623154934543

image-20250623154914751

综合、实现、生成bitstream后,导出新.xsa文件

VeryCapture_20250618121240

创建vitis工程

在vitis里面平台工程更新一下:右击创建的平台工程,点击Update Hardware Specification:选择.xsa文件路径,出现以下弹框,点击OK,说明更新成功。

VeryCapture_20250618121412

由于我们要通过EMIO方法用UART1打印调试信息,而平台默认是用UART0打印,所以我们要修改一些平台信息,即BSP信息:

同样,虽然有俩个Board Support Package,但一定修改的是下面的内容,修改上面的不会有效果。最后点击OK。

打开Board Support Package->Modify BSP Setting->standalone将ps7_uart_0修改为ps7_uart_1。这样标准输入输出的串口就被指定到ps uart1上了。

VeryCapture_20250619170310

代码中的体现:

VeryCapture_20250619164453

然后重新build平台工程。

接着进行应用工程的创建,唯一不同的点在选择模板时选择空的.c文件。

将我们提供的例子里的源码添加到工程中。你也可以参考vitis中自带的测试工程。一般路径在vitis在安装目录下:Xilinx\Vitis\2021.1\data\embeddedsw\XilinxProcessorIPLib\drivers

CAN波特率及采样点配置

ZYNQ7020的CAN波特率配置需要通过设置CAN控制器寄存器来实现。具体来说,需要计算并设置CAN_BTR0和CAN_BTR1寄存器的值,以达到所需的波特率和采样点。

以下是更详细的步骤和解释:

确定所需波特率和采样点:

首先,需要明确所需的CAN波特率,例如500kbps或1Mbps。同时,也需要确定采样点,通常建议设置为85%左右。

有关采样点的配置,根据CiA(CAN in Automation)的建议是: (1)一般配置在75-80%的位置 (2)选择采样点位置在85%左右为佳 (3)波特率 > 800K:75%  波特率 > 500K:80%  波特率 <= 500K:87.5%

波特率及采样点配置都需要参考下图来计算 image-20250714100140699

Sync Segment:同步段(sync_seg ) Propagation Segment : 传播时间段(prop_seg ) Phase Segment 1 :相位缓冲段1(phase_Seg1 ) Phase Segment 2 :相位缓冲段2(phase_Seg1 )

计算BTR0和BTR1寄存器的值:

根据CAN控制器的技术手册,波特率和采样点与BTR0和BTR1寄存器的关系如下:

配置CAN控制器寄存器:

在ZYNQ7020的CAN控制器中,找到对应的寄存器,并将计算出的值写入CAN_BTR0CAN_BTR1

启动CAN控制器:

完成寄存器配置后,需要启动CAN控制器,使其进入工作状态。

编译调试

按照IIC文档的编译调试步骤即可。

需要注意的是,这次和电脑连接的USB串口改为开发板上的PL_UART。

CAN通信测试通常需要至少两个独立的CAN通道,其中一个作为发送端(Tx),另一个作为接收端(Rx),以验证数据的完整收发功能。目前开发板仅有单个CAN通道,所以无法直接实现自发自收的测试场景。需要单独准备一个CAN设备。

如果没有CAN设备,只能进行回环测试:

image-20250707174425272

回环模式调试结果如下:

image-20250707180331312

 

如果有另一个CAN设备,则可以进行普通模式。

如果使用我们的两个开发板,在一台电脑上,使用两个vitis分别通过jtag口调试两个开发板的CAN通信,则需要先要配置一下jtag端口。

一台电脑同时调试两个开发板

默认情况下,jtag仿真器的端口是3121。如果两个仿真器要分别连接到开发板,则需要给不同的仿真器指定不同的端口。

再在vitis中将相应的工程配置到相应的端口上

Image

Image

调试时选择相应的端口服务:

image-20250707180009861

image-20250707180041016

 

image-20250707172958122

普通模式调试结果如下,完成发送数据并打印出另个一设备所收到的数据再发过来:

发送的数据:

image-20250707175027067

接收到的数据:

image-20250707175714335