求565/569评估板EMMC存储器擦除的例程,邮箱个人信息保护,已隐藏
谢谢
热门产品 :
CH32L103: 32位PDUSB低功耗单片机
求565/569评估板EMMC存储器擦除的例程,邮箱个人信息保护,已隐藏
谢谢
CH569EVT例程中提供了EMMC命令执行函数:
#define EMMCSendCmd(a, b) {R32_EMMC_ARGUMENT = a; R16_EMMC_CMD_SET = b;}
根据标准
(图片截取自《嵌入式多媒体设备(e-MMC)电气标准 4.51》)
R32_EMMC_ARGUMENT寄存器传入参数,R16_EMMC_CMD_SET寄存器传入命令号以及命令类型。
具体可以通过学习块写、块读、读EXCSD时的调用方式,对照协议修改一下即可。
EMMC通常不需要擦就可以直接写入。
例子1:CMD8
例程代码:
UINT8 EMMCCardReadEXCSD( PSD_PARAMETER pEMMCPara, PUINT8 pRdatbuf ) { UINT32 cmd_arg_val; UINT16 cmd_set_val; R32_EMMC_DMA_BEG1 = (UINT32)pRdatbuf; R32_EMMC_TRAN_MODE = 0; R32_EMMC_BLOCK_CFG = 512<<16 | 1; cmd_arg_val = 0; cmd_set_val = RB_EMMC_CKIDX | RB_EMMC_CKCRC | RESP_TYPE_48 | EMMC_CMD8; EMMCSendCmd(cmd_arg_val, cmd_set_val); while(1) { if(R16_EMMC_INT_FG & RB_EMMC_IF_TRANDONE) break; if( pEMMCPara->EMMCOpErr ) return CMD_FAILED; } R16_EMMC_INT_FG = 0xffff; return OP_SUCCESS; }
其中:
1、应答类型,SPEC指示为R1,例程参数为RESP_TYPE_48
2、参数,SPEC指示为填充位,即没什么用,所以例程代码赋值0
例子2:CMD9
例程代码:
UINT8 EMMCReadCSD( PSD_PARAMETER pEMMCPara ) { UINT32 cmd_arg_val; UINT16 cmd_set_val; UINT8 sta; UINT32 disk_block_num = 0; cmd_arg_val = pEMMCPara->EMMC_RCA<<16; cmd_set_val = 0 | 0 | RESP_TYPE_136 | EMMC_CMD9; EMMCSendCmd(cmd_arg_val, cmd_set_val); while(1) { sta = CheckCMDComp( pEMMCPara ); if( sta != CMD_NULL ) break; } if(sta == CMD_SUCCESS) { pEMMCPara->EMMC_CSD[0] = R32_EMMC_RESPONSE0; pEMMCPara->EMMC_CSD[1] = R32_EMMC_RESPONSE1; pEMMCPara->EMMC_CSD[2] = R32_EMMC_RESPONSE2; pEMMCPara->EMMC_CSD[3] = R32_EMMC_RESPONSE3; disk_block_num = (((pEMMCPara->EMMC_CSD[2]&0x3ff)<<2) | ((pEMMCPara->EMMC_CSD[1])>>30)); if(disk_block_num == 0xFFF) { pEMMCPara->EMMCSecNum = 0xFFF; } else { pEMMCPara->EMMCType = EMMCIO_CAPACITY_SD_CARD_V2_0; /* memory capacity = BLOCKNR*BLOCK_LEN = (C_SIZE+1)<<(C_SIZE_MULT+2)<<(READ_BL_LEN) */ disk_block_num = ( (((pEMMCPara->EMMC_CSD[2]&0x3ff)<<2) | (pEMMCPara->EMMC_CSD[1]>>30)) + 1 ); disk_block_num = ( (disk_block_num) << (((pEMMCPara->EMMC_CSD[1]>>15)&0x07) + 2)); } } pEMMCPara->EMMCSecSize = 1<<((pEMMCPara->EMMC_CSD[2]>>16)&0x000f); return sta; }
其中:
1、应答类型,SPEC指示为R2,例程参数为RESP_TYPE_136
2、参数,SPEC指示为[31:16] RCA
[15:0] 填充位,例程代码赋值pEMMCPara->EMMC_RCA<<16
调用方式类似,根据SPEC指示,将参数写入到两个寄存器中。