W25Q80读写操作不成功,写不进去,麻烦高手帮忙看看

[复制链接]
 楼主| tianxiongweitxw 发表于 2021-6-13 11:36 | 显示全部楼层 |阅读模式
//SPI数据读写函数
uchar SPISwap(BYTE dat)        //SPI数据读写函数
{

    SPDAT = dat;                //trigger SPI send
    while (!(SPSTAT & SPIF));   //wait send complete
    SPSTAT = SPIF | WCOL;       //clear SPI status

    return SPDAT;               //return received SPI data
}
////SPI页编程,LEN不能超过255
void WriteW25Q80(long addre,uchar *databuf,uchar LEN)
{
           uchar i=0;
                 SPISS = 0; //W25q80芯片使能
         SPISwap(WRITE_ENABLE);                 //W25Q80芯片写使能
         SPISwap( BYTE_PAGE_PROGRAM); //页编程命令
         SPISwap((BYTE)( addre>>16)); //写地址高8位        ,共24位
         SPISwap((BYTE)( addre>>8));  //写地址中间8位
         SPISwap((BYTE)( addre));          //写地址低8 位
        for(i=0; i<LEN;i++)
        {
           SPISwap(databuf[i]);       
        }   
          SPISwap(WRITE_DISABLE);          //W25Q80芯片写失能
                SPISS = 1;                                  //W25q80芯片失能
  }
/////////读取LEN个字节
  void ReadW25Q80(long addre,uchar *databuf,uchar LEN)
  {
           uchar i=0;
           SPISS = 0; //W25q80芯片使能
           SPISwap(READ_ARREY);//读取命令
           SPISwap((BYTE)( addre>>16)); //写地址高8位        ,共24位
           SPISwap((BYTE)( addre>>8));  //写地址中间8位
           SPISwap((BYTE)( addre));          //写地址低8 位
                   for(i=0; i<LEN;i++)
           {
             databuf[i]=SPISwap(0xff);       
             }
         SPISS = 1; //W25q80芯片使能
  }
 楼主| tianxiongweitxw 发表于 2021-6-15 12:26 来自手机 | 显示全部楼层
自己顶下
diweo 发表于 2021-6-15 16:11 | 显示全部楼层
不要光看代码,要用逻辑分析仪结合波形来分析。
 楼主| tianxiongweitxw 发表于 2021-6-15 21:13 来自手机 | 显示全部楼层
原因找到,172k的写入速率正常了,原来写入比读出慢百倍。原以为写入也可以几十m的速度

评论

我在想,W25Q80是按位一位一位的写入的,还是一个字节一个字节写入的?  发表于 2021-6-16 13:41
一直检测状态继存器我觉得太麻烦了,我另愿写慢一点。  发表于 2021-6-16 13:40
之前用5M的速度写入,一直降,降低到172K正常了。读出继续用5M的速度,正常。  发表于 2021-6-16 13:38
根据你的描述不是写入速率的问题,主要是写入后要反复检测状态寄存器的相关位,确认写入结束才可以继续。 flash的写入和擦除需要时间的。  发表于 2021-6-15 22:24
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

521

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部