bviotkxt 发表于 2024-12-29 16:56:32

8H8K64U用SPI访问W25Q NOR Flash的奇怪现象

使用天问的W25Q驱动和硬件SPI驱动,
在读取64bit和128bit两块芯片时,FLASH ID可以正常获得,每次写入也都可以成功,
但是读取就极其奇怪:

有时候表现不稳定,几乎每次都读不到正常数据,而是读出一些如ASCII表的顺序数据,有时是随机数据


有时候必须先写入一次,然后读又可以了,放置一段时间又不行
有时候突然又好了,重启一次不用先写入也是正常读

最奇怪的是,有时候从0地址指定读233个字节正常,到234个就错乱,再233正常,234异常,表现出一种规律性,(buffer是malloc的)
但总体上又杂乱无章。
检查了天问的驱动,也没有发现什么问题,把speed也调过,无效,实在有点无语了
有没有高手有经验指导一下,多谢了!


//========================================================================
// 描述: 在指定地址开始读取指定长度的数据.
// 参数: none.
// 返回: none.
//=========================================================================
void w25qxx_read(uint8* pBuffer,uint32 ReadAddr,uint16 NumByteToRead)   
{
         uint16 i;                                                                                       
      W25QXX_CS=0;                           //选中spiflash      
    hardspi_write_byte(W25QXX_READ_DATA);         //发送读取命令
    hardspi_write_byte((uint8)((ReadAddr)>>16));//发送24位地址   
    hardspi_write_byte((uint8)((ReadAddr)>>8));   
    hardspi_write_byte((uint8)ReadAddr);   
    for(i=0;i<NumByteToRead;i++)
      {
      pBuffer=hardspi_read_byte();   //循环读数
    }
      W25QXX_CS=1;                                                   
}

bviotkxt 发表于 2024-12-29 17:03:34

自己回看帖子的时候,突然感觉找到原因了,验证果然,是malloc的原因,这里是应该怎么正常去malloc呢?

bviotkxt 发表于 2024-12-29 17:05:59

ptr = (char *)_malloc_r((void *)__XDATA, DATA_SIZE);

AI告诉我这样 {:yiwen:}

bviotkxt 发表于 2024-12-29 17:32:54

也是锈逗了,OS都没有,Linux搞习惯了。自己搞内存池也没意义。
页: [1]
查看完整版本: 8H8K64U用SPI访问W25Q NOR Flash的奇怪现象