2.5 KiB
2.5 KiB
底层配置
- 点击工程setting或menuconfig
- 图形界面中开启DFS Fatfs SPI SFUD,env中对应
- 更新最小扇区 W25Q128是16MB spi flash,一共有256个block ,每个Block 64KB。 每个Block可以分割为16个扇区(small sector),每个扇区4096字节(4KB),所以我们需要修改fatfs的扇区大小为4096
- 按board.h中说明开启宏定义
- 添加SPI初始化函数到board.c(可从cubwMX考取)
/**
* @brief SPI MSP Initialization
* This function configures the hardware resources used in this example
* @param hspi: SPI handle pointer
* @retval None
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hspi->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */
/* USER CODE END SPI1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI1 GPIO Configuration
PB3 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
}
}
- 其它默认即可
程序设置
- 初始化。在spi1总线上注册spi10设备的函数,并将W25Q128抽象为块设备供rtt使用,后续挂载文件系统
int rt_hw_spi_flash_init(void)
{
rt_hw_spi_device_attach("spi1", "spi10", GPIOG, GPIO_PIN_8);//片选信号
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10"))
{
rt_kprintf("sfud error.\n");
return -RT_ERROR;
};
else
{
rt_kprintf("sfud success.\n");
return RT_EOK;
}
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
- 挂载
void w25q128_mount(void)
{
//dfs_mkfs("elm", "W25Q128");//格式化
rt_device_t dev;
dev = rt_device_find("W25Q128");
if(dev != RT_NULL) {
if(dfs_mount("W25Q128", "/", "elm", 0, 0) == 0){
rt_kprintf("spi_flash mount to spi!\n");
} else {
rt_kprintf("spi_flash mount to spi failed!\n");
}
}
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(w25q128_mount);
- 格式化
在msh界面手动格式化一次
mkfs W25Q128
msh常用命令
echo
新建文件
cat
回读文件