stmhal: Port of f4 hal commit 1d7fb82
to f7 hal
This commit is contained in:
parent
28e51c9eb1
commit
7a55c1a884
@ -643,8 +643,9 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd);
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/* Blocking mode: Polling */
|
/* Blocking mode: Polling */
|
||||||
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
// dpgeorge: read/write functions renamed to emphasise that address is given by block number
|
||||||
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_BlockNumber(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
||||||
|
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_BlockNumber(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
||||||
HAL_SD_ErrorTypedef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint64_t startaddr, uint64_t endaddr);
|
HAL_SD_ErrorTypedef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint64_t startaddr, uint64_t endaddr);
|
||||||
|
|
||||||
/* Non-Blocking mode: Interrupt */
|
/* Non-Blocking mode: Interrupt */
|
||||||
@ -659,8 +660,9 @@ void HAL_SD_XferCpltCallback(SD_HandleTypeDef *hsd);
|
|||||||
void HAL_SD_XferErrorCallback(SD_HandleTypeDef *hsd);
|
void HAL_SD_XferErrorCallback(SD_HandleTypeDef *hsd);
|
||||||
|
|
||||||
/* Non-Blocking mode: DMA */
|
/* Non-Blocking mode: DMA */
|
||||||
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
// dpgeorge: read/write functions renamed to emphasise that address is given by block number
|
||||||
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_BlockNumber_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
||||||
|
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_BlockNumber_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks);
|
||||||
HAL_SD_ErrorTypedef HAL_SD_CheckWriteOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
|
HAL_SD_ErrorTypedef HAL_SD_CheckWriteOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
|
||||||
HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
|
HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
|
||||||
/**
|
/**
|
||||||
|
@ -453,14 +453,14 @@ __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd)
|
|||||||
* @brief Reads block(s) from a specified address in a card. The Data transfer
|
* @brief Reads block(s) from a specified address in a card. The Data transfer
|
||||||
* is managed by polling mode.
|
* is managed by polling mode.
|
||||||
* @param hsd: SD handle
|
* @param hsd: SD handle
|
||||||
* @param pReadBuffer: pointer to the buffer that will contain the received data
|
* @param pReadBuffer: pointer to the buffer that will contain the received data
|
||||||
* @param ReadAddr: Address from where data is to be read
|
* @param BlockNumber: Block number from where data is to be read (byte address = BlockNumber * BlockSize)
|
||||||
* @param BlockSize: SD card Data block size
|
* @param BlockSize: SD card Data block size
|
||||||
* @note BlockSize must be 512 bytes.
|
* @note BlockSize must be 512 bytes.
|
||||||
* @param NumberOfBlocks: Number of SD blocks to read
|
* @param NumberOfBlocks: Number of SD blocks to read
|
||||||
* @retval SD Card error state
|
* @retval SD Card error state
|
||||||
*/
|
*/
|
||||||
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_BlockNumber(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
||||||
{
|
{
|
||||||
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
||||||
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
||||||
@ -470,10 +470,16 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuff
|
|||||||
/* Initialize data control register */
|
/* Initialize data control register */
|
||||||
hsd->Instance->DCTRL = 0;
|
hsd->Instance->DCTRL = 0;
|
||||||
|
|
||||||
|
uint32_t ReadAddr;
|
||||||
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
||||||
{
|
{
|
||||||
BlockSize = 512;
|
BlockSize = 512;
|
||||||
ReadAddr /= 512;
|
ReadAddr = BlockNumber;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// should not overflow for standard-capacity cards
|
||||||
|
ReadAddr = BlockNumber * BlockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set Block Size for Card */
|
/* Set Block Size for Card */
|
||||||
@ -512,7 +518,7 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuff
|
|||||||
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_READ_SINGLE_BLOCK;
|
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_READ_SINGLE_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdmmc_cmdinitstructure.Argument = (uint32_t)ReadAddr;
|
sdmmc_cmdinitstructure.Argument = ReadAddr;
|
||||||
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
||||||
|
|
||||||
/* Read block(s) in polling mode */
|
/* Read block(s) in polling mode */
|
||||||
@ -630,13 +636,13 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuff
|
|||||||
* transfer is managed by polling mode.
|
* transfer is managed by polling mode.
|
||||||
* @param hsd: SD handle
|
* @param hsd: SD handle
|
||||||
* @param pWriteBuffer: pointer to the buffer that will contain the data to transmit
|
* @param pWriteBuffer: pointer to the buffer that will contain the data to transmit
|
||||||
* @param WriteAddr: Address from where data is to be written
|
* @param BlockNumber: Block number to where data is to be written (byte address = BlockNumber * BlockSize)
|
||||||
* @param BlockSize: SD card Data block size
|
* @param BlockSize: SD card Data block size
|
||||||
* @note BlockSize must be 512 bytes.
|
* @note BlockSize must be 512 bytes.
|
||||||
* @param NumberOfBlocks: Number of SD blocks to write
|
* @param NumberOfBlocks: Number of SD blocks to write
|
||||||
* @retval SD Card error state
|
* @retval SD Card error state
|
||||||
*/
|
*/
|
||||||
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_BlockNumber(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
||||||
{
|
{
|
||||||
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
||||||
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
||||||
@ -648,10 +654,16 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBu
|
|||||||
/* Initialize data control register */
|
/* Initialize data control register */
|
||||||
hsd->Instance->DCTRL = 0;
|
hsd->Instance->DCTRL = 0;
|
||||||
|
|
||||||
|
uint32_t WriteAddr;
|
||||||
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
||||||
{
|
{
|
||||||
BlockSize = 512;
|
BlockSize = 512;
|
||||||
WriteAddr /= 512;
|
WriteAddr = BlockNumber;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// should not overflow for standard-capacity cards
|
||||||
|
WriteAddr = BlockNumber * BlockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set Block Size for Card */
|
/* Set Block Size for Card */
|
||||||
@ -681,7 +693,7 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBu
|
|||||||
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_WRITE_SINGLE_BLOCK;
|
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_WRITE_SINGLE_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdmmc_cmdinitstructure.Argument = (uint32_t)WriteAddr;
|
sdmmc_cmdinitstructure.Argument = WriteAddr;
|
||||||
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
||||||
|
|
||||||
/* Check for error conditions */
|
/* Check for error conditions */
|
||||||
@ -840,13 +852,13 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBu
|
|||||||
* to check the completion of the read process
|
* to check the completion of the read process
|
||||||
* @param hsd: SD handle
|
* @param hsd: SD handle
|
||||||
* @param pReadBuffer: Pointer to the buffer that will contain the received data
|
* @param pReadBuffer: Pointer to the buffer that will contain the received data
|
||||||
* @param ReadAddr: Address from where data is to be read
|
* @param BlockNumber: Block number from where data is to be read (byte address = BlockNumber * BlockSize)
|
||||||
* @param BlockSize: SD card Data block size
|
* @param BlockSize: SD card Data block size
|
||||||
* @note BlockSize must be 512 bytes.
|
* @note BlockSize must be 512 bytes.
|
||||||
* @param NumberOfBlocks: Number of blocks to read.
|
* @param NumberOfBlocks: Number of blocks to read.
|
||||||
* @retval SD Card error state
|
* @retval SD Card error state
|
||||||
*/
|
*/
|
||||||
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_BlockNumber_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
||||||
{
|
{
|
||||||
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
||||||
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
||||||
@ -886,10 +898,16 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
|
|||||||
/* Enable the DMA Channel */
|
/* Enable the DMA Channel */
|
||||||
HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pReadBuffer, (uint32_t)(BlockSize * NumberOfBlocks)/4);
|
HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pReadBuffer, (uint32_t)(BlockSize * NumberOfBlocks)/4);
|
||||||
|
|
||||||
|
uint32_t ReadAddr;
|
||||||
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
||||||
{
|
{
|
||||||
BlockSize = 512;
|
BlockSize = 512;
|
||||||
ReadAddr /= 512;
|
ReadAddr = BlockNumber;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// should not overflow for standard-capacity cards
|
||||||
|
ReadAddr = BlockNumber * BlockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set Block Size for Card */
|
/* Set Block Size for Card */
|
||||||
@ -929,7 +947,7 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
|
|||||||
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_READ_SINGLE_BLOCK;
|
sdmmc_cmdinitstructure.CmdIndex = SD_CMD_READ_SINGLE_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdmmc_cmdinitstructure.Argument = (uint32_t)ReadAddr;
|
sdmmc_cmdinitstructure.Argument = ReadAddr;
|
||||||
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
SDMMC_SendCommand(hsd->Instance, &sdmmc_cmdinitstructure);
|
||||||
|
|
||||||
/* Check for error conditions */
|
/* Check for error conditions */
|
||||||
@ -956,13 +974,13 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
|
|||||||
* to check the completion of the write process (by SD current status polling).
|
* to check the completion of the write process (by SD current status polling).
|
||||||
* @param hsd: SD handle
|
* @param hsd: SD handle
|
||||||
* @param pWriteBuffer: pointer to the buffer that will contain the data to transmit
|
* @param pWriteBuffer: pointer to the buffer that will contain the data to transmit
|
||||||
* @param WriteAddr: Address from where data is to be read
|
* @param BlockNumber: Block number to where data is to be written (byte address = BlockNumber * BlockSize)
|
||||||
* @param BlockSize: the SD card Data block size
|
* @param BlockSize: the SD card Data block size
|
||||||
* @note BlockSize must be 512 bytes.
|
* @note BlockSize must be 512 bytes.
|
||||||
* @param NumberOfBlocks: Number of blocks to write
|
* @param NumberOfBlocks: Number of blocks to write
|
||||||
* @retval SD Card error state
|
* @retval SD Card error state
|
||||||
*/
|
*/
|
||||||
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_BlockNumber_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint32_t BlockNumber, uint32_t BlockSize, uint32_t NumberOfBlocks)
|
||||||
{
|
{
|
||||||
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
SDMMC_CmdInitTypeDef sdmmc_cmdinitstructure;
|
||||||
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
SDMMC_DataInitTypeDef sdmmc_datainitstructure;
|
||||||
@ -1002,10 +1020,16 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWri
|
|||||||
/* Enable SDMMC DMA transfer */
|
/* Enable SDMMC DMA transfer */
|
||||||
__HAL_SD_SDMMC_DMA_ENABLE(hsd);
|
__HAL_SD_SDMMC_DMA_ENABLE(hsd);
|
||||||
|
|
||||||
|
uint32_t WriteAddr;
|
||||||
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
|
||||||
{
|
{
|
||||||
BlockSize = 512;
|
BlockSize = 512;
|
||||||
WriteAddr /= 512;
|
WriteAddr = BlockNumber;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// should not overflow for standard-capacity cards
|
||||||
|
WriteAddr = BlockNumber * BlockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set Block Size for Card */
|
/* Set Block Size for Card */
|
||||||
|
Loading…
Reference in New Issue
Block a user