📄 sdms_cmd.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 + -