10 利用单片机上的W25Q128进行数据的储存与读写发现不一致

发布于 2021-04-29 20:09:35

这是我的代码,大家帮忙看看有没有问题,问题是写入的数据与读取的数据不一致

int test_flash()
{
    HAL_Init();
    MX_SPIFlash_Init();
    DeviceID = SPI_FLASH_ReadDeviceID();
    FlashID = SPI_FLASH_ReadID();
    rt_kprintf("FlashID is 0x%X,  Manufacturer Device ID is 0x%X\n", FlashID, DeviceID);
    rt_uint8_t i;
    
    if (FlashID == SPI_FLASH_ID)  /* #define  sFLASH_ID  0XEF4018 */
    {    
        printf("Detected flash W25Q128 !\n");
        
        /* ²Á³ýSPIµÄÉÈÇøÒÔдÈë */
        SPI_FLASH_SectorErase(FLASH_SectorToErase);          
        
        /* ½«·¢ËÍ»º³åÇøµÄÊý¾Ýдµ½flashÖÐ */     
        SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, 14);
        rt_kprintf("The write data is %d \n", Tx_Buffer[0]);
        //rt_kprintf("The data is %d",BufferSize);
        /* ½«¸Õ¸ÕдÈëµÄÊý¾Ý¶Á³öÀ´·Åµ½½ÓÊÕ»º³åÇøÖÐ */
        SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, 14);
        for(i=0;i<13;i++)
        {
            rt_kprintf("The read data is %d\n", Rx_Buffer[i]);
        }
    }

e0a2c66236cb940dbed1335c427011f2.png

查看更多

关注者
0
被浏览
100
4 个回答
flashman2002
flashman2002 2021-04-29

1、需要验证FLASH_SectorToErase包括了FLASH_WriteAddress及长度14在内;
2、FLASH_WriteAddress是否是Flash写入对齐的?
3、TxBuffer内容在哪里看到?
4、FLASH_ReadAdress的值是多少?
5、最后打印读出的数据为何只读到13个,最后一个为何不显示出来?
6、读出的数据与写入的数据差异在哪里看到?

StackYuan
StackYuan 2021-04-29

这里可以先排除下驱动问题,我觉得SPIflash读写差异。多数情况是驱动没对上,一些flash的操作指令是有差异的,楼主先主要解决这方面问题。

mii
mii 2021-04-30

首先确定执行SPI_FLASH_SectorErase后擦除是有效的,其次执行FLASH_WriteAddress时的地址在你擦除地址范围内,三是再次验证读取写入的数据。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览