alentours
- FatFs R0.11
- STM32CubeMX 5.6.1
- STM32F103C8T6
Configuration personnelle recommandée
Choisir d'utiliser le mode TINY peut économiser de la mémoire. Pour d'autres configurations spécifiques, veuillez vérifier les détails de configuration.
Améliorer la fonction de corrélation
Les fonctions à améliorer après la génération du code sont: initialisation, lecture, écriture, état, requête
Ouvrez le fichier user_diskio.c pour ajouter
USER_initialize
Initialisation de la fonction, ajout de la fonction d'initialisation du périphérique de stockage
Statut de l'utilisateur
Fonction d'état, il est recommandé de renvoyer RES_OK directement
USER_read
Fonction de lecture, ajout d'une fonction de lecture de périphérique de stockage
USER_write
Fonction d'écriture, ajout d'une fonction d'écriture de périphérique de stockage
USER_ioctl
Pour les fonctions de requête et de commande, vous devez ajouter le retour des commandes suivantes, qui peuvent être visualisées à la ligne 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) */
Principalement, la taille du bloc, le nombre de blocs et les autres sont tous revenus à la normale
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 */