BabyOS_Example使用bFS功能模块 BabyOS提供了FatFS和LittleFS,同时SPIFLASH驱动使用了SFUD开源代码。关于这几个第三方代码,想进一步了解的可以去对应的仓库。下面主要是介绍如何使用。
添加b_drv_spiflash驱动添加b_hal_spi硬件抽象层- int bHalSPI_Send(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
- {
- int i = 0;
- uint8_t tmp;
- if(pbuf == NULL)
- {
- return -1;
- }
- switch(spi)
- {
- case B_HAL_SPI_1:
- Spi_SetCS(Spi0,FALSE);
- for(i = 0;i < len;i++)
- {
- Spi_SendReceiveData(Spi0, pbuf[i], &tmp);
- }
- Spi_SetCS(Spi0,TRUE);
- break;
- default:
- break;
- }
- return 0;
- }
-
- int bHalSPI_Receive(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
- {
- int i = 0;
- if(pbuf == NULL)
- {
- return -1;
- }
- switch(spi)
- {
- case B_HAL_SPI_1:
- Spi_SetCS(Spi0,FALSE);
- for(i = 0;i < len;i++)
- {
- Spi_SendReceiveData(Spi0, 0xff, &pbuf[i]);
- }
- Spi_SetCS(Spi0,TRUE);
- break;
- default:
- break;
- }
- return 0;
- }
取消引脚定义的注释(b_hal.h内)- ///< SPIFLASH
- #define HAL_SPIFLASH_QSPI_EN 0
- #define HAL_SPIFLASH_TOTAL_NUMBER 1
- #define HAL_SPIFLASH_IF {{B_HAL_QSPI_INVALID, B_HAL_SPI_1, {B_HAL_GPIOA, B_HAL_PIN4}},}
配置b_config.h注册设备(b_device_list.h)- B_DEVICE_REG(SPIFLASH, bSPIFLASH_Driver[0], "flash")
初始化FS并运行测试程序- int32_t main(void)
- {
- /*******************************************************************MCU Init**/
- InitClock();
- InitGPIO();
- InitUart();
- InitSPI();
- InitRTC();
- /************************************************************************/
- bInit();
- bShellInit();
- bFS_Init();
- bFS_Test();
- while(1)
- {
- bExec();
- BOS_PERIODIC_TASK(TestParam, 10000);
- }
- }
测试用的FLASH型号是(W25X16AV),这个型号SFUD不支持。可以看到如下打印: - W:sfud_init 126 Start initialize Serial Flash Universal Driver(SFUD) V1.1.0.
- W:sfud_init 127 You can get the latest version on https://github.com/armink/SFUD .
- W:read_jedec_id 871 The flash device manufacturer ID is 0xEF, memory type ID is 0x30, capacity ID is 0x15.
- W:read_sfdp_header 122 Error: Check SFDP signature error. It's must be 50444653h('S' 'F' 'D' 'P').
- .....
添加设备信息至SPIFLASH设备表: - //sfud_flash_def.h
- #define SFUD_FLASH_CHIP_TABLE \
- { \
- .......
- {"W25X16AV", SFUD_MF_ID_WINBOND, 0x30, 0x15, 2L*1024L*1024L, SFUD_WM_PAGE_256B, 4096, 0x20}, \
- .......
- }
- #endif
实验效果: FS的测试程序是通过文件的方式记录启动次数
BabyOS master分支 https://gitee.com/notrynohigh/BabyOS
|