野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20386|回复: 5

请教W25Q16的读写问题

[复制链接]
发表于 2015-7-3 14:18:52 | 显示全部楼层 |阅读模式
我直接用的例程里面的程序,把一个32位的数据写入W25Q16,每次启动的时候读出这个数据,然后在这个基础上在while(1)里面增加,并从串口打印输出,同时再写入Flash,现在遇到个问题,如果多次复位的时候会出现,独处的数据是-1,这种情况,而且是随机的,有时候一脸复位好几次没有出现。还请各位前辈指点一二!感激不尽!

int main(void)
{
        SysTick_Init();
        LED_Config();
        USART1_Config();
        printf("W25Q16 TEST!\n");
        SPI_FLASH_Init();
       
        DeviceID = SPI_FLASH_ReadDeviceID();        //»ñè¡Device ID
        Delay_ms(200);
       
        FlashID = SPI_FLASH_ReadID();
       
        if(FlashID == sFLASH_ID)
        {
                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        }
               
        Delay_ms(500);
       
        SPI_FLASH_BufferRead(count, FLASH_ReadAddress, BufferSize);
        W25Q16_Count = count[0]*16777216+count[1]*65536+count[2]*256+count[3];
        printf("%d\n",W25Q16_Count);
       
       
        while(1)
        {
                Delay_ms(100);
                W25Q16_Count++;
                printf("%d\n",W25Q16_Count);
                count[0] = W25Q16_Count/16777216;
                count[1] = W25Q16_Count%16777216/65536;
                count[2] = W25Q16_Count%16777216%65536/256;
                count[3] = W25Q16_Count%16777216%65536%256;
               
                SPI_FLASH_SectorErase(FLASH_SectorToErase);
                SPI_FLASH_BufferWrite(count, FLASH_WriteAddress, BufferSize);
                       
        }
          /* add your code here ^_^. */
}


这是主函数,SPI的配置就是火哥的例程里面的。出现的问题如图所示
W25Q16.jpg
回复

使用道具 举报

发表于 2015-7-3 15:22:31 | 显示全部楼层
这个也是一个正常情况,
运行擦除函数SPI_FLASH_SectorErase后原理的数据被擦除了,这时去读得到的数据就是0XFF(就是-1啦)
所以如果你按下复位刚好就是在擦除过程中的话就很容易出现问题了,这时你的数据还没写进去啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-3 15:27:05 | 显示全部楼层
亽亼 发表于 2015-7-3 15:22
这个也是一个正常情况,
运行擦除函数SPI_FLASH_SectorErase后原理的数据被擦除了,这时去读得到的数据就 ...

我也刚刚试到这里,发现每次擦除读出的数据都是-1,像这种问题该如何加爵呢?试了一下把SPI_FLASH_SectorErase(FLASH_SectorToErase);这句去掉又不行,愁死!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-3 15:28:14 | 显示全部楼层
亽亼 发表于 2015-7-3 15:22
这个也是一个正常情况,
运行擦除函数SPI_FLASH_SectorErase后原理的数据被擦除了,这时去读得到的数据就 ...

怎么样可以像24C02那样直接覆盖呢?
回复 支持 反对

使用道具 举报

发表于 2015-7-3 15:37:34 | 显示全部楼层
外部Flash芯片都要先擦除才可以写的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-3 15:50:30 | 显示全部楼层
亽亼 发表于 2015-7-3 15:37
外部Flash芯片都要先擦除才可以写的

哦,谢谢啊!另外想请教一下,步进电机运行过程中,保存步数,用什么方法比较好,前面用过24C02,写的时候占用时间太多,电机运行速度很慢。这才研究的SPI,但是一旦擦除的时候断电,也是不行的。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 15:51 , Processed in 0.050916 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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