Zynq MPSoC 更换GD25Q128/MX25L128/W25Q128等低容量SPI FLASH无法启动分析与解决

现象描述:
  1. 可以使用vivado 烧录整个flash,无任何报错。
  2. 修改fsbl打开调试日志开关,切换到qspi启动模式,上电无法启动,串口也无任何打印消息。
  3. 通过vitis调试工具直接将uboot载入内存中运行无任何问题,sf probe 也能读取到flash型号”SF: Detected mx25l12805d with page size 256 Bytes, erase size 64 KiB, total 16 MiB“
  4. 使用vitis调试fsbl也能正常输出日志

综上所述:开始怀疑是兆易创新 GigaDevice 的FLASH(GD25Q128)不兼容MPSOC,但更换旺宏(MX25L128) 效果依然依旧。在fsbl中打开调试日志开关,系统切换到qspi模式依然无任何输出,因此怀疑是bootrom未能成功读取FLASH中的数据至OCM中,导致fsbl调试信息都没输出。

通过jtag调试实锤:
  • 查看(ug1085-zynq-ultrascale-trm.pdf)第251页,关于”CSU BootROM Error Codes“相关描述;确定可以通过”CSU_BR_ERR“寄存器,读取到BootROM启动报错的相关信息。

img

  • 查看寄存器手册:”Zynq UltraScale+ Devices Register Reference(UG1087)“

img

  • 可以知道"0x00FFD80528"为”CSU_BR_ERR“寄存器地址。Bits [15:0]为BootROM Error Code.
  • 通过连接jtag到单板,使用xsct.bat连接;读取相应寄存器值(0x80002400)。
xsct% connect
tcfchan#0
xsct% source D:/Xilinx/Vitis/2022.2/scripts/vitis/util/zynqmp_utils.tcl
xsct% targets
  1  PS TAP
     2  PMU
     3  PL
  4  xcku5p
  5  PSU
     6  RPU (Reset)
        7  Cortex-R5 #0 (RPU Reset)
        8  Cortex-R5 #1 (RPU Reset)
     9  APU (L2 Cache Reset)
       10  Cortex-A53 #0 (APU Reset)
       11  Cortex-A53 #1 (APU Reset)
       12  Cortex-A53 #2 (APU Reset)
       13  Cortex-A53 #3 (APU Reset)
xsct% targets -set -nocase -filter {name =~ "*A53*#0"}
xsct% rst -processor
Info: Cortex-A53 #0 (target 10) Stopped at 0xffff0000 (Reset Catch)
xsct% mrd 0x00FFD80528
FFD80528:   80002400

xsct%
  • 可以看到bit 31 位被置位,表明BootRom启动遇到了错误;BootROM Error Code为0x2400.
  • 通过Table 11‐8: BootROM Error Bits 可知,First Image Error 为0x24.

img

  • 查表可知0x24对应的是(Error occurred during QSPI 32 boot mode initialization.)

img

问题总结:
  • 因flash(MX25L12835F)读写不支持Quad-SPI (32b)模式,导致使用Quad-SPI (32b)模式下,BootROM无法读取到数据,导致启动失败。

img

  • 硬件默认设计的时候只预留了Quad-SPI (32b)模式。
    在这里插入图片描述
最终解决:
  • 修改zynqmp启动模式为Quad-SPI (24b),修改Mode Pins[3:0]引脚的电平分别为0001(因硬件默认将PS_MODE0通过1k电阻接地了,当然只能飞线了),上电后成功启动。
    在这里插入图片描述

  • 可以看到fsbl打印消息”QSPI 24bit Boot Mode “。

  • 至此完美解决问题。

Xilinx Zynq MP First Stage Boot Loader 
Release 2021.2   Oct 13 2021  -  07:15:53
MultiBootOffset: 0x0
Reset Mode	:	System Reset
Platform: Silicon (4.0), Cluster ID 0x80000000
Running on A53-0 (64-bit) Processor, Device Name: XCZU15EG
Processor Initialization Done 
================= In Stage 2 ============ 
QSPI 24bit Boot Mode 
QSPI is in single flash connection
QSPI is using 4 bit bus
FlashID=0xC2 0x20 0x18
MACRONIX 128M Bits
Multiboot Reg : 0x0 
QSPI Reading Src 0x0, Dest FFFF0040, Length EC0
.QSPI Read Src 0x0, Dest FFFF0040, Length EC0
Image Header Table Offset 0x8C0 
QSPI Reading Src 0x8C0, Dest FFFDA0A8, Length 40
.QSPI Read Src 0x8C0, Dest FFFDA0A8, Length 40
*****Image Header Table Details******** 
Boot Gen Ver: 0x1020000 
No of Partitions: 0x5 
Partition Header Address: 0x440 
Partition Present Device: 0x0 
QSPI Reading Src 0x1100, Dest FFFDA0E8, Length 40
.QSPI Read Src 0x1100, Dest FFFDA0E8, Length 40
QSPI Reading Src 0x1140, Dest FFFDA128, Length 40
.QSPI Read Src 0x1140, Dest FFFDA128, Length 40
QSPI Reading Src 0x1180, Dest FFFDA168, Length 40
.QSPI Read Src 0x1180, Dest FFFDA168, Length 40
QSPI Reading Src 0x11C0, Dest FFFDA1A8, Length 40
.QSPI Read Src 0x11C0, Dest FFFDA1A8, Length 40
QSPI Reading Src 0x1200, Dest FFFDA1E8, Length 40
.QSPI Read Src 0x1200, Dest FFFDA1E8, Length 40
Initialization Success 
======= In Stage 3, Partition No:1 ======= 
UnEncrypted data Length: 0x31E8 
Data word offset: 0x31E8 
Total Data word length: 0x31E8 
Destination Load Address: 0xFFFEA000 
Execution Address: 0xFFFEA000 
Data word offset: 0xF540 
Partition Attributes: 0x117 
QSPI Reading Src 0x3D500, Dest FFFEA000, Length C7A0
.QSPI Read Src 0x3D500, Dest FFFEA000, Length C7A0
Partition 1 Load Success 
======= In Stage 3, Partition No:2 ======= 
UnEncrypted data Length: 0x37F99 
Data word offset: 0x37F99 
Total Data word length: 0x37F99 
Destination Load Address: 0x8000000 
Execution Address: 0x8000000 
Data word offset: 0x12730 
Partition Attributes: 0x114 
QSPI Reading Src 0x49CC0, Dest 8000000, Length DFE64
.QSPI Read Src 0x49CC0, Dest 8000000, Length DFE64
Partition 2 Load Success 
======= In Stage 3, Partition No:3 ======= 
UnEncrypted data Length: 0x8000 
Data word offset: 0x8000 
Total Data word length: 0x8000 
Destination Load Address: 0x0 
Execution Address: 0x0 
Data word offset: 0x80000 
Partition Attributes: 0x116 
QSPI Reading Src 0x200000, Dest 0, Length 20000
.QSPI Read Src 0x200000, Dest 0, Length 20000
Partition 3 Load Success 
======= In Stage 3, Partition No:4 ======= 
UnEncrypted data Length: 0x118 
Data word offset: 0x118 
Total Data word length: 0x118 
Destination Load Address: 0x0 
Execution Address: 0x0 
Data word offset: 0x88000 
Partition Attributes: 0x116 
QSPI Reading Src 0x220000, Dest 0, Length 460
.QSPI Read Src 0x220000, Dest 0, Length 460
Partition 4 Load Success 
All Partitions Loaded 
================= In Stage 4 ============ 
PM Init Success
Protection configuration applied
Running ÿNOTICE:  BL31: v2.4(release):xlnx_rebase_v2.4_2021.1_update1-23-g9188496b9
NOTICE:  BL31: Built : 07:41:24, Oct 13 2021


U-Boot 2021.01 (Jun 20 2022 - 11:02:21 +0000)

CPU:   ZynqMP
Silicon: v3
Board: Xilinx ZynqMP
DRAM:  1023 MiB
PMUFW:	v1.1
EL Level:	EL2
Chip ID:	zu67dr
WDT:   Started with servicing (60s timeout)
MMC:   mmc@ff160000: 0
Loading Environment from SPIFlash... SF: Detected mx25l12805d with page size 256 Bytes, erase size 64 KiB, total 16 MiB
OK
In:    serial
Out:   serial
Err:   serial
Bootmode: QSPI_MODE
Reset reason:	EXTERNAL 
Net:   
ZYNQ GEM: ff0b0000, mdio bus ff0b0000, phyaddr 1, interface sgmii
mii bus: eth0 phy_mask: 2 devad: -1 get_phy_id:0x4f51e91a
Get yt8521S mode: 2, poll or utp
find phy drv name: YT8531S Ethernet
hw_strap_mode: 0x3

Warning: ethernet@ff0b0000 MAC addresses don't match:
Address in DT is		00:0a:35:00:57:ae
Address in environment is	00:0a:35:00:1a:8b
eth0: ethernet@ff0b0000AXI EMAC: a1020000, phyaddr 0, interface mii
, eth1: ethernet@a1020000AXI EMAC: a1030000, phyaddr 0, interface mii
, eth2: ethernet@a1030000
Hit any key to stop autoboot:  0 
MPSOC> 
结尾寄语
  • 下一篇我们讲解如何驱动fsbl默认不支持的flash,例如上面提到的GD25Q128。
  • 作者才疏学浅,文中难免有纰漏的地方,希望读者可以指出,您的点击和评论都是博主码字的动力,感谢大家支持。
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
W25Q128是一种QSPI闪存芯片,常用于存储程序代码和数据。在Vivado中,可以使用Xilinx系列FPGA来控制W25Q128的读写操作。根据引用,可以找到W25Q128的数据手册以及附带的Verilog程序。 引用描述了一种现象,即在将FSBL切换到QSPI启动模式后,上电时无法启动且串口没有任何打印消息。但是通过Vitis调试工具将U-Boot加载到内存中运行时没有遇到任何问题,并且可以通过"sf probe"命令读取到正确的闪存型号。 根据提供的信息,W25Q128在Vivado中可以通过Xilinx系列FPGA进行控制和读写操作,同时可以使用Vitis进行调试。由于问题没有具体说明,无法进一步提供更详细的答案。如果您有特定的问题或需求,请提供更多细节,以便我能够给出更具体的回答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Zynq MPSoC 更换GD25Q128/MX25L128/W25Q128容量SPI FLASH无法启动分析解决](https://blog.csdn.net/xsxsa/article/details/128387279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [FPGA控制QSPI Flash及Verilog程序.docx](https://download.csdn.net/download/syrg520/12766423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值