ZYNQ7020的程序固化

一、启动流程介绍
普通的 fpga 一般是可以从 flash 启动,或者被动加载,但是zynq不行,zynq必须ps端参与
zynq 的启动是由 arm 主导的,包括 fpga 程序的加载, zynq 启动一般为3个阶段,最少2个阶段:
1、阶段0:stage-0 boot (bootrom)
阶段0,主要是运行芯片内部固化的bootrom程序,这个bootrom主要是识别启动模式(spi/sd/nand/nor/)是哪一种?
1)、根据启动模式,设置相应的外设,当然有引脚复用了,还有时钟;
2)、将fsbl从启动介质中搬移到ocm(on-chip memory)中
3)、跳转到fsbl处执行,将控制权交给fsbl程序
2、阶段1:fsbl(first stage bootloader )
fsbl(第一阶段引导加载程序)在bootrom之后启动,这个bootrom将fsbl加载到ocm(on-chip memory )
fsbl负责下面的几项工作:
1)、初始化ps端的配置数据(使用xilinx硬件配置工具提供的);
完成mio分配、时钟pll、ddr控制器初始化,sd、qspi控制器初始化
2)、通过启动模式从启动介质读取bitsttream文件,并用它烧写pl端程序
3)、加载第二阶段bootloader或者逻辑代码到ddr内存
4)、切换到第二阶段bootloader或者逻辑代码运行
下图是一个简单的fsbl流程图:
3、第二阶段启动流程:second stage bootloader
第二阶段引导加载程序是可选的,并由用户设计,一般是在跑系统的情况下使用,比如 linux 系统的u-boot(用petalinux 工具制作 linux 系统 )
二、制作fsbl第一阶段的启动代码
1、新建一个名为 fsbl 的 app,特别注意硬件平台选择我们自己配置的ps_uart_warpper_hw_platform_0 ,点击next
2、在弹出的对话框选择zynq fsbl,点击finish
3、然后软件会自动的进行编译fsbl,时间看电脑的性能
4、等编译完成,修改代码,添加调试宏定义 fsbl_debug_info
这个宏可以在启动输出 fsbl 的一些状态信息,有利于调试,但是会导致启动时间变长。
5、修改后保存, sdk 默认会自动编译,生成 fsbl.elf 文件。也可以右键点击build project手动编译
6、我们的工程文件夹包含很多外设文件ps7_init.c, nand, nor, qspi, sd 等
7、fsbl的 main.c 中,第一个运行的函数就是 ps7_init ,这个fsbl内容也可以根据自己需要进行更改,例如加点自己的打印信息
8、创建 boot 文件 
8.1、选择 app (就是我们的应用:ps_uart_hello)工程,右键选择 create boot image
8.2、在弹出的对话框中可以看到bif文件和boot.bin的生成路径
bif文件是生成boot.bin文件的配置文件;
boot.bin是我们需要的启动文件,可以烧写到sd卡、qspi里
8.3、在弹出的对话框,boot image partitions 列表中有要合成的文件 
第一个文件一定是 bootloader 文件,就是上面生成的 fsbl.elf 文件;
第二个文件是 fpga 配置文件 bitstream,本实验没有pl端程序,所以bitstream,不需要添加;
第三个是应用程序,在本实验中为 ps_uart_hello.elf
8.4、由于没有 bitstream,在本实验中只添加 bootloader 和应用程序。点击 create imag
8.5、在生成的目录下可以找到boot.bin文件
三、sd卡烧写及测试
1、格式化 sd 卡,只能格式化为 fat32 格式,其他格式无法启动 
2、放入 boot.bin 文件,放在根目录 
3、d 卡插入开发板的 sd 卡插槽 
4、启动模式调整为 sd 卡启动 
开发板设置拨码为【 101001(1~6 sd卡 模式)】
5、打开串口,开发板上电
6、可以看到sd卡启动成功,红色部分为fsbl打印信息,绿色为我们的app打印信息
7、sd卡固化成功
四、qspi程序固化
qspi 烧写有2种方式:xsdk软件烧写、或者vivado软件烧写
五、qspi烧写及测试(xsdk软件烧写)
首先将开发板设置为jtag模式【 010101(1~6 jtag 模式)】
1、在 sdk 菜单 xilinx -> program flash
2、参数配置
、hardware platform 选择我们自己定制的平台;
、image file 文件选择要烧写的 boot.bin;
、fsbl file 选择创龙定制的 fsbl.elf,只有用这个 fsbl 才能烧写(我会另写一篇博客单独写怎么定制fsbl.elf文件);
、选择 verify after flash,在烧写完成后校验 flash
3、注意:第一次固化的时候,里面有uboot在执行,烧写不成功,所以要先在软件点固化,然后快速给开发板上电
4、将启动设置为qspi【 100101(1~6 qspi 模式)】,验证固化有没有成功
5、打印的信息和我们在dubug的时候一致,代表我们固化成功
五、qspi烧写及测试(vivado软件烧写)
1、在 hardware manger 下选择器件,右键 add configuration memory device
2、选择尝试 winbond,类型选择 qspi,宽度选择 x4-single,这时候出现 w25q128
选择红框型号,开发板使用 mt25ql256aba1ew9-0sit,但是不影响烧录
3、在弹出的对话框,提示我们是否立即烧写,点击ok
选择ps_uart_hello/bootimage/目录的boot.bin,选择fsbl/debug/目录下的fsbl.elf文件
4、提示我们当前是处于qspi模式的,如果编程失败,请更改模式,再次重试
5、我们将启动模式改为jtag模式【 010101(1~6 jtag 模式)】
6、断电上电,再次尝试烧写,没有刚才的警告信息了
7、再将启动模式切换为qspi模式,qspi【 100101(1~6 qspi 模式)】,验证固化有没有成功
六、到此ps端的程序固化成功


湖北FM广播电台频率
电源中+3.3V有什么用?如果3.3 V电源的异常输出,如何解决呢?
四足机器人测量模型介绍
光纤组件市场两年来首次出现衰退
德州仪器推出业界射频集成度最高的RF430安全MCU
ZYNQ7020的程序固化
中微亿芯将整合国内相关FPGA资源,带动集成电路产业发展
海得逻捷科技发布了仅重152克的SAM-60超紧凑型频谱仪探头
中国电信 SA才是实现5G领先的正确路径
新一代视觉技术赋能供应链企业迈向新“视”界
续航小能手:魅蓝Note 5千元旗舰体验
什么是数字音频
中国智能手机制造商利润低,远远落后于苹果
激光圆管切割机多少钱一台与哪些因素有关
液力耦合器和液力变矩器的区别
银联全产业链加码移动近场支付
DSX CableAnalyzer系列开售 以太网小型连接器ix Industr专用适配器
小米6最新消息:小米6升级MIUI8.2.17系统并没解决充电重启门,是有人黑还是问题大了?
特斯拉正式向中国车主推送V9.0版本软件
微波炉磁控管内部结构和好坏判断