Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/Third_Party/FatFs/src/drivers/sd_diskio_dma_template.c')
-rw-r--r--Middlewares/Third_Party/FatFs/src/drivers/sd_diskio_dma_template.c491
1 files changed, 0 insertions, 491 deletions
diff --git a/Middlewares/Third_Party/FatFs/src/drivers/sd_diskio_dma_template.c b/Middlewares/Third_Party/FatFs/src/drivers/sd_diskio_dma_template.c
deleted file mode 100644
index c2492fbc2..000000000
--- a/Middlewares/Third_Party/FatFs/src/drivers/sd_diskio_dma_template.c
+++ /dev/null
@@ -1,491 +0,0 @@
- /**
- ******************************************************************************
- * @file sd_diskio_dma_template.c
- * @author MCD Application Team
- * @brief SD DMA Disk I/O template driver. This file needs to be renamed and
- copied into the application project alongside the respective header
- file.
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2017 STMicroelectronics. All rights reserved.
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
-**/
-
-/* Includes ------------------------------------------------------------------*/
-#include <string.h>
-#include "ff_gen_drv.h"
-#include "sd_diskio_dma.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/*
-* the following Timeout is useful to give the control back to the applications
-* in case of errors in either BSP_SD_ReadCpltCallback() or BSP_SD_WriteCpltCallback()
-* the value by default is as defined in the BSP platform driver otherwise 30 secs
-*/
-
-#define SD_TIMEOUT 30 * 1000
-
-#define SD_DEFAULT_BLOCK_SIZE 512
-
-/*
-* Depending on the usecase, the SD card initialization could be done at the
-* application level, if it is the case define the flag below to disable
-* the BSP_SD_Init() call in the SD_Initialize().
-*/
-
-/* #define DISABLE_SD_INIT */
-
-/*
-* when using cachable memory region, it may be needed to maintain the cache
-* validity. Enable the define below to activate a cache maintenance at each
-* read and write operation.
-* Notice: This is applicable only for cortex M7 based platform.
-*/
-
-/* #define ENABLE_SD_DMA_CACHE_MAINTENANCE 1 */
-
-/*
-* Some DMA requires 4-Byte aligned address buffer to correctly read/wite data,
-* in FatFs some accesses aren't thus we need a 4-byte aligned scratch buffer to correctly
-* transfer data
-*/
-#define ENABLE_SCRATCH_BUFFER
-
-
-/* Private variables ---------------------------------------------------------*/
-
-#if defined(ENABLE_SCRATCH_BUFFER)
-#if defined (ENABLE_SD_DMA_CACHE_MAINTENANCE)
-ALIGN_32BYTES(static uint8_t scratch[BLOCKSIZE]); // 32-Byte aligned for cache maintenance
-#else
-__ALIGN_BEGIN static uint8_t scratch[BLOCKSIZE] __ALIGN_END;
-#endif
-#endif
-
-/* Disk status */
-static volatile DSTATUS Stat = STA_NOINIT;
-static volatile UINT WriteStatus = 0, ReadStatus = 0;
-/* Private function prototypes -----------------------------------------------*/
-static DSTATUS SD_CheckStatus(BYTE lun);
-DSTATUS SD_initialize (BYTE);
-DSTATUS SD_status (BYTE);
-DRESULT SD_read (BYTE, BYTE*, DWORD, UINT);
-#if _USE_WRITE == 1
-DRESULT SD_write (BYTE, const BYTE*, DWORD, UINT);
-#endif /* _USE_WRITE == 1 */
-#if _USE_IOCTL == 1
-DRESULT SD_ioctl (BYTE, BYTE, void*);
-#endif /* _USE_IOCTL == 1 */
-
-const Diskio_drvTypeDef SD_Driver =
-{
- SD_initialize,
- SD_status,
- SD_read,
-#if _USE_WRITE == 1
- SD_write,
-#endif /* _USE_WRITE == 1 */
-
-#if _USE_IOCTL == 1
- SD_ioctl,
-#endif /* _USE_IOCTL == 1 */
-};
-
-/* Private functions ---------------------------------------------------------*/
-static int SD_CheckStatusWithTimeout(uint32_t timeout)
-{
- uint32_t timer = HAL_GetTick();
- /* block until SDIO IP is ready again or a timeout occur */
- while(HAL_GetTick() - timer < timeout)
- {
- if (BSP_SD_GetCardState() == SD_TRANSFER_OK)
- {
- return 0;
- }
- }
-
- return -1;
-}
-
-static DSTATUS SD_CheckStatus(BYTE lun)
-{
- Stat = STA_NOINIT;
-
- if(BSP_SD_GetCardState() == MSD_OK)
- {
- Stat &= ~STA_NOINIT;
- }
-
- return Stat;
-}
-
-/**
-* @brief Initializes a Drive
-* @param lun : not used
-* @retval DSTATUS: Operation status
-*/
-DSTATUS SD_initialize(BYTE lun)
-{
-#if !defined(DISABLE_SD_INIT)
-
- if(BSP_SD_Init() == MSD_OK)
- {
- Stat = SD_CheckStatus(lun);
- }
-
-#else
- Stat = SD_CheckStatus(lun);
-#endif
- return Stat;
-}
-
-/**
-* @brief Gets Disk Status
-* @param lun : not used
-* @retval DSTATUS: Operation status
-*/
-DSTATUS SD_status(BYTE lun)
-{
- return SD_CheckStatus(lun);
-}
-
-/**
-* @brief Reads Sector(s)
-* @param lun : not used
-* @param *buff: Data buffer to store read data
-* @param sector: Sector address (LBA)
-* @param count: Number of sectors to read (1..128)
-* @retval DRESULT: Operation result
-*/
-DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
-{
- DRESULT res = RES_ERROR;
- uint32_t timeout;
- uint8_t ret;
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
- uint32_t alignedAddr;
-#endif
-
- /*
- * ensure the SDCard is ready for a new operation
- */
-
- if (SD_CheckStatusWithTimeout(SD_TIMEOUT) < 0)
- {
- return res;
- }
-
-#if defined(ENABLE_SCRATCH_BUFFER)
- if (!((uint32_t)buff & 0x3))
- {
-#endif
- if(BSP_SD_ReadBlocks_DMA((uint32_t*)buff,
- (uint32_t) (sector),
- count) == MSD_OK)
- {
- ReadStatus = 0;
- /* Wait that the reading process is completed or a timeout occurs */
- timeout = HAL_GetTick();
- while((ReadStatus == 0) && ((HAL_GetTick() - timeout) < SD_TIMEOUT))
- {
- }
- /* incase of a timeout return error */
- if (ReadStatus == 0)
- {
- res = RES_ERROR;
- }
- else
- {
- ReadStatus = 0;
- timeout = HAL_GetTick();
-
- while((HAL_GetTick() - timeout) < SD_TIMEOUT)
- {
- if (BSP_SD_GetCardState() == SD_TRANSFER_OK)
- {
- res = RES_OK;
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
- /*
- the SCB_InvalidateDCache_by_Addr() requires a 32-Byte aligned address,
- adjust the address and the D-Cache size to invalidate accordingly.
- */
- alignedAddr = (uint32_t)buff & ~0x1F;
- SCB_InvalidateDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr));
-#endif
- break;
- }
- }
- }
- }
-#if defined(ENABLE_SCRATCH_BUFFER)
- else {
- /* Slow path, fetch each sector a part and memcpy to destination buffer */
- int i;
-
- for (i = 0; i < count; i++) {
- ret = BSP_SD_ReadBlocks_DMA((uint32_t*)scratch, (uint32_t)sector++, 1);
- if (ret == MSD_OK) {
- /* wait until the read is successful or a timeout occurs */
-
- ReadStatus = 0;
- timeout = HAL_GetTick();
- while((ReadStatus == 0) && ((HAL_GetTick() - timeout) < SD_TIMEOUT))
- {
- }
- if (ReadStatus == 0)
- {
- break;
- }
-
-
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
- /*
- *
- * invalidate the scratch buffer before the next read to get the actual data instead of the cached one
- */
- SCB_InvalidateDCache_by_Addr((uint32_t*)scratch, BLOCKSIZE);
-#endif
- memcpy(buff, scratch, BLOCKSIZE);
- buff += BLOCKSIZE;
- }
- else
- {
- break;
- }
- }
-
- if ((i == count) && (ret == MSD_OK))
- res = RES_OK;
- }
-#endif
- }
-
- return res;
-}
-/**
-* @brief Writes Sector(s)
-* @param lun : not used
-* @param *buff: Data to be written
-* @param sector: Sector address (LBA)
-* @param count: Number of sectors to write (1..128)
-* @retval DRESULT: Operation result
-*/
-#if _USE_WRITE == 1
-DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
-{
- DRESULT res = RES_ERROR;
- uint32_t timeout;
- uint8_t ret;
- int i;
-
- WriteStatus = 0;
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
- uint32_t alignedAddr;
-#endif
-
- if (SD_CheckStatusWithTimeout(SD_TIMEOUT) < 0)
- {
- return res;
- }
-
-#if defined(ENABLE_SCRATCH_BUFFER)
- if (!((uint32_t)buff & 0x3))
- {
-#endif
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
-
- /*
- the SCB_CleanDCache_by_Addr() requires a 32-Byte aligned address
- adjust the address and the D-Cache size to clean accordingly.
- */
- alignedAddr = (uint32_t)buff & ~0x1F;
- SCB_CleanDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr));
-#endif
-
-
- if(BSP_SD_WriteBlocks_DMA((uint32_t*)buff,
- (uint32_t)(sector),
- count) == MSD_OK)
- {
- /* Wait that writing process is completed or a timeout occurs */
-
- timeout = HAL_GetTick();
- while((WriteStatus == 0) && ((HAL_GetTick() - timeout) < SD_TIMEOUT))
- {
- }
- /* incase of a timeout return error */
- if (WriteStatus == 0)
- {
- res = RES_ERROR;
- }
- else
- {
- WriteStatus = 0;
- timeout = HAL_GetTick();
-
- while((HAL_GetTick() - timeout) < SD_TIMEOUT)
- {
- if (BSP_SD_GetCardState() == SD_TRANSFER_OK)
- {
- res = RES_OK;
- break;
- }
- }
- }
- }
- else
- {
- /* Slow path, fetch each sector a part and memcpy to destination buffer */
-#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
- /*
- * invalidate the scratch buffer before the next write to get the actual data instead of the cached one
- */
- SCB_InvalidateDCache_by_Addr((uint32_t*)scratch, BLOCKSIZE);
-#endif
-
- for (i = 0; i < count; i++)
- {
- WriteStatus = 0;
- ret = BSP_SD_WriteBlocks_DMA((uint32_t*)scratch, (uint32_t)sector++, 1);
- if (ret == MSD_OK) {
- /* wait for a message from the queue or a timeout */
- timeout = HAL_GetTick();
- while((WriteStatus == 0) && ((HAL_GetTick() - timeout) < SD_TIMEOUT))
- {
- }
- if (WriteStatus == 0)
- {
- break;
- }
-
- memcpy((void *)buff, (void *)scratch, BLOCKSIZE);
- buff += BLOCKSIZE;
- }
- else
- {
- break;
- }
- }
- if ((i == count) && (ret == MSD_OK))
- res = RES_OK;
- }
-
- }
- return res;
-}
-#endif /* _USE_WRITE == 1 */
-
-/**
-* @brief I/O control operation
-* @param lun : not used
-* @param cmd: Control code
-* @param *buff: Buffer to send/receive control data
-* @retval DRESULT: Operation result
-*/
-#if _USE_IOCTL == 1
-DRESULT SD_ioctl(BYTE lun, BYTE cmd, void *buff)
-{
- DRESULT res = RES_ERROR;
- BSP_SD_CardInfo CardInfo;
-
- if (Stat & STA_NOINIT) return RES_NOTRDY;
-
- switch (cmd)
- {
- /* Make sure that no pending write process */
- case CTRL_SYNC :
- res = RES_OK;
- break;
-
- /* Get number of sectors on the disk (DWORD) */
- case GET_SECTOR_COUNT :
- BSP_SD_GetCardInfo(&CardInfo);
- *(DWORD*)buff = CardInfo.LogBlockNbr;
- res = RES_OK;
- break;
-
- /* Get R/W sector size (WORD) */
- case GET_SECTOR_SIZE :
- BSP_SD_GetCardInfo(&CardInfo);
- *(WORD*)buff = CardInfo.LogBlockSize;
- res = RES_OK;
- break;
-
- /* Get erase block size in unit of sector (DWORD) */
- case GET_BLOCK_SIZE :
- BSP_SD_GetCardInfo(&CardInfo);
- *(DWORD*)buff = CardInfo.LogBlockSize / SD_DEFAULT_BLOCK_SIZE;
- res = RES_OK;
- break;
-
- default:
- res = RES_PARERR;
- }
-
- return res;
-}
-#endif /* _USE_IOCTL == 1 */
-
-
-
-/**
-* @brief Tx Transfer completed callbacks
-* @param hsd: SD handle
-* @retval None
-*/
-
-/*
-===============================================================================
-Select the correct function signature depending on your platform.
-please refer to the file "stm32xxxx_eval_sd.h" to verify the correct function
-prototype
-===============================================================================
-*/
-//void BSP_SD_WriteCpltCallback(uint32_t SdCard)
-void BSP_SD_WriteCpltCallback(void)
-{
- WriteStatus = 1;
-}
-
-/**
-* @brief Rx Transfer completed callbacks
-* @param hsd: SD handle
-* @retval None
-*/
-
-/*
-===============================================================================
-Select the correct function signature depending on your platform.
-please refer to the file "stm32xxxx_eval_sd.h" to verify the correct function
-prototype
-===============================================================================
-*/
-//void BSP_SD_ReadCpltCallback(uint32_t SdCard)
-void BSP_SD_ReadCpltCallback(void)
-{
- ReadStatus = 1;
-}
-
-/*
-==============================================================================================
- depending on the SD_HAL_Driver version, either the HAL_SD_ErrorCallback() or HAL_SD_AbortCallback()
- or both could be defined, activate the callbacks below when suitable and needed
-==============================================================================================
-void BSP_SD_AbortCallback(void)
-{
-}
-
-void BSP_SD_ErrorCallback(void)
-{
-}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-