⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdms_cmd.c

📁 嵌入式linux(arm9)的平台下
💻 C
字号:
#include "sdms_cmd.h"#include "sdms.h"// CMD00 GO_IDLE_STATEvoid sdms_CMD00(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00000001;                    // CMD00 GO_IDLE_STATE	sync();}// CMD02 ALL_SEND_CIDvoid sdms_CMD02(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00020201;                    // CMD02 ALL_SEND_CID	sync();//	printf("CMD02  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD03 SEND_RELATIVE_ADDRvoid sdms_CMD03(int base, int arg){		int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00060301;                    // CMD03 SEND_RELATIVE_ADDR	sync();//	printf("CMD03  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD07 SELECT/DESELECT CARD, R1b responsevoid sdms_CMD07(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();//	sdms_cmd(base) = 0x00810701;                    // SELECT/DESELECT CARD	sdms_cmd(base) = 0x00010701;                    // CMD07 SELECT/DESELECT CARD	sync();//	printf("CMD07  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD09 SEND_CSDvoid sdms_CMD09(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {} 	        // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00020901;                    // CMD09 SEND_CSD	sync();//	printf("CMD09  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD13 SEND_STATUSvoid sdms_CMD13(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00010d01;                    // CMD13 SEND_STATUS	sync();//	printf("CMD13  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD16 SET_BLOCKLENvoid sdms_CMD16(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00011001;                    // CMD16 SET_BLOCKLEN	sync();}// CMD17 READ_SINGLE_BLOCKvoid sdms_CMD17(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000020) {}        // wait when DBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;                        // address of read	sync();	sdms_cmd(base) = 0x00011121;                    // CMD17 READ_SINGLE_BLOCK	sync();//	printf("CMD17  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD18 READ_MULTIPLE_BLOCKvoid sdms_CMD18(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000020) {}        // wait when DBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;						// address of read	sync();	sdms_cmd(base) = 0x00011241;                    // CMD18 READ_MULTIPLE_BLOCK	sync();//	printf("CMD18  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD24 WRITE_BLOCKvoid sdms_CMD24(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000020) {}        // wait when DBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;                        // address of write	sync();	sdms_cmd(base) = 0x00011811;                    // CMD24 WRITE_BLOCK	sync();//	printf("CMD24  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD25 WRITE_MULTIPLE_BLOCKvoid sdms_CMD25(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000020) {}        // wait when DBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;                        // address of write	sync();	sdms_cmd(base) = 0x00011931;                    // CMD25 WRITE_MULTIPLE_BLOCK	sync();//	printf("CMD25  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD32 ERASE_WR_BLK_STARTvoid sdms_CMD32(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;                        // starting address of erase	sync();	sdms_cmd(base) = 0x00012001;                    // CMD32 ERASE_WR_BLK_START	sync();//	printf("CMD32  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD33 ERASE_WR_BLK_ENDvoid sdms_CMD33(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;                        // end address of erase	sync();	sdms_cmd(base) = 0x00012101;                    // CMD33 ERASE_WR_BLK_END	sync();//	printf("CMD33  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD38 ERASE, R1b responsevoid sdms_CMD38(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00812601;                    // CMD38 ERASE	sync();//	printf("CMD38  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// CMD55 APP_CMDvoid sdms_CMD55(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear all status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00013701;	sync();//	printf("CMD55  cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// ACMD06 SET_BUS_WIDTHvoid sdms_ACMD06(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {}           // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00010601;                    // ACMD06 SET_BUS_WIDTH	sync();//	printf("ACMD06 cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// ACMD41 SD_APP_OP_CONDvoid sdms_ACMD41(int base, int arg){	int resp, i;		while(sdms_cmd(base) & 0x00000001) {}           // wait until not busy	while(sdms_status(base) & 0x00000010) {}        // wait until not busy		// wait 1 ms	i = 0;	while( i < 400000 ) { i = i + 1; }		sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	sync();		sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00032901;                    // ACMD41 SD_APP_OP_COND	sync();//	printf("ACMD41 cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}// ACMD51 SEND_SCRvoid sdms_ACMD51(int base, int arg){	int resp;		while(sdms_cmd(base) & 0x00000001) {} 	        // wait when CBSY = 1	while(sdms_status(base) & 0x00000010) {}        // wait when CRBSY = 1	sdms_status(base) = 0xffffffff;                 // clear status bits	resp = sdms_resp0(base);                        // clear RRDY bit	//	printf("SCR: sdms_status = 0x%08x\n", sdms_status(base));		sdms_cmdarg(base) = arg;	sync();	sdms_cmd(base) = 0x00013321;                    // ACMD51 SEND_SCR	sync();//	printf("ACMD51 cmd = 0x%08x, argument = 0x%08x\n", sdms_cmd(base), sdms_cmdarg(base));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -