SD卡 老卡 1G 2G,CH32V307,对任何命令都无响应

手上有两个老SD卡,1G和2G,用电脑读卡器测试是完全正常的。

但,使用CH32V307的SD卡接口,发送任何命令,都无响应。

读取其它SD卡(4G、16G、32G)的信息都没有问题,所以硬件肯定没问题,程序也应该没啥大问题。

目前能想到的是,CH32V307工作频率144M,给SD卡分频后,最少560k,不能低到SD要求的400k,不知道是否有影响。

别的还能有啥问题?

刚才把错误码打印出来,能看到,其实1G、2G的卡还是有点响应的。

1、发送CMD0,让SD卡进入IDLE状态,这个不需要响应。

2、发送CMD8,参数0x000001AA,通过 CmdResp7Error 得到错误码 3,超时。

3、发送CMD55,参数0,通过 CmdResp1Error 得到错误码 0x00400000,这个应该是SD卡反馈的,不知道啥意思。

4、后面再发送命令,CMD1、CMD2,都是返回错误码 3,超时。


您好,


        EVT中的SDIO例程有打印功能,您可以直接运行后将打印信息发送至邮箱:lbw@wch.cn。


        错误码在sdio.h文件下有给出,可以对照查看。image.png


下文是调试信息,SD开头的,是我加的,体现了发送命令的过程,参数,及反馈。最后一个错误码 3,是原始的调试信息。

总的来说,主要错误就是 3,SD_CMD_RSP_TIMEOUT,超时。


这个是出问题的,2G卡的调试信息:

SD: Port Inited

SD: GoIdleState(0) Ok(0)

SD: Determine Card Type

SD: SendIfCond(0x000001AA) Err: 0x00000003    //第一个需要应答的命令就超时了

SD: Card V1.1

SD: AppCmd(0) Err: 0x00400000

SD: SendOpCond(0x80FF8000) Err: 0x00000003

SD Card Error: 3


这个是能正常访问的,4G卡的调试信息:

SD: Card V2.0

SD: AppCmd(0) Ok

SD: AppCmd(0) Ok(0)

SD: SdAppOpCond(0xC0100000) Ok(0)

SD: OCR: 0x00FF8000

SD: AppCmd(0) Ok(1)

SD: SdAppOpCond(0xC0100000) Ok(1)

SD: OCR: 0xC0FF8000

SD: High Capacity SD

SD: Get Card Information

SD: AllSendCID Ok

SD: CID: 0x02544D53 41303447 039C5E8C 88009714

SD: SetRelAddr Ok, RCA = 0x1234

SD: SendCSD(0x12340000) Ok

SD: CSD: 0x400E0032 5B590000 1D7B7F80 0A40005C

SD: CSD Version 2.0

SD: Max Line Speed: 0x32 = 25Mbps

SD: Command Class: 0101 1011 0101 (Class11-0)

SD: DeviceSize: 7547

SD: Capacity: 3774MB, Block: 512B

......


您好,


        抱歉,我没看懂你的打印信息代表了什么过程,可以明确是什么阶段什么命令的超时吗?





是发送CMD55时返回错误。


SDIO_CmdInitStructure.SDIO_Argument = 0x00;

SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;

SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;

SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;

SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;

SDIO_SendCommand(&SDIO_CmdInitStructure);

errorstatus=CmdResp1Error(SD_CMD_APP_CMD);

//对于老旧的小容量卡(大SD卡),1G、2G,在这儿会返回错误 0x00400000



您好,


        发送CMD55指令代表下一条将发送特定应用命令,这个操作在多个过程中均有使用。麻烦使用我们EVT中的例程进行测试,提供串口打印信息,以便我同步问题现象,谢谢。

image.png





只有登录才能回复,可以选择微信账号登录