OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5021|回复: 4

winbon SPI FLASH(1G bit)读写异常的问题

[复制链接]

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-9-9
在线时间
7 小时
发表于 2017-1-4 18:30:56 | 显示全部楼层 |阅读模式
10金钱
附图的说明详见附件

环境
CPUSTM32F429ZGT6
SPI FLASHW25N01GVZEIG  1G bit


初始化
/************************************管脚初始化*****************************/
GPIO_InitTypeDef GPIO_InitStructure;

         /*使能GPIO 时钟 */
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

         /*配置 SCK, MISO MOSI 为复用功能 */
         GPIO_PinAFConfig(GPIOA,GPIO_PinSource5, GPIO_AF_SPI1);
         GPIO_PinAFConfig(GPIOA,GPIO_PinSource6, GPIO_AF_SPI1);
         GPIO_PinAFConfig(GPIOA,GPIO_PinSource7, GPIO_AF_SPI1);

         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;
         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
         GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;

         GPIO_InitStructure.GPIO_Pin=  GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
         GPIO_Init(GPIOA,&GPIO_InitStructure);

         /*配置片选 */
//      GPIO_PinAFConfig(GPIOA,GPIO_PinSource4, GPIO_AF_SPI1);
         SF_CS_HIGH();          /* 片选置高,不选中 */
         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT;
         GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
         GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_NOPULL;
         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4;
         GPIO_Init(GPIOA,&GPIO_InitStructure);


/**********************************SPI初始化***********************************/
SPI_InitTypeDef  SPI_InitStructure;
/* 打开SPI时钟 */
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

         /*配置SPI硬件参数 */
         SPI_InitStructure.SPI_Direction= SPI_Direction_2Lines_FullDuplex;     /* 数据方向:2线全双工 */
         SPI_InitStructure.SPI_Mode= SPI_Mode_Master;                   /*STM32SPI工作模式:主机模式 */
         SPI_InitStructure.SPI_DataSize= SPI_DataSize_8b;       /* 数据位长度 8 */
         /*SPI_CPOLSPI_CPHA结合使用决定时钟和数据采样点的相位关系、
            本例配置: 总线空闲是高电平,2个边沿(上升沿采样数据)
         */
         SPI_InitStructure.SPI_CPOL= SPI_CPOL_High;                          /*时钟上升沿采样数据 */
         SPI_InitStructure.SPI_CPHA= SPI_CPHA_2Edge;            /* 时钟的第2个边沿采样数据 */
         SPI_InitStructure.SPI_NSS= SPI_NSS_Soft;                        /* 片选控制方式:软件控制*/

         /*设置波特率预分频系数 */
         /*
         SPI时钟最快是2分频,不支持不分频】
         如果是SPI12分频时SCK时钟 = 42M4分频时SCK时钟 = 21M
         如果是SPI3, 2分频时SCK时钟 = 21M
         */
         SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_4;

         SPI_InitStructure.SPI_FirstBit= SPI_FirstBit_MSB;         /* 数据位传输次序:高位先传*/
         SPI_InitStructure.SPI_CRCPolynomial= 7;                         /* CRC多项式寄存器,复位后为7。本例程不用 */
         SPI_Init(SPI1,&SPI_InitStructure);

         SPI_Cmd(SPI1,DISABLE);                            /* 先禁止SPI  */
         SPI_Cmd(SPI1,ENABLE);                   /* 使能SPI  */

         sf_Reset();

         sf_ReadInfo();                             /* 自动识别芯片型号 */

测试过程
1,  从SPI地址0x100000开始写。
2,  先将对应的存储擦掉。读出来全FF,没有问题
3,  每次写8个字节,全0xaa。按地址顺序往下写。
4,  每隔200ms写一次。

起初写的约512字节,读写都没有问题(一次读1024字节)。


继续往后写,发现问题,原来读出来正确的地方,现在已经变了,主要问题是部分本应为1bit变成了0(注:也发生过01的情况)。


不仅是已写的部分不正确,还没写的部分也有问题了。甚至后面的相邻page也受到了影响。


针对某一个字节,用示波器看,黄色为时钟,蓝色为MISOFLASH的输出,确实输出来的就是0x2A
ARM端是时钟上升沿采样。FLASH端是时钟下降沿拍数据。
ARM端采数据几乎在电平的中间,时序是比较好的。
file:///C:/Users/tc-lt/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg

MISO保持时间,约为2ns

file:///C:/Users/tc-lt/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg

另外,甚至偶现某个字节的值每次读出来的值都不一样。有时是0xaa有时是0x2a

在其他的block中,也出现过同样的问题,只是出现的几率会有不同。
在其他的板子上,也有过同样的问题。

应该不是坏块或者芯片个体的问题。

尝试
1,  ARM端的问题应该不大,做了各种尝试,寄存器的各种配置几乎都试过。
2,  FLASH端的配置,只有两个寄存器。其中一个是做保护的,全都置为0。另一个是配置的,只有5个bit可以配置,基本上也试过。
3,  Winbon的另一个64M的芯片上,同样的初始化配置(软件读写序列与1G的有较大不同)。没有问题。





IMG_20161227_195914--真实数据为AA-CPU读到为2A-flash波形输出为2A.jpg

spi flash.rar

725.17 KB, 下载次数: 182

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-11-7
在线时间
38 小时
发表于 2017-2-28 17:48:01 | 显示全部楼层
楼主解决了吗?我现在调试读写的时候,写超过2048字节时,读出来的数据都是错的!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-28 21:50:28 | 显示全部楼层
帮顶
回复

使用道具 举报

7

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-10-21
在线时间
43 小时
发表于 2017-3-1 08:39:30 | 显示全部楼层
帮顶。
用过WINBON的CPU87E55系列,不稳定,不知是不是买到假货,还是质量不行。
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2017-3-1 09:08:39 | 显示全部楼层
1g bit 多少钱?
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 18:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表