alrededores
- FatFs R0.11
- STM32CubeMX 5.6.1
- STM32F103C8T6
Configuración personal recomendada
La elección de utilizar el modo TINY puede ahorrar memoria. Para otras configuraciones específicas, verifique los detalles de configuración.
Mejorar la función de correlación
Las funciones que deben mejorarse después de generar el código son: inicialización, lectura, escritura, estado, consulta
Abra el archivo user_diskio.c para agregar
USER_initialize
Inicialización de la función, agregando la función de inicialización del dispositivo de almacenamiento
Estatus de usuario
Función de estado, se recomienda devolver RES_OK directamente
USER_read
Función de lectura, función de lectura de dispositivo de almacenamiento
USER_write
Función de escritura, función de escritura de dispositivo de almacenamiento
USER_ioctl
Para las funciones de consulta y comando, debe agregar el retorno de los siguientes comandos, que se pueden ver en la línea 53 de diskio.h
#define CTRL_SYNC 0 /* Complete pending write process (needed at _FS_READONLY == 0) */
#define GET_SECTOR_COUNT 1 /* Get media size (needed at _USE_MKFS == 1) */
#define GET_SECTOR_SIZE 2 /* Get sector size (needed at _MAX_SS != _MIN_SS) */
#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at _USE_MKFS == 1) */
#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at _USE_TRIM == 1) */
Principalmente, el tamaño del bloque, el número de bloques y los demás vuelven a la normalidad
DRESULT USER_ioctl (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
/* USER CODE BEGIN IOCTL */
DRESULT dre = RES_OK;
switch(cmd)
{
case CTRL_SYNC:
dre = RES_OK;
break;
case GET_SECTOR_COUNT:
*(uint32_t*)buff = w25qxx.SectorCount;
dre = RES_OK;
break;
case GET_SECTOR_SIZE:
*(uint32_t*)buff = w25qxx.SectorSize;
dre = RES_OK;
break;
case GET_BLOCK_SIZE:
*(uint32_t*)buff = w25qxx.BlockSize;
dre = RES_OK;
break;
case CTRL_TRIM:
dre = RES_OK;
break;
default:
break;
}
return dre;
/* USER CODE END IOCTL */