打印

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

[复制链接]
2270|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的速度

使用特权

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

本版积分规则

71

主题

517

帖子

0

粉丝