Uso de la biblioteca Fatfs + HAL

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 */

 

de:  https://blog.csdn.net/shaynerain

Supongo que te gusta

Origin blog.csdn.net/shaynerain/article/details/107111192
Recomendado
Clasificación