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