使用rt thread 4.10版的SDIO接口和dfs接口,在使用RT1061的硬件SDIO初始化SD卡的时候开始的过程都正常,能够读出卡的大小(4G SDHC卡),但是在读第一个block的时候长时间没有响应:
msh /> src_clk: 54620688, usdhc_clk: 0, bus_width: 0
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
cmd->cmd_code: 00, cmd->arg: 00000000, cmd->flags: 00000060 --> resp 0x00000000
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
cmd->cmd_code: 08, cmd->arg: 000001aa, cmd->flags: 000001f7 --> resp 0x000001AA
cmd->cmd_code: 55, cmd->arg: 00000000, cmd->flags: 00000031 --> resp 0x00000120
cmd->cmd_code: 41, cmd->arg: 00000000, cmd->flags: 00000074 --> resp 0x40FF8000
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
cmd->cmd_code: 00, cmd->arg: 00000000, cmd->flags: 00000060 --> resp 0x00000000
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
cmd->cmd_code: 08, cmd->arg: 000001aa, cmd->flags: 000001f7 --> resp 0x000001AA
cmd->cmd_code: 55, cmd->arg: 00000000, cmd->flags: 00000031 --> resp 0x00000120
cmd->cmd_code: 41, cmd->arg: 40300000, cmd->flags: 00000074 --> resp 0x40FF8000
cmd->cmd_code: 55, cmd->arg: 00000000, cmd->flags: 00000031 --> resp 0x00000120
cmd->cmd_code: 41, cmd->arg: 40300000, cmd->flags: 00000074 --> resp 0xC0FF8000
cmd->cmd_code: 02, cmd->arg: 00000000, cmd->flags: 00000033 --> resp 0x03534453 0x55303447 0x800D386F 0xC700B200
cmd->cmd_code: 03, cmd->arg: 00000000, cmd->flags: 00000036 --> resp 0xE6240520
src_clk: 54620688, usdhc_clk: 375000, bus_width: 0
cmd->cmd_code: 09, cmd->arg: e6240000, cmd->flags: 00000003 --> resp 0x400E0032 0x5B590000 0x1D8A7F80 0x0A404000
[I/SDIO] SD card capacity 3872256 KB.
cmd->cmd_code: 07, cmd->arg: e6240000, cmd->flags: 00000001 --> resp 0x00000700
cmd->cmd_code: 55, cmd->arg: e6240000, cmd->flags: 00000001 --> resp 0x00000920
cmd->cmd_code: 51, cmd->arg: 00000000, cmd->flags: 00000051 --> blksize:8, blks:1 resp 0x00000920
cmd->cmd_code: 06, cmd->arg: 00fffff1, cmd->flags: 00000011 --> blksize:64, blks:1 resp 0x00000900
cmd->cmd_code: 06, cmd->arg: 80fffff1, cmd->flags: 00000011 --> blksize:64, blks:1 resp 0x00000900
[I/SDIO] switching card to high speed failed!
src_clk: 54620688, usdhc_clk: 25000000, bus_width: 0
cmd->cmd_code: 55, cmd->arg: e6240000, cmd->flags: 00000001 --> resp 0x00000920
cmd->cmd_code: 06, cmd->arg: 00000001, cmd->flags: 00000001 --> resp 0x80000920
src_clk: 54620688, usdhc_clk: 25000000, bus_width: 1
[D/SDIO] probe mmcsd block device!
cmd->cmd_code: 17, cmd->arg: 00000000, cmd->flags: 00000051 --> blksize:512, blks:1
过了大概2分钟左右会有响应但是找到的是错的分区表:
[D/SDIO] probe mmcsd block device!
cmd->cmd_code: 17, cmd->arg: 00000000, cmd->flags: 00000051 --> blksize:512, blks:1 resp 0x00000900
found part[0], begin: 939524096, size: 8.15MB
found part[1], begin: 1207959552, size: 8.15MB
found part[2], begin: 1476395008, size: 8.15MB
found part[3], begin: 1744830464, size: 8.15MB
found part[4], begin: -2143289344, size: 240.900GB
目前初步排查是RT1061的ADMA2有问题,导致DMA返回不了正确的返回值,dmaConfig的设置保持drv_sdio.c没有变:
dmaConfig.dmaMode = USDHC_DMA_MODE;
dmaConfig.burstLen = kUSDHC_EnBurstLenForINCR;
dmaConfig.admaTable = mmcsd->usdhc_adma2_table;
dmaConfig.admaTableWords = USDHC_ADMA2_TABLE_WORDS;
请问有没有遇到过相似问题的朋友,帮忙解答一下!!非常感谢!