在原子SPI通信程序中发现了一个小错误

2019-07-25 12:21发布

在使用原子哥的SPI通信中的 W25QXX_Write()函数时发现了有一处错误,第一次可以进行正确的读写,可当我第二次改变写的数据,并往同一地址写的时候就出现了乱码,经过查找发现了一个问题,下面是截取的一段代码
    W25QXX_Read(W25QXX_BUF,secpos*4096,4096);
        for(i=0;i<secremain;i++)
        {
            if(W25QXX_BUF[secoff+i]!=0XFF)break;     
        }
        if(i<secremain)//&#208;è&#210;&#170;&#178;&#193;&#179;&#253;
        {
            W25QXX_Erase_Sector(secpos);       //此处错误
            for(i=0;i<secremain;i++)   
            {
                W25QXX_BUF[i+secoff]=pBuffer;
            }
            W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);

       代码的意思是当检测到写入的扇区内有数据的时候,执行扇区删除操作,W25QXX_Erase_Sector()函数传递进去的参数应该是一个24位的地址,可是在上面的程序中传进去的不是一个地址,而是secpos=WriteAddr/4096;,即第几个扇区,所以错误的地方应该改为W25QXX_Erase_Sector(secpos*4096);  

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
yuzeyuan1
1楼-- · 2019-07-26 19:20
龙之谷 发表于 2017-11-8 14:02
ok,看到帖子还专门去查了一下程序,看的不仔细,没注意到函数中又*4096了
My mistake.....

我很好奇,这东西为什么我们一直用着正常?咋突然就说某个地方错了呢如果以前用着不正常,应该很多人反馈的呀。难道它错了不影响用?
龙之谷
2楼-- · 2019-07-26 20:58
yuzeyuan1 发表于 2017-11-8 16:21
我很好奇,这东西为什么我们一直用着正常?咋突然就说某个地方错了呢如果以前用着不正常,应该很多 ...

起初也有这样的感觉,专门对照了代码,也是粗心,没注意到代码处理语句
错了影不影响用不太确定,但如果错了这么多网友应该会早些时候就发现问题了,毕竟代码推出已经有一段时间了
yuzeyuan1
3楼-- · 2019-07-27 02:21
本帖最后由 yuzeyuan1 于 2017-11-9 08:20 编辑
龙之谷 发表于 2017-11-8 16:55
起初也有这样的感觉,专门对照了代码,也是粗心,没注意到代码处理语句
错了影不影响用不太确定,但如果 ...

例程代码没有问题,是楼主自己写的擦除函数写错了,看你之前说的都弄糊涂了。
W25QXX_Erase_Sector(secpos);的参数就应该是第几个扇区,而不是地址。W25QXX_Erase_Sector内部自己带有地址计算。而且个人感觉这个W25QXX_Write函数封的很难受,判断有数据就要擦除,我们就不能很好地控制哪些数据该擦,哪些不该擦,还是自己控着安心。

一周热门 更多>