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