在使用原子哥的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)//ÐèÒª²Á³ý
{
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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
起初也有这样的感觉,专门对照了代码,也是粗心,没注意到代码处理语句
错了影不影响用不太确定,但如果错了这么多网友应该会早些时候就发现问题了,毕竟代码推出已经有一段时间了
一周热门 更多>