zynq QSPI启动配置与分区配置

1、需要准备的文件uImage,devicetree,BOOT.BIN(包含了fsbl以及uboot),uramdisk.image.gz,FPGA程序design.bin(注意不是bit)

2、其中设备树中进行的更改为在zynq-zed.dts中添加如下节点,其中compatible = "s25fl256s1";这是因为zedboard用的flash型号为S25FL256SAGMFI00,可以在原理图中看到,而在st_spi_fsm.c中有s25fl256s0和s25fl256s1两个选择,两者同样为256Mb,区别为扇区大小一个为 256 * 1024另一个为64 * 1024。那么到底选哪个呢,可以在uboot下查看,可以看到识别到的flash擦除大小为64kB,所以应该选择s25fl256s1。

Zynq> sf probe
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB
&qspi {
	u-boot,dm-pre-reloc;
	status = "okay";
	is-dual = <0>;
	num-cs = <1>;
	flash@0 {
		compatible = "s25fl256s1";
		reg = <0x0>;
		spi-tx-bus-width = <1>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <50000000>;
		#address-cells = <1>;
		#size-cells = <1>;
		partition@qspi-fsbl-uboot {
			label = "qspi-fsbl-uboot";
			reg = <0x0 0x100000>;
		};
		partition@qspi-linux {
			label = "qspi-linux";
			reg = <0x300000 0x400000>;
		};
		partition@qspi-device-tree {
			label = "qspi-device-tree";
			reg = <0x700000 0x20000>;
		};
		partition@qspi-rootfs {
			label = "qspi-rootfs";
			reg = <0x720000 0x2E0000>;
		};
		partition@qspi-bitstream {
			label = "qspi-bitstream";
			reg = <0xa00000 0x400000>;
		};
		partition@app {
            label = "app";
            reg = <0x1000000 0x100000>;
        };
	};
};

3、其中uboot中进行的更改为uboot/include/configs/zynq-common.h

"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
		"sf probe 0 50000000 0 && " \
		"sf read 0x800000 0xA00000 0x400000 && " \
		"fpga load 0 0x800000 0x400000 &&" \
		"sf read ${kernel_load_address} 0x300000 ${kernel_size} && " \
		"sf read ${devicetree_load_address} 0x700000 ${devicetree_size} && " \
		"echo Copying ramdisk... && " \
		"sf read ${ramdisk_load_address} 0x720000 ${ramdisk_size} && " \
		"bootm ${kernel_load_address} ${ramdisk_load_address}     
               ${devicetree_load_address}\0" \

4、注意设备树地址范围与uboot中的地址范围要一致,而且要与5中烧写的地址范围匹配,然后编译即可。

5、首先使用SD卡启动,进入u-boot命令行,利用tftp服务器进行烧写。

tftpboot 0x800000 BOOT.bin && sf probe 0 0 0 && sf erase 0x0 0x100000 && sf write 0x800000  0x0 0x100000
tftpboot 0x800000 uImage && sf erase 0x300000 0x400000 && sf write 0x800000  0x300000 0x400000 
tftpboot 0x800000 zynq-zed.dtb && sf erase 0x700000 0x20000 && sf write 0x800000  0x700000 0x20000
tftpboot 0x800000 uramdisk.image.gz && sf erase 0x720000 0x2e0000 && sf write 0x800000 0x720000 0x2e0000
tftpboot 0x800000 design.bin && sf erase 0xA00000 0x400000 && sf write 0x800000 0xA00000 0x400000 

6、烧写成功后从spi启动,可以在dev下看到mtdblock0-5,也可以通过cat /proc/mtd查看

zynq> cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00100000 00010000 "qspi-fsbl-uboot"
mtd1: 00400000 00010000 "qspi-linux"
mtd2: 00020000 00010000 "qspi-device-tree"
mtd3: 002e0000 00010000 "qspi-rootfs"
mtd4: 00400000 00010000 "qspi-bitstream"
mtd5: 00100000 00010000 "app"

7、可以看到6中有一个app分区,这个是我用来存放应用程序。当然以上分区大小并不是固定的,可以调节,但是地址范围一定要匹配,而且分区大小也一定要大于此分区所存文件的大小,比如内核大小一定不能超过mtd1分区大小,如果超过了,可以裁剪内核,要不就得增加分区大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值