本帖最后由 yichunshan 于 2019-7-3 10:09 编辑
做个小项目,其中涉及一片SPI FLASH的读写操作,本来没在意,没想到,却两天没解决。现在贴出来请各位指点。
我定位问题,最终发现一个现象,于是做如下实验:
通过主机芯片,对该flash进行如下操作:
1、擦除芯片。(擦除成功)
2、向地址2、3、4(此处省略0x及一堆0哈)写三个数:0x24、0x24、0x24;
3、读取地址0——5:,问题来了,这个6个地址数据依次为:
0xFF \ 0xFE \ 0x48 \ 0x48 \ 0x49 \ 0xFF
分析以上数据:地址0没有写,为FF正常;地址1的最低位为0;地址2地址3数据变为计划写入数据的2倍(左移一位)成了48、地址4同样左移一位且末位补1,成了49,地址5正常。
以上可知,我的三个字节共24位,最高位开始并不是从地址2开始,而是从地址1的最低位开始。
我现在不能定位是我写的问题,还是读的问题了。。请各位给点指点,谢谢。
我自己已经检查的问题:
1、关于读操作,读内存是上述情况,不过读芯片ID等,是正确的;不过如图所示,读取数据时候,flash数据输出并非如手册中那样在下地址位最后一位下降沿开始输出,而是在最后一位的上升沿就开始了。
2、关于SPI读写时序,我是安装芯片时序设置的,出现上述问题后,SPI的四种模式我都试过,问题依然存在;
3、关于芯片,是AT25SF081,并且我试两片均是如此;
4、关于代码,这个帖子没贴,因为不在一个电脑上不能截图,从逻辑分析仪上能直观看到逻辑,这里代码也就不那么重要了(是否如此?)
下面芯片写操作时序(读基本相同,不同是在于第一个发送的操作码不同)、写操作的逻辑分析仪情况、读操作的逻辑分析抓取情况以及放大后0x49.
|