此文章通过逐步排除故障的办法,锁定了问题原因,现在看来真的是让人啼笑皆非。最终将GD的flash芯片更换为华邦的FLASH芯片便解决了。以下是具体排查解决过程。
FPGA核心:ZYNQ 7010 /ZYNQ 7020
开发板平台:自制7010开发板
开发软件:Vivado 2020.2 和 vitis 2020.2
问题现象:使用JTAG编程器,通过Vitis IDE向开发板QSPI FLASH烧录固件,烧录无法完成,提示错误: Zynq> ERROR: [Xicom 50-186] Error while detecting SPI flash device - unrecognized JEDEC id bytes: c8, 40, 18
具体错误代码:
U-Boot 2020.01-00107-g4a29a62 (Oct 13 2020 - 16:46:21 -0600)
Model: Zynq CSE QSPI SINGLE Board
DRAM: 256 KiB
WARNING: Caches not enabled
In: dcc
Out: dcc
Err: dcc
Zynq> sf probe 0 0 0
Warning: SPI speed fallback to 100 kHzunrecognized JEDEC id bytes: c8, 40, 18
Failed to initialize SPI flash at 0:0 (error -2)
Zynq> ERROR: [Xicom 50-186] Error while detecting SPI flash device - unrecognized JEDEC id bytes: c8, 40, 18
Problem in running uboot
Flash programming initialization failed.ERROR: Flash Operation Failed
如下图:
解决问题思路:因为是自制开发板,所以区分核心板的不同功能先进行逐步检查,排除硬件故障。第一步:排除加载固件时选项错误的问题。下图这样设置是正确的。Flash Type 选择 qspi-x4-single
第二步:判断设计和焊接问题。检查原理图部分的boot启动选项,通过万用表检查开发板的MIO上下拉电阻情况。结论:有关boot启动选项的各个引脚,对地、对vcc电阻正常,非设计问题。
第三步:判断排除核心焊接问题。从JTAG启动后,通过简单的hello world程序检查核心是否正常工作。经查:JTAG可启动,可识别到主控,加载bit流文件后核心的DONE LED灯点亮。结论:非核心焊接问题,非DDR问题。
第四步:判断晶振是否工作。把33.333M有源晶振去掉,重复第一步,DONE LED灯未点亮。结论:原开发板晶振工作正常。
综上检查后,确定自制开发板硬件功能正常,排除了硬件问题。下一步,通过搜索同样问题看看有无解决办法。
通过搜索得知,出现以上错误提示的共有两类:
第一类:识别FLASH芯片的JEDEC未 00,00,00
Zynq> ERROR: [Xicom 50-186] Error while detecting SPI flash device - unrecognized JEDEC id bytes: 00, 00, 00
这类问题是由于在生成固件(Create Boot Image)的时候,选择的bootloader文件与现有的开发板硬件配置不匹配,导致不能正确识别flash芯片。需要重新检查vovado中的block设置,并将xsa文件重新加载到vitis中并build,之后在Create Boot Image。
第二类:识别到FLASH芯片但仍未能加载固件
Zynq> ERROR: [Xicom 50-186] Error while detecting SPI flash device - unrecognized JEDEC id bytes: c8, 40, 18
Problem in running uboot
Flash programming initialization failed.
ERROR: Flash Operation Failed
这类问题,网上找到的解决办法是在vivoda的block设计中,将QSPI FLASH的Feedback Clock选中。(下图中未选中)
但此办法仅针对于Vivoda 2020.1之前的版本,在Vivoda 2020.2之后的版本中修复了此问题。
最终在参考了下篇文章中得到了启示
uboot 增加不同型号的 nor-flash 调试笔记
以上文章提出,识别到的FLASH芯片,不一定在uboot支持的列表中,如果不支持,需要更新uboot列表,此办法比较繁琐。那我便尝试换一颗uboot支持的芯片试试,正好手头有华邦的W25Q128芯片。果断换上,正确识别,烧录成功。。。。。。。。。。。。。
SF: Detected w25q128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB
device 0 offset 0x840000, size 0x8608
SF: 34312 bytes @ 0x840000 Written: OK
Zynq> Program Operation successful.
INFO: [Xicom 50-44] Elapsed time = 42 sec.Flash Operation Successful
至此,问题解决。
问题原因分析:使用的GD25Q128芯片,非vitis 的 uboot可以识别的flash芯片,故而导致无法正常加载固件,只需要换成可以识别的华邦的flash芯片即可。
参考: