潘多拉開發板SFUD初始化失敗問題[SFUD] Error W25Q128 flash device is initialize fail

潘多拉開發板SFUD初始化失敗問題[SFUD] Error: W25Q128 flash device is initialize fail.

問題描述如下:

在這裏插入圖片描述
       潘多拉開發板SFUD初始化失敗,提示設備不支持。

原因

       潘多拉有一批板載的FLASH更換了廠家,代碼不兼容。同樣遇到這個問題的小夥伴可以檢查板載的flash的絲印層是否帶有nm25字樣。

解決方案

       使用這個SDK倉庫:倉庫地址

       並檢出到fix_nm25q分支下的代碼。

在這裏插入圖片描述

       這個倉庫不是官方資料中給,感謝某個大神的提供。

       接着運行裏面的keil工程13_component_fal。你會發現問題已經被奇妙的解決了。

在這裏插入圖片描述

分析

       像W25Q128這種串行Flash芯片種類有很多,如果每種芯片都提供一套驅動函數不便於管理,RT-Thread爲串行Flash提供了一套通用驅動函數SFUD(Serial Flash Universal Driver),能驅動多數常用SPI Flash,SFUD屬於SPI設備驅動框架層。

       其中,SFUD這樣的驅動框架使用了三個列表來描述SFUD的芯片信息,如果遇到不能識別的芯片,只要對這三個列表進行增添就可以了。

/* SFUD supported manufacturer information table */
#define SFUD_MF_TABLE                                     \
{                                                         \
    {"Cypress",    SFUD_MF_ID_CYPRESS},                   \
	......
    {"Winbond",    SFUD_MF_ID_WINBOND},                   \
    {"Micronix",   SFUD_MF_ID_MICRONIX},                  \
}
#define SFUD_FLASH_CHIP_TABLE                                                                                       \
{                                                                                                                   \
	......
    {"W25Q128BV", SFUD_MF_ID_WINBOND, 0x40, 0x18, 16L*1024L*1024L, SFUD_WM_PAGE_256B, 4096, 0x20},                  \
    {"W25Q256FV", SFUD_MF_ID_WINBOND, 0x40, 0x19, 32L*1024L*1024L, SFUD_WM_PAGE_256B, 4096, 0x20},                  \
	......
    {"PCT25VF016B", SFUD_MF_ID_SST, 0x25, 0x41, 2L*1024L*1024L, SFUD_WM_BYTE|SFUD_WM_AAI, 4096, 0x20},              \
}
#define SFUD_FLASH_EXT_INFO_TABLE                                                                  \
{                                                                                                  \
    ......
    /* W25Q128JV */                                                                                \
    {SFUD_MF_ID_WINBOND, 0x40, 0x18, NORMAL_SPI_READ|DUAL_OUTPUT|DUAL_IO|QUAD_OUTPUT|QUAD_IO},     \
    /* W25Q256FV */                                                                                \
    {SFUD_MF_ID_WINBOND, 0x40, 0x19, NORMAL_SPI_READ|DUAL_OUTPUT|DUAL_IO|QUAD_OUTPUT|QUAD_IO},     \
    ......
    /* GD25Q64B */                                                                                 \
    {SFUD_MF_ID_GIGADEVICE, 0x40, 0x17, NORMAL_SPI_READ|DUAL_OUTPUT},                              \
}

       增添nm25的信息參考:gitee的代碼提交比對

對RT-STUDIO模板工程進行修改

       上述的方法獲得的是修改過後的例程,由於我個人是比較喜歡RT-STUDIO創建的模板工程的工程結構的。所以這裏也獻上基於RT-STUDIO模板工程進行修改適配nm25flash的方法。

  1. 根據倉庫中fix_nm25q分支的代碼提交比對,最後一次更新的對比更改相關內容

  2. 同時在ports\drv_qspi_flash.c下

        stm32_qspi_bus_attach_device("qspi1", "qspi10", RT_NULL, 1, w25qxx_enter_qspi_mode, RT_NULL);
    
    

    第四個參數改爲1,表示數據線寬爲1。

  3. 編譯&下載

  4. 使用sf命令調試

       到這裏可以看出修正已經完成了。

在這裏插入圖片描述

       覺得有幫助的麻煩點個贊和收藏,謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章