有了SPI以后我們經常用來操作flash,這里就不得不提SFUD是一種開源的串行SPI flash通用驅動庫,首先需要在rtthread設置選項組件選項卡打開SFUD:
其實通過我們的勾勾選選就打開SFUD功能,實際上IDE的操作也很簡單,加載spi_flash_sfud.c文件,并在rt_config.h的配置文件中定義宏RT_USING_SFUD即打開了該功能:
接下來我們需要利用SFUD組件將我們想要操作的SPI flash掛在到對應的總線上,首先通過list device命令查看當前的SPI總線是哪個,然后查看我們的SPI flash設備的CS片選是哪個引腳,然后通過組件提供的掛在函數嘗試進行掛在該設備到總線,實際上就是SFUD利用SPI總線的API完成對flash的初始化并注冊熬系統驅動中的過程。
/*3.編寫掛在函數實現設備的掛在功能*/
/* SPI Flash 驅動 */
static int rt_hw_spi_flash_init(void)
{
/* 往總線 spi2 上掛載一個 spi20從設備 */
rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12); // CS 腳:PB12
/* 使用 SFUD 探測 spi20 從設備,并將 spi20 連接的 flash 初始化為塊設備,名稱 W25Q128 */
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi20"))
{
return -RT_ERROR;
};
return RT_EOK;
}
/* 導出到自動初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
編譯整個工程,并連接JLINK仿真器進行程序下載:
下載成功后,打開系統finsh串口我們會砍刀關于系統信息的打印,綠色字體部分為SFUD庫加載情況及FLASH設備的掛在情況,通過list device命令我們可以砍刀我們定義的W25Q128設備已經加載成功,這個時候我們就是通過SFUD提供的庫函數來操作我們的flash設備了。
關于使用SFUD掛在flash的過程到這里就結束了,感謝閱讀~!