- changed milestone to STM32F429ZIT6U
LLD for SDMMC (STM32F4)
Issue #189
new
General Description
The task is part of #186. The goal of the task is to provide support for SDMMC driver in the LLD of STM32F7 target.
The related task on the trello board: https://trello.com/c/d3YiDTBr
Related tasks
- [ #191 ] - Implementation of SDMMC driver - General
SDMMC
architecture - [
#192] - Implementation of SDMMC LLD Mode - [
#187] - LLD for SDMMC (STM32F7)
Required LLD interface
// stores SDMMC command
typedef uint8_t oC_SDMMC_LLD_CommandIndex_t;
typedef enum
{
oC_SDMMC_LLD_ResponseType_None ,
oC_SDMMC_LLD_ResponseType_ShortResponse ,
oC_SDMMC_LLD_ResponseType_LongResponse ,
oC_SDMMC_LLD_ResponseType_NumberOfElements
} oC_SDMMC_LLD_ResponseType_t;
// Stores source of the interrupt
typedef enum
{
oC_SDMMC_LLD_InterruptSource_None = 0 , // None interrupt source
oC_SDMMC_LLD_InterruptSource_CommandSent = (1<<0) , // Interrupt is fired when the command has been sent
oC_SDMMC_LLD_InterruptSource_CommandResponseReceived = (1<<1) , // Interrupt is fired when the response for the command has been received
oC_SDMMC_LLD_InterruptSource_DataReadyToReceive = (1<<2) , // Interrupt is fired when Rx FIFO is not empty - some data waits to be read
oC_SDMMC_LLD_InterruptSource_ReadyToSendNewData = (1<<3) , // Interrupt is fired when Tx FIFO is not full
oC_SDMMC_LLD_InterruptSource_TransmissionError = (1<<4), // Interrupt is fired in case of error
} oC_SDMMC_LLD_InterruptSource_t;
// Stores pointer to the interrupt handler
typedef void (*oC_SDMMC_LLD_InterruptHandler_t)( oC_SDMMC_Channel_t Channel , oC_SDMMC_LLD_InterruptSource_t InterruptSource );
// stores SDMMC command
typedef struct
{
oC_SDMMC_LLD_CommandIndex_t CommandIndex; // index of the command
uint32_t Argument; // Argument for the command
bool SuspendCommand; // If it is set, the command to be sent is a suspend command (to be used only with SDIO card)
oC_SDMMC_LLD_ResponseType_t ResponseType;
} oC_SDMMC_LLD_Command_t;
// stores response for the SDMMC command
typedef struct
{
oC_SDMMC_LLD_CommandIndex_t CommandIndex; // Index of the command
uint32_t Response[4]; // Response for the command
} oC_SDMMC_LLD_CommandResponse_t;
typedef enum
{
oC_SDMMC_LLD_WideBus_1Bit , // Only D0 is used - default bus mode
oC_SDMMC_LLD_WideBus_4Bit , // D[0:3] is used
oC_SDMMC_LLD_WideBus_8Bit , // D[0:7] is used
oC_SDMMC_LLD_WideBus_NumberOfElements
} oC_SDMMC_LLD_WideBus_t;
// Stores SDMMC LLD configuration
typedef struct
{
oC_SDMMC_LLD_WideBus_t WideBus; // Wide of the
oC_MemorySize_t SectorSize; // Size of the sector (block) in bytes
oC_SDMMC_Channel_t Channel; // Channel of the SDMMC
} oC_SDMMC_LLD_Config_t;
// Initializes the SDMMC LLD
extern oC_ErrorCode_t oC_SDMMC_LLD_TurnOn( void );
// releases the SDMMC LLD
extern oC_ErrorCode_t oC_SDMMC_LLD_TurnOff( void );
// Sets address of the interrupt handler
extern oC_ErrorCode_t oC_SDMMC_LLD_SetInterruptHandler( oC_SDMMC_LLD_InterruptHandler_t Handler, oC_SDMMC_LLD_InterruptSource_t EnabledSources );
// configures the SDMMC LLD
extern oC_ErrorCode_t oC_SDMMC_LLD_Configure( const oC_SDMMC_LLD_Config_t * Config );
// unconfigures SDMMC LLD
extern oC_ErrorCode_t oC_SDMMC_LLD_Unconfigure( oC_SDMMC_Channel_t Channel );
// configures the given pin to work with the SDMMC driver
extern oC_ErrorCode_t oC_SDMMC_LLD_ConfigurePin( oC_SDMMC_Channel_t Channel , oC_Pin_t Pin , oC_SDMMC_PinFunction_t PinFunction );
// Checks if the given pin can work with the given function for the SDMMC driver
extern bool oC_SDMMC_LLD_IsPinAvailble( oC_SDMMC_Channel_t Channel , oC_Pin_t Pin , oC_SDMMC_PinFunction_t PinFunction );
// Unconfigures SDMMC pin
extern oC_ErrorCode_t oC_SDMMC_LLD_UnconfigurePin( oC_Pin_t Pin );
// Sends SDMMC command
extern oC_ErrorCode_t oC_SDMMC_LLD_SendCommand( oC_SDMMC_Channel_t Channel, const oC_SDMMC_LLD_Command_t * Command );
// Reads command response
extern oC_ErrorCode_t oC_SDMMC_LLD_ReadCommandResponse( oC_SDMMC_Channel_t Channel , oC_SDMMC_LLD_CommandResponse_t * outResponse );
// Writes data to the FIFO
extern oC_ErrorCode_t oC_SDMMC_LLD_WriteDataPackage( oC_SDMMC_Channel_t Channel, oC_DataPackage_t * DataPackage );
// Reads data from the FIFO
extern oC_ErrorCode_t oC_SDMMC_LLD_ReadDataPackage( oC_SDMMC_Channel_t Channel, oC_DataPackage_t * DataPackage );
Comments (4)
-
reporter -
reporter - edited description
-
reporter - edited description
-
reporter - removed component
Removing component: SDMMC (automated comment)
- Log in to comment