zynq平台下的QSPI FLASH烧写问题

2019-10-27 使用jtag下载自己生产的boot_myir.bin成功,串口能够打印。怀疑可能用SD卡的那种方式传递boot不可靠,具体原因不详。下次的实验可以将uboot的IP地址更换,看看是否生效。Uboot更换ip生效。

2019-11-14 烧写内核后产生错误如下:

SF: 4718592 bytes @ 0x500000 Read: OK

SF: 65536 bytes @ 0x800000 Read: OK

Copying ramdisk...

SF: 6291456 bytes @ 0x820000 Read: OK

Wrong Image Format for bootm command

ERROR: can't get kernel image!

不管使用项目的内核还是米尔的内核都是这个问题;有几个方向进行检查,首先看uboot中加载地址是否修改正确。其次修改设备树中烧写的地址。

发现一个重要问题,用TFTP的方式无法成功烧写bin文件。同理如果这个问题不能解决,也说明可能用TFTP烧写的dtb,内核文件也是不成功的。重点解决。找到问题所在可能是TFTP传递地址过高导致,使用0x200 0000 和0x100 0000都不能正确烧写,传递到DDR3的0x8000地址即可正确烧写。具体原因待分析(可以通过查看硬件DDR3实际连接图对比看看)。不过也可以解释为何内核文件不正确。

## Booting kernel from Legacy Image at 02080000 ...

   Image Name:   Linux-3.15.0-xilinx

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    3886088 Bytes = 3.7 MiB

   Load Address: 00008000

   Entry Point:  00008000

   Verifying Checksum ... Bad Data CRC

ERROR: can't get kernel image!

然后再使用0x8000地址烧写后,内核应该是可以起来部分,应该是长度小了导致加载不完全使得CRC校验错误。将uboot的image的size改成0x400000然后将设备树和文件系统的起始地址后移到0x900000.然后不再报内核错误。只要这四个文件正确的写到相应的地址,且文件大小在uboot中设置正确,就不会再有内核或者文件系统不正常加载的问题。

总结:

1、在uboot的源码中设置好针对qspi启动的地址。

2、要确认TFTP是否成功,尤其缓存地址如果太大,会出现烧写不成功的现象。这个在JTAG烧写就可以对比出来。

疑问待解决:

1、为何之前项目使用缓存地址0x200 0000可以正常TFTP烧写,而现在只能使用0x8000的缓存地址;

2、看项目的uimag也差不多4M字节大小,而项目的uboot的地址分配给uimage只有0x300000的大小,却也可以正常启动。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值