Utilisation de la bibliothèque Fatfs + HAL

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

 

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

Je suppose que tu aimes

Origine blog.csdn.net/shaynerain/article/details/107111192
conseillé
Classement