问题描述
在使用ZYNQ进行flash程序烧录并从QSPI的模式启动时,遇到无法烧录,烧录后无法启动的问题,中间对vivado和SDK的使用有了一定了解,对flash的操作也有了一些认知,在这里做一些记录。
flash烧录问题
我使用的vivado软件是2019.1版本;
当使用SDK做好boot.bin文件和FSBL文件后,按照正常流程操作进行flash烧录,发现无法烧录,此时我的板子是QSPI的模式,报错大概意思是并非JTAG模式,如果失败建议尝试JTAG模式烧录,由于我的板子没有预计切换JTAG的模式因此采用飞线的方式切到JTAG模式;
JTAG模式下烧录依旧报错,报错信息如下,原因是读不到flash的ID:
[Xicom 50-186] Error while detecting SPI flash device - unrecognized JEDEC id bytes: 00, 00, 00
Problem in running uboot
Flash programming initialization failed.
ERROR: Flash Operation Failed
示波器抓信号定位;
在这里插入图片描述
ZYNQ发送9F读取flash状态寄存器,然后CLK信号停止5-6us后又继续,怀疑是不是clk没有了导致flash不响应,咨询赛灵思技术支持认为和这个没关系。
后来在看flash规格书时忽然想到JTAG模式的MIO5和FLASH的RESET引脚是复用的,如果强制改成拉低就把flash复位了,而因为我是飞线的,没有下拉电阻,这时flash一直处于复位状态,是不能正常响应的,因此没有应答ID,然后为了验证猜想在JTAG模式下把板子上电后再恢复到QSPI的状态,也就是把MIO5拉高。这时烧录发现烧录进去了,烧录的log也提示识别到了flash的型号,我用的就是IS25LP128F
我用示波器看烧录时也确实有数据在传输,解析协议发现flash回复的是9D 60 18;最终提示flash烧录成功;
QSPI启动问题
flash烧录进去后发现板子从QSPI启动时依旧不能启动,然后在fsbl里添加打印信息
重新烧录后打印如下:
Xilinx First Stage Boot Loader
Release 2019.1 Jul 9 2024-19:12:17
Devcfg driver initialized
Silicon Version 3.1
Boot mode is JTAG
Xilinx First Stage Boot Loader
Release 2019.1 Jul 9 2024-19:12:17
Devcfg driver initialized
Silicon Version 3.1
Boot mode is QSPI
Single Flash Information
FlashID=0x9D 0x60 0x18
128M Bits
QSPI is in single flash connection
QSPI is in 4-bit mode
QSPI Init Done
Flash Base Address: 0xFC000000
Reboot status register: 0x60500000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x88888888
应该是QSPI模式启动异常,在拉软件一通分析后决定尝试SPI模式试试,修改如下:
修改后再次烧录启动正常,并且尝试改为dual SPI的模式后验证也可以启动;并且在启动时抓SPI波形发现flash应该是没有响应QSPI的读指令(这一点不确定,没有验证)
也发现读flash的状态寄存器时回复的值是SPI模式,不是QSPI模式, 不确定flash是不是要配成QSPI的模式才能响应。
总结
通过验证,排除了器件焊接问题和器件质量问题,怀疑是器件兼容性问题,后来厂家也发来信息说是应该是不支持这个片子的flash进行QSPI的模式。这个问题先告一段落。
PS:
flash操作的几个常用命令的含义: