|
mulitblock 读取 好像读取到的数据 不太正常 我用查询的方法来进行
调用
SD_ReadDisk(sdbuf,0,2); //通过 cmd18 SD_CMD_READ_MULT_BLOCK 读取开始两个扇区 的 1024 个字节
SD_ReadDisk(sdbuf,0,1); //通过 cmd17 SD_CMD_READ_SINGLE_BLOCK 读取第0扇区的 512字节
SD_ReadDisk(sdbuf,512,1); //通过 cmd17 SD_CMD_READ_SINGLE_BLOCK 读取第1扇区的 512字节
结果: SD_ReadDisk(sdbuf,0,2);的前512字节 和 SD_ReadDisk(sdbuf,0,1); 开头 4个字节 不一样
SD_ReadDisk(sdbuf,0,2);的后512字节 和 SD_ReadDisk(sdbuf,512,1); 完全不一样
SD_ReadDisk(sdbuf,0,2);前512字节
D8 C5 0E 00 53 44 4F 53 35 2E 30 00 02 08 E6 04
02 00 00 00 00 F8 00 00 3F 00 FF 00 00 00 00 00
00 70 76 00 8D 1D 00 00 00 00 00 00 02 00 00 00
01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 29 9F 93 9C E8 4E 4F 20 4E 41 4D 45 20 20
20 20 46 41 54 33 32 20 20 20 33 C9 8E D1 BC F4
7B 8E C1 8E D9 BD 00 7C 88 4E 02 8A 56 40 B4 41
BB AA 55 CD 13 72 10 81 FB 55 AA 75 0A F6 C1 01
74 05 FE 46 02 EB 2D 8A 56 40 B4 08 CD 13 73 05
B9 FF FF 8A F1 66 0F B6 C6 40 66 0F B6 D1 80 E2
3F F7 E2 86 CD C0 ED 06 41 66 0F B7 C9 66 F7 E1
66 89 46 F8 83 7E 16 00 75 38 83 7E 2A 00 77 32
66 8B 46 1C 66 83 C0 0C BB 00 80 B9 01 00 E8 2B
00 E9 2C 03 A0 FA 7D B4 7D 8B F0 AC 84 C0 74 17
3C FF 74 09 B4 0E BB 07 00 CD 10 EB EE A0 FB 7D
EB E5 A0 F9 7D EB E0 98 CD 16 CD 19 66 60 80 7E
02 00 0F 84 20 00 66 6A 00 66 50 06 53 66 68 10
00 01 00 B4 42 8A 56 40 8B F4 CD 13 66 58 66 58
66 58 66 58 EB 33 66 3B 46 F8 72 03 F9 EB 2A 66
33 D2 66 0F B7 4E 18 66 F7 F1 FE C2 8A CA 66 8B
D0 66 C1 EA 10 F7 76 1A 86 D6 8A 56 40 8A E8 C0
E4 06 0A CC B8 01 02 CD 13 66 61 0F 82 75 FF 81
C3 00 02 66 40 49 75 94 C3 42 4F 4F 54 4D 47 52
20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 0D 0A 52 65
6D 6F 76 65 20 64 69 73 6B 73 20 6F 72 20 6F 74
68 65 72 20 6D 65 64 69 61 2E FF 0D 0A 44 69 73
6B 20 65 72 72 6F 72 FF 0D 0A 50 72 65 73 73 20
61 6E 79 20 6B 65 79 20 74 6F 20 72 65 73 74 61
72 74 0D 0A 00 00 00 00 00 AC CB D8 00 00 55 AA
SD_ReadDisk(sdbuf,0,2);后512字节
00 00 00 00 00 55 AA B2 B5 DA 22 B6 3F 51 A5 FF
FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SD_ReadDisk(sdbuf,0,1);输出数据
EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 08 E6 04
02 00 00 00 00 F8 00 00 3F 00 FF 00 00 00 00 00
00 70 76 00 8D 1D 00 00 00 00 00 00 02 00 00 00
01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00
80 00 29 9F 93 9C E8 4E 4F 20 4E 41 4D 45 20 20
20 20 46 41 54 33 32 20 20 20 33 C9 8E D1 BC F4
7B 8E C1 8E D9 BD 00 7C 88 4E 02 8A 56 40 B4 41
BB AA 55 CD 13 72 10 81 FB 55 AA 75 0A F6 C1 01
74 05 FE 46 02 EB 2D 8A 56 40 B4 08 CD 13 73 05
B9 FF FF 8A F1 66 0F B6 C6 40 66 0F B6 D1 80 E2
3F F7 E2 86 CD C0 ED 06 41 66 0F B7 C9 66 F7 E1
66 89 46 F8 83 7E 16 00 75 38 83 7E 2A 00 77 32
66 8B 46 1C 66 83 C0 0C BB 00 80 B9 01 00 E8 2B
00 E9 2C 03 A0 FA 7D B4 7D 8B F0 AC 84 C0 74 17
3C FF 74 09 B4 0E BB 07 00 CD 10 EB EE A0 FB 7D
EB E5 A0 F9 7D EB E0 98 CD 16 CD 19 66 60 80 7E
02 00 0F 84 20 00 66 6A 00 66 50 06 53 66 68 10
00 01 00 B4 42 8A 56 40 8B F4 CD 13 66 58 66 58
66 58 66 58 EB 33 66 3B 46 F8 72 03 F9 EB 2A 66
33 D2 66 0F B7 4E 18 66 F7 F1 FE C2 8A CA 66 8B
D0 66 C1 EA 10 F7 76 1A 86 D6 8A 56 40 8A E8 C0
E4 06 0A CC B8 01 02 CD 13 66 61 0F 82 75 FF 81
C3 00 02 66 40 49 75 94 C3 42 4F 4F 54 4D 47 52
20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 0D 0A 52 65
6D 6F 76 65 20 64 69 73 6B 73 20 6F 72 20 6F 74
68 65 72 20 6D 65 64 69 61 2E FF 0D 0A 44 69 73
6B 20 65 72 72 6F 72 FF 0D 0A 50 72 65 73 73 20
61 6E 79 20 6B 65 79 20 74 6F 20 72 65 73 74 61
72 74 0D 0A 00 00 00 00 00 AC CB D8 00 00 55 AA
SD_ReadDisk(sdbuf,512,1);输出数据
52 52 61 41 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 72 72 41 61 D8 C5 0E 00 2A 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
代码如下
- SD_Error SD_ReadBlock(u8 *buf,long long addr,u16 blksize,u32 nblks)
- {
- SD_Error errorstatus=SD_OK;
- u32 blkcnt;
- u32 i;
- u32 timeout=SDIO_DATATIMEOUT,d;
- u32 *tempbuff=(u32*)buf; //转换为u32指针
- if(CardType==SDIO_HIGH_CAPACITY_SD_CARD)//大容量卡
- {
- blksize=512;
- addr>>=9;
- }
- SDIO_Send_Cmd(SD_CMD_SET_BLOCKLEN,1,blksize); //发送CMD16+设置数据长度为blksize,短响应
- errorstatus=CmdResp1Error(SD_CMD_SET_BLOCKLEN); //等待R1响应
- if(errorstatus!=SD_OK) return errorstatus; //响应错误
- SDIO_Send_Data_Cfg(SD_DATATIMEOUT,nblks*blksize,blksize,1); //nblks*blksize,块大小恒为512,卡到控制器
- TEST_SDIOx->BUF_CTL &= ~(1<<14);
- TEST_SDIOx->MMC_INT_MASK =0;
- TEST_SDIOx->CLR_MMC_INT = 0xFF; //清除中断标志位
- //TEST_SDIOx->MMC_CTRL|=(1<<9); //使能sd 中断
- printf("nblks=%d\r\n",nblks);
- if(nblks>1) //多块读
- {
- SDIO_Send_Cmd(SD_CMD_READ_MULT_BLOCK,1,addr); //发送CMD18+从addr地址出读取数据,短响应
- errorstatus=CmdResp1Error(SD_CMD_READ_MULT_BLOCK); //等待R1响应
- if(errorstatus!=SD_OK)return errorstatus; //响应错误
- }else //单块读
- {
- SDIO_Send_Cmd(SD_CMD_READ_SINGLE_BLOCK,1,addr); //发送CMD17+从addr地址出读取数据,短响应
- errorstatus=CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK); //等待R1响应
- if(errorstatus!=SD_OK)return errorstatus; //响应错误
- }
- //SD_DMA_Config((u32*)buf,nblks*blksize,0); ]
- i=0;
- for(blkcnt=0;blkcnt<nblks;blkcnt++)
- {
- ClearSdMsg();
- //TEST_SDIOx->MMC_INT_MASK=INT_MASK; //使能sd 中断(1<<0)|(1<<1)|(1<<6)|(1<<7);
- TEST_SDIOx->MMC_IO|=3;
- //TEST_SDIOx->BUF_CTL |= (1<<14); //SDIO DMA使能
- while(!(TEST_SDIOx->CLR_MMC_INT&((1<<2)|(1<<6)|(1<<1))));
- TEST_SDIOx->CLR_MMC_INT = 0xFF; //清除中断标志位
- //errorstatus=WaitSdMsg(0);
- printf("msg:%d\r\n",errorstatus);
- while(!(TEST_SDIOx->BUF_CTL&(1<<1)))
- {
- d=TEST_SDIOx->DATA_BUF0;
- printf("%02X %02X %02X %02X ",(d>>0)&0xff,(d>>8)&0xff,(d>>16)&0xff,(d>>24)&0xff);
- if(++i%4==0) printf("\r\n");
- }
- }
- if(nblks>1)
- {
- SDIO_Send_Cmd(SD_CMD_STOP_TRANSMISSION,1,0); //发送CMD12+结束传输
- errorstatus=CmdResp1Error(SD_CMD_STOP_TRANSMISSION); //等待R1响应
- if(errorstatus!=SD_OK)return errorstatus;
- }
- return errorstatus;
- }
复制代码
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|