STM32CubeMX之FATFS+SPI驱动W25QXX
Posted while(1)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32CubeMX之FATFS+SPI驱动W25QXX相关的知识,希望对你有一定的参考价值。
文章目录
参考资料
1 W25Q128简介
W25Q128 总容量为16M字节,并将 16M 字节的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为16 个扇区(Sector),每个扇区 4K 个字节。W25Q128 的最小擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的操作。
2 STM32CubeMX配置SPI
根据W25Q128原理图可知,其使用SPI2,片选引脚为CS为PB12。
2.1 配置SPI
- Baud Rate 可根据实际需求而定;
- CPOL = High,CPHA = 2 Edge 和 CPOL = Low,CPHA = 1 Edge ,两种模式都可以
2.2 配置CS片选引脚
因为SPI的NSS Signal Type 选择为 Software,所以需要自行配置CS片选引脚
3 添加W25Q128驱动
配置W25Q128片选引脚
#define W25QXX_CS_NON HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_SET)
#define W25QXX_CS_OK HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_RESET)
使用STM32CubeMX配置SPI和片选引脚之后,需要自行根据W25Q128手册编写驱动程序,如:
- W25QXX_Read
- W25QXX_Write
这里省略,可参考正点原子例程
4 将W25Q128挂载到FATFS
4.1 STM32CubeMX配置FATFS
4.2 在工程中为FATFS适配W25Q128
4.2.1 DSTATUS USER_initialize ( BYTE pdrv )
DSTATUS USER_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
/* USER CODE BEGIN INIT */
Stat = STA_NOINIT;
if(W25QXX_Init() == W25Q_OK)
{
Stat &= ~STA_NOINIT;
}
return Stat;
/* USER CODE END INIT */
}
4.2.2 DSTATUS USER_status ( BYTE pdrv )
DSTATUS USER_status (
BYTE pdrv /* Physical drive number to identify the drive */
)
{
/* USER CODE BEGIN STATUS */
Stat = STA_NOINIT;
if(W25QXX_Get_State() == W25Q_OK)
{
Stat &= ~STA_NOINIT;
}
return Stat;
/* USER CODE END STATUS */
}
4.2.3 USER_read
DRESULT USER_read (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address in LBA */
UINT count /* Number of sectors to read */
)
{
/* USER CODE BEGIN READ */
W25QXX_Read((uint8_t*)buff,(uint32_t)sector,(uint16_t)count);
return RES_OK;
/* USER CODE END READ */
}
4.2.3 USER_write
DRESULT USER_write (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address in LBA */
UINT count /* Number of sectors to write */
)
{
/* USER CODE BEGIN WRITE */
/* USER CODE HERE */
W25QXX_Write((uint8_t*)buff,(uint32_t)sector,(uint16_t)count);
return RES_OK;
/* USER CODE END WRITE */
}
5 工程链接
gitee平台: STM32F10xxx Learn
以上是关于STM32CubeMX之FATFS+SPI驱动W25QXX的主要内容,如果未能解决你的问题,请参考以下文章
STM32Cubemx——硬件SPI驱动七针0.96寸OLED
STM32CubeMX-SPI+DMA 驱动 2812 灯带
STM32CubeMX-SPI+DMA 驱动 2812 灯带