抓取FPGA启动时与FLASH之间通信的波形记录

文章分析了FPGA(XC7K325T)与FLASH(MX25L51245)之间的QSPI通信波形,重点观察了开始通信阶段。在SPI模式3下解析波形,发现读取命令与Flash手册相符。讨论了MISO线延迟高电平的原因是Flash存储数据全为F。此外,文中提到FPGA在连接仿真器时无法从FLASH启动的问题,可能是由于数据传输中断导致。
摘要由CSDN通过智能技术生成

抓了下FPGA和FLASH之间QSPI通信的波形,FPGA使用的是XC7K325T,FLASH使用的是MX25L51245,波形大概是这样。![在这里插入图片描述](https://img-在这里插入图片描述
blog.csdnimg.cn/cf917bbdf5544c8597418a7f4b8a7d8c.png)

后续的大段波形都是在数据传输,没有什么可看的,所以我主要观察的开始通信阶段的波形。

我抓到了什么

在这里插入图片描述

图中展示的FPGA刚要开始读FLASH时的波形。最初我以为CS线拉低在开始发时钟之后是因为我的实验环境的问题,在芯片管脚上焊的杜邦线可能不等长导致的差距。后来想想十几厘米的杜邦线也差不出来几百纳秒的延迟。
事实上FPGA发出来的波形就是这样的,没有什么问题。分析数据的时候,按照SPI模式3来分析,把CS不使能的时候的两个时钟沿舍弃掉,然后继续向下解析字节就可以了。
解析得到的第一字节是0x0B,查阅FLASH的手册得知这是以单线SPI快速读取数据的命令,使用的是3字节的寻址方式。
在这里插入图片描述
读波形受到的数是:
10_00001011_00000000_00000000_00000000_00111111

舍弃前面未使能的两个时钟,解析到的命令是0x0B0000003F
接下来FLASH会从0地址开始不断返回数据,直到CS被拉高。

最初令我疑惑的点是,为什么波形会像下面的图一样,MISO线会经历那么多个时钟的高电平之后,才开始有数返回。
在这里插入图片描述
我查了很久的手册也不能明白它的含义,直到我打开了向FLASH里下载的.mcs文件:
在这里插入图片描述
突然意识到MISO线一直是高电平,是因为FLASH中本来存储的数据就全是F。我手动读了一下后面有波动的部分的内容,和MCS文件中的内容一致:
在这里插入图片描述
转换成16进制就是:
000000BB11220044
FFFFFFFFFFFFFFF
AA99556620000000
3003E0010000026C
300080010000001220
FPGA以SPI模式读到这里,就把CS拉高不读了。也许读到同步字之后得到了配置的信息转而使用QSPI重新读FLASH

在这里插入图片描述
FPGA发送的命令是6C,正是以QSPI模式,按4字节地址读取的方式。读数的起始地址仍然是0x00000000。这个时候命令仍然是以SPI模式发送的。
在这里插入图片描述
在这里插入图片描述
核验了一下前面的白框里以SPI模式读到的内容和后面的白框里以QSPI模式读到的内容是一样的。

为什么带着仿真器时FPGA不能从FLASH启动

很多时候我们自己画的7系列FPGA的板子会有这么个问题:为什么连接仿真器时,给板子上电,FPGA不能从FLASH里读到程序,拔掉仿真器重新上电就没问题。这里可以用波形图解释一下。
下面的图中是FPGA不插仿真器启动时的波形,可以看到它要传输很长一段时间,至少几秒吧,逻辑分析仪深度不够抓不了完整的波形。中间有时候CS会变高,这个可能是因为往芯片管脚上焊杜邦线之后信号线之间的干扰导致的,它的宽度很短,应该不是FPGA故意发的。
在这里插入图片描述
但是在插着仿真器的时候,波形是像这样:
在这里插入图片描述
最初的数据传输和插着仿真器的时候是一样的,但是后续不知道为什么,CS线会被拉高停止传输。总之用这样的状态读到的数据肯定是不能启动FPGA的,所以插着仿真器的时候FPGA上电不启动直接原因是没能正确读完FLASH。为什么会中止传输就不了解了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值