ZYNQ 从NAND flash启动应用笔记
本文档主要用于ZYNQ从NAND flash启动说明,鉴于网上此类型资料较少,特作此说明。
至于zynq 的两步启动操作本文不在此说明详细可以阅读官方的相关文档和其余的网上的资料
工作主要分为两部分,一部分为在vivado部分的工作和SDK部分的工作,vivado主要是用来生成SDK工程需要使用的platform和FPGA的bit文件
SDK主要用来生成FSBL的.elf的工程,和生成需要下载进在FLASH的boot.bin 文件。
一。bin文件生成和FLASH下载
-
添加zynq的IPcore 生成platform和bit文件
通过点击creat block design弹出对话框之后,然后填入design name和文件夹位置,design name将会是后来的生成的platform的名称,
点击ok之后会显示如下的界面,
然后通过点加号加入zynq7的Ipcore
具体如下两图所示
通过点击ipcore的图形回弹出对话框来对ip进行设置,具体界面如下
此处根据具体的系统在arm侧的管脚情况来进行设置,此处主要完成对于管脚的一个映射以及bank电压的选择,注意此处的电压需要与原理图的管脚电压选择相同,由于本说明是针对NANDflash启动的,此处最主要的是对于NANDflash的选择, 其余可以根据实际情况进行选择,当然也可不选,
接下来是对于时钟的设置,系统默认的时钟是33M时钟,由于本系统采用的是相同的时钟系统硬件时钟, 因此此处不需要修改,但是如果不是的话那可能需要变更部分的设置,另外由于系统只是启动FPGA没有ARM侧的代码因此需要将FCLK_CLK0的勾去掉
此外如果不需要通过FPGA部分传递时钟过来的话则还需要在PS-PL configuration里面将M AXI GP0 interface 的勾去掉,以及FCLK_RESET0_N
具体如图所示:
另外就是DDR的选择,DDR对于NAND Flash是必须的,否则在SDK操作的时候会报错,无法进行flash的烧写工作。因为ARM不能直接对NAND flash直接一个地址一个地址地进行读写,只能整块整块地进行读写操作,因此如果要从NANDflash 启动则需要将flash中的bin文件先用DDR来读取,然后再来进行bin文件操作,此处的DDR操作需要注意的主要有两点,一个首先要勾选DDR,其次是需要勾选板卡所选的器件,另外还有总线位宽等,具体情况根据板卡的实际情况来进行选择。
对于NAND flah启动还需要设置的另一个很重要的地方就是 SMC timing calculation,此处是NAND flash对具体的的读写时序调整参数,主要是调整读写的延迟时间,这里需要根据flash的数据手册来进行设置,手册给定的是最小的时延参数,此处应当设置的比手册中的大一些,另外就是此处的时延的依据应当是CS0 cycle 这才是关键,此参数是根据SMC 时钟频率和CS0 时延计算出来的,本系统使用的是镁光的MT29f2g08abbeahc的nand flash,具体设置成功的参数如下所示
以下两表是手册中的具体时间参数
设置完成后点击ok确认然后再点击图中的run block automation,此步主要是为了生成相应的端口
此处的步骤主要是用来生成如图所示的interface port ,如果想要再次修改IPcore,想要添加部分的port可以通过右键该端口点击creat interface port
此后再需要做的就是两步就是 creat output product 和creat HDL wrapper
具体操作如图所示
generate output product 会生成
creat HDL wrapper会生成顶层的文件,此时需要将原先的顶层模块添加进生成的模块内部。
然后保存生成bit文件
然后再点击file -> export hardware
此时会在选定的文件下生成一个 hdf文件
然后再点击launch SDK
至此vivado部分的工作已经结束了
然后需要在SDK内部建立一个FSBL的工程编译后生成elf文件,并用此文件与FPGA的bit文件生成bin文件,
进入SDK之后新建Application project
然后在新建窗口处填入project name
由于此处是从vivado直接launch的,所以hardware platform直接就已经导入过来了
如果想要更换一个platform (也即arm侧的管脚约束配置等组成的一个硬件的配置文件)可以通过new然后将此hardware platform的hdf文件导入进来,然后project name就是此platform的名称。
其余各项选默认之后,选择新建一个zynq FSBL的工程
finish之后则对工程进行build 生成elf文件
然后就生成bin文件就行
下图主要是生成需要烧写进入flash的bin文件此处默认添加了FSBL的elf文件,和fpga的bit文件,注意此处elf需要在前,且其数据类型为bootloader,手动添加需要注意,而bit文件的文件类型为data类型。
生成boot.bin文件之后就可以烧写flash了
烧写的过程需要填入image file, 此文件在sdk的工程目录下,以及需要FSBL的elf文件,此文件是本工程的FSBL的生成的,然后就可以下载了,下载完成后Zynq的配置拨码开关需要从jtag模式变成nand模式就ok