同步操作将从 Phytium嵌入式软件/Phytium-Standalone-SDK 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
SD/MMC控制器主要提供对固态非易失性存储的内存卡的访问能力,包括多媒体存储卡(MMC,MultiMedia Card)和安全和数据保护卡(SD,Secure Digital Card)。
SD/MMC控制器驱动提供了SD/MMC卡的控制访问方法,
访问SD/MMC卡需要兼容一系列协议命令,这一部分驱动不提供,可以通过第三方框架sdmmc使用
驱动相关的源文件包括,
fsdmmc
├── fsdmmc.c
├── fsdmmc.h
├── fsdmmc_dma.c
├── fsdmmc_dma.h
├── fsdmmc_g.c
├── fsdmmc_hw.c
├── fsdmmc_hw.h
├── fsdmmc_intr.c
└── fsdmmc_sinit.c
以下部分将指导您完成 FSDMMC 驱动的软件配置:
typedef struct
{
FSdmmcConfig config; /* Current active configs */
u32 is_ready; /* Device is initialized and ready */
FSdmmcEventHandler evt_handler[FSDMMC_EVT_NUM];
void *evt_args[FSDMMC_EVT_NUM];
} FSdmmc; /* Device instance */
typedef struct
{
u32 instance_id; /* Device instance id */
uintptr base_addr; /* Device base address */
u32 irq_num[FSDMMC_INTR_NUM];
} FSdmmcConfig;
typedef struct
{
u32 cmdidx;
u32 cmdarg;
u32 resptype;
u32 response[4];
u32 flag;
#define FSDMMC_CMD_FLAG_NEED_STOP BIT(0)
#define FSDMMC_CMD_FLAG_NEED_INIT BIT(1)
#define FSDMMC_CMD_FLAG_EXP_RESP BIT(2)
#define FSDMMC_CMD_FLAG_EXP_LONG_RESP BIT(3)
#define FSDMMC_CMD_FLAG_NEED_RESP_CRC BIT(4)
#define FSDMMC_CMD_FLAG_EXP_DATA BIT(5)
#define FSDMMC_CMD_FLAG_WRITE_DATA BIT(6)
#define FSDMMC_CMD_FLAG_READ_DATA BIT(7)
#define FSDMMC_CMD_FLAG_NEED_AUTO_STOP BIT(8)
#define FSDMMC_CMD_FLAG_ADTC BIT(9)
FSdmmcData *data_p;
} FSdmmcCmd;
typedef struct
{
u8 *buf;
u32 blksz;
u32 blkcnt;
u32 datalen;
} FSdmmcData;
enum
{
FSDMMC_DMA_BD_INTR = 0,
FSDMMC_CMD_INTR,
FSDMMC_ERROR_INTR,
FSDMMC_INTR_NUM
}; /* 中断类型 */
enum
{
FSDMMC_EVT_CARD_REMOVED = 0,
FSDMMC_EVT_CMD_DONE,
FSDMMC_EVT_CMD_ERROR,
FSDMMC_EVT_CMD_RESP_ERROR,
FSDMMC_EVT_DATA_ERROR,
FSDMMC_EVT_DATA_READ_DONE,
FSDMMC_EVT_DATA_WRITE_DONE,
FSDMMC_EVT_NUM
}; /* 事件类型 */
[0x0] FSDMMC_SUCCESS : success
[0x10c0001] FSDMMC_ERR_NOT_READY : FSDMMC控制器未初始化
[0x10c0001] FSDMMC_ERR_TIMEOUT : 数据或者命令传输等待超时
[0x10c0001] FSDMMC_ERR_CMD_FAILED : 命令传输失败
[0x10c0001] FSDMMC_ERR_DATA_FAILED : 数据传输失败
[0x10c0001] FSDMMC_ERR_CARD_NO_FOUND : 卡未检测到
[0x10c0001] FSDMMC_ERR_INVALID_BUF : 数据缓冲区不合法
const FSdmmcConfig *FSdmmcLookupConfig(u32 instance_id);
Note:
Input:
Return:
FError FSdmmcCfgInitialize(FSdmmc *instance_p, const FSdmmcConfig *input_config_p);
Note:
Input:
Return:
void FSdmmcDeInitialize(FSdmmc *instance_p);
Note:
Input:
Return:
FError FSdmmcPollTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p);
Note:
Input:
Return:
FError FSdmmcInterruptTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p);
Note:
Input:
Return:
u32 FSdmmcGetInterruptMask(uintptr base_addr, u32 intr_type);
Note:
Input:
Return:
void FSdmmcSetInterruptMask(uintptr base_addr, u32 intr_type, u32 mask, boolean enable);
Note:
Input:
Return:
void FSdmmcCmdInterrupHandler(s32 vector, void *param);
Note:
Input:
Return:
void FSdmmcDmaInterrupHandler(s32 vector, void *param);
Note:
Input:
Return:
void FSdmmcErrInterrupHandler(s32 vector, void *param);
Note:
Input:
Return:
void FSdmmcRegisterInterruptHandler(FSdmmc *instance_p, u32 event, FSdmmcEventHandler handler, void *args);
Note:
Input:
Return:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。