嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > Zynq中程序存储位置和设置方法

Zynq中程序存储位置和设置方法

Zynq中存储程序的地方有QSPI Flash,SD卡,EMMC。

Zynq的程序分为三部分,上电启动的引导程序(fsbl),FPGA的程序,arm程序。这里以arm程序存储位置为主进行讨论。

1 ARM为裸机程序

裸机程序比较小,可以将全部程序(fsbl,FPGA的程序,arm程序)一起存储在QSPI Flash,SD卡,EMMC中的任何一个位置。

1.1 固化在QSPI FLASH

使用JTAG和sdk固化。

或者先运行程序,然后通过程序将可执行文件写入到QSPI Flash中,然后将启动方式设置为QSPI Flash启动,下次启动就可以从QSPI Flash启动了。

1.2 固化在SD卡

通过读卡器将可执行文件复制进SD卡,将启动方式设置为SD卡启动,下次启动就可以从SD卡启动了。

1.3 固化在EMMC中

先运行sd卡中的程序(或者通过jtag运行程序),然后通过程序将可执行文件写入到emmc中,然后将启动方式设置为emmc启动,下次启动就可以从emmc启动了。

2 ARM为运行linux的程序

linux跟文件系统一般比较大,全部固化在QSPI Flash中装不下。可以在QSPI Flash中固化一部分。

2.1 部分固化在QSPI FLASH中

可以在QSPI Flash中固化 fsbl+uboot+FPGA的程序+linux内核+设备树,将根文件系统存储在emmc中。

fsbl+uboot本身已经可以运行,uboot运行后会将其余部分拷贝到内存继续运行。以下是uboot中的zynq-common.h中的一部分程序。

"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
"sf probe 0 0 0 && " \
"sf read ${bitstream_load_address} 0x120000 ${bitstream_size} && " \
"fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && " \
"sf read ${kernel_load_address} 0x540000 ${kernel_size} && " \
"sf read ${devicetree_load_address} 0x520000 ${devicetree_size} && " \
"bootz ${kernel_load_address} - ${devicetree_load_address}\0" \