低速接口项目之串口Uart开发(十一)——zynq PL侧串口在线升级

文摘   2024-11-19 13:57   江苏  
一、zynq PL侧串口在线升级的设计思路

二、zynq PL侧串口在线升级的设计技巧

三、往期文章链接

一、zynq PL侧串口在线升级的设计思路

前面系列文章都是基于PS侧的串口驱动实现BIN文件的接收和缓存。那么如果是纯PL侧代码实现BIN文件的接收、缓存以及log输出,该如何实现?

其实底层原理都差不多,都是要将BIN文件烧录至QSPI flash中,只是接收存储的方式不一样。这个过程中需要用于存储BIN二进制文件,离不开DDR3。对于zynq来说,很多只有PS侧提供了内存DDR3,因此这部分工作就涉及到PL侧调用PS侧的DDR3。

PC电脑端的上位机QT,通过串口发送BIN文件至FPGA的PL端,PL端通过乒乓操作将BIN二进制文件写入PS侧DDR3,待接收完成后,PL侧启动PS侧的QSPI实现flash的更新。

整个操作流程中,需要的设计技巧不少,包括:基本功能串口接收和发送、接收端的乒乓操作缓存、DDR3的AXI接口写入操作以及发送端的ascii log输出功能。至于嵌入式ps,实现DDR3内存数据的DMA读取以及qspi的更新。这些设计技巧,都需要进行开发,后期会逐步实现并更新。

二、zynq PL侧串口在线升级的设计技巧

上述提到了各种设计技巧,其中乒乓操作、PS侧DDR3的AXI接口写入、发送端的ascii log输出以及软件ps侧的DMA读取。至于其他的在前面系列文章已经描述过了。

乒乓操作接收BIN二进制文件,基于双RAM的乒乓操作,大致思路如下:rx接收字节,先写入RAM1固定长度字节,再写入RAM2固定长度字节,两个RAM交叉写入。技巧在当写入一个RAM时,另一个RAM的数据需要搬移到DDR3中,必须在一轮字节接收之内完成,否则就会造成接收字节的丢失。这个工程需要采用状态机来实现RAM的读写切换。

搬移过程中需要调用PS侧的DDR3,采用AXI的接口读写PS侧的DDR3,方式有多种:

第一种:米联客的FDMA对PS侧的DDR3进行写入,详情可以参考文章(基于FDMA和AXI4接口的DDR4遍历读写测试);

第二种:通过xilinx的dma实现ddr3的写入;

第三种:通过Alex的开源dma实现对PS侧的DDR3写入。

很多FPGA也会自己手撕dma,其实开源IP和各个EDA官方的没啥区别,只要自己能掌控了开源的使用技巧,本质上也就是IP,而且还很容易定位bug。

三、往期文章链接

低速接口项目之串口Uart开发(一)——串口UART

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

低速接口项目之串口Uart开发(三)——串口发送模块和接收模块

低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制

低速接口项目之串口Uart开发(五)——QT实现Uart串口寄存器读写工具

低速接口项目之串口Uart开发(六)——zynq系列ps-pl端uart实现共享Axilite内部寄存器的读写

低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能

低速接口项目之串口Uart开发(八)——如何通过ps侧的串口实现zynq的在线升级(一)

低速接口项目之串口Uart开发(九)——如何通过ps侧的串口实现zynq的在线升级(二)

低速接口项目之串口Uart开发(十)——基于EMIO的自定义PL串口实现zynq的在线升级


小灰灰的FPGA
努力成为一名FPGA全栈工程师,分享FPGA、嵌入式、硬件及软件知识,扩充自己的知识面,比如图像处理,通信协议以及数据处理等方向。
 最新文章