[Vivado 2020.1]ZYNQ7020折腾之路(四)之荔枝糖Hex固化程序到TF卡/NAND FLASH中
前言
在前面的章节中,我们编写的程序都是存在片上RAM中的。也就意味着,当开发板掉电后,程序就被抹除了。
在本章节中,将会介绍3种程序固化思路,以及实践荔枝糖Hex能够方便使用的两种思路。
本章所用工程搭建教程:https://blog.****.net/qq_36229876/article/details/108237478
程序固化
一般对面FPGA,我们采用的是将程序固化到SPI FLASH种,然后FPGA上电后自动运行SPI FLASH种的程序。(比如我之前用的cyclone iv)
不过 对于ZYNQ来说,我们有了更加多样的程序固化方式:
- 将程序固化在SPI FLASH中
- 将程序固化在 NAND FLASH中
- 将程序固化在TF卡中
对于荔枝糖HEX来说,我们使用2和3两种方式进行程序固化。
首先,我们先从比较简单的将程序固化在TF卡中进行说明。
生成需要固化的.bin文件(PS:由于需要使能不同的管脚,所以即便PL端逻辑相同,但是固化在NAND FLASH中或者TF卡中的.bit文件是不同的,具体见下文)
首先创建一个FSBL文件,通过右侧对这个FSBL工程的介绍,我们提取到大概信息。这个ZYNQ FSBL工程主要是将PL侧的.bits文件和PS侧的.elf文件打包下载到NAND/SPI/NOR FLASH中。当然如果我们使用TF卡的话,就不存在下载的说法了,就直接把.bin文件拖入sd卡根目录就行啦。
然后我们注意到这里有一行报错
This application requires xilffs library in the Board Support Package. You can go back to the previous pages to select a different platform and domain or create a new one with suitable hardware and software.
如何解决这个报错呢?
这个报错的大概意思是 BSP(Board Support Packet,板级支持包) 里面少了个xilffs library。我们只用
在BSP里面添加上这个包就行了。具体操作见博客:https://blog.****.net/qq_36229876/article/details/108238233
然后把需要固化的工程生成.bin文件,点击Create Boot Image然后准备好三个文件,分别是 ps端.elf,pl端.bit,还有FSBL.elf
点击Create Image,完成生成
引导模式选择
将生成的BOOT.bin复制进TF卡把TF卡插入板子上,程序应该是不会运行的。
因为我们注意到,原理图上,default的boot mode是走NAND FLASH
要想走TF卡,得把SDIO_SDDET脚拉低
再次观察原理图,我们发现其实设计了全自动电路
我们把上述的几个原理图连起来分析后,我们可以发现一个事情,说就是当TF卡插入时,会自动进入从TF卡引导程序。当TF卡拔出时,则进入用NAND FLASH引导程序。下面测试的结果也验证了这个原理。(不得不说,设计得挺不错的)
插上TF卡时
拔出TF卡时
固化到NAND FLASH
打开VIDADO 之前的ZYNQ IP Core,为了把程序固化到NAND FLASH中,我们需要把相关引脚给ENABLE了
然后重新综合工程,得到.bits FOR NAND FLASH。然后按照上文章节生成需要固化的.bin文件进行BOOT.bin文件的生成。
然后
然后
还有一个容易出错的地方是,软件自动导入的FSBL文件路径不对,应该设置成工程下面的FSBL文件的fsbl.elf文件(如果DEBUG目录下没有这个文件的话,就Build下FSBL工程)
出现如下错误:
Problem in running uboot
Flash programming initialization failed.
ERROR: Flash Operation Failed
然后查翻了下,需要将FSBL项目下的main.c里面的BootModeRegister = JTAG_MODE
结果还是不行,一直报那个错误,等明天再试试吧。先去睡觉了QAQ。昨晚和女朋友4点钟才去睡觉,今早八点多就起来了,顶不住了QAQ