stm32的SDIO接口命令响应不对

2019-07-21 05:29发布

本帖最后由 xiaokun 于 2019-1-23 16:03 编辑

最近在做SDIO接口相关的东西,将原本以PC作为sdio主机的代码移植到STM32上。以STM32F103作为SDIO主机,来访问一个SDIO接口设备(应该是这样理解,非SD卡)。
按照PC端代码对从设备的访问步骤,依次发送带不同参数的CMD52、CMD5、CMD5、CMD3、CMD7等命令完成SDIO初始化。
在PC端发送时,每个命令会收到对应的响应数据(RESPCMD、RESP1两个寄存器,这部分数据并未完全遵循SDIO手册规范,但实测功能可用)。
STM32发送时,第一个CMD5命令接收到与PC端相同的响应数据,(这个数据不符合手册规范,片内SDIO相应寄存器STA标志位如CCRCFAIL会置位);
接着发送后面的CMD5等命令时,接收到的响应寄存器数据没有更新,用示波器观察命令线波形,发现波形对应的数据实际是与PC端对应命令响应数据一致的。
是因为上一个命令响应数据不符合规范,STM32的SDIO识别为错误,所以不改变对应的响应寄存器RESP1的数据吗



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
零一三南宫南
1楼-- · 2019-07-21 09:51
描述有点混乱。。你是用stm32当做host,PC机作为slave吗?
小陀螺爱炒蛋
2楼-- · 2019-07-21 11:21
小陀螺爱炒蛋 发表于 2019-1-30 14:11
描述有点混乱。。你是用stm32当做host,PC机作为slave吗?

是这样, 我这里有一个以PC作为SDIO主机、访问一个SDIO从设备的代码工程,
现在想在STM32上实现上述代码所实现的功能。
但是呢, 实际PC给SDIO从设备发命令时, 得到的响应格式并不是完全遵循SDIO手册里的数据规范,但能实现访问从机功能。
我用STM32参考PC代码工程依次发送SDIO命令时,STM32接收到命令后,会直接通过内部寄存器校验发现命令的响应不符合手册规范,在发送后续命令时,响应寄存器里的值不会被更新。

大概是这么个情况,不知道您明白了吗。
我现在已经解决这部分问题, 不过在发送数据给从机时,数据未能发出。
xiaokun
3楼-- · 2019-07-21 12:40
响应不符合手册规范是指哪个响应,指的是CMD5的response吗?有抓到response数据是多少吗?发来看下呢
小陀螺爱炒蛋
4楼-- · 2019-07-21 13:06
小陀螺爱炒蛋 发表于 2019-1-30 16:16
响应不符合手册规范是指哪个响应,指的是CMD5的response吗?有抓到response数据是多少吗?发来看下呢

CMD52后的第二个CMD5response就不符合手册规范了。
不过现在我让初始化执行了两次, 在第二次时, 各命令的response响应在RESP1寄存器里能够读出和PC端一样的数据了。

现在问题是, 我初始化之后,要给从机发一个数据块(512字节)数据,调用CMD53命令,之后用DMA给SDIO->FIFO发数据, 数据似乎没发过去。 示波器的D0信号线一直为高电平、
xiaokun
5楼-- · 2019-07-21 18:35
 精彩回答 2  元偷偷看……
小陀螺爱炒蛋
6楼-- · 2019-07-21 21:52
小陀螺爱炒蛋 发表于 2019-1-30 17:50
1.CMD52后的第二个CMD5response就不符合手册规范了。
不过现在我让初始化执行了两次, 在第二次时, 各命 ...

1、 ①CMD52 参数0x80000c08,软件复位IO
      ②CMD5,参数0;
      ③发送CMD5,参数0x00FFFF00,设置从设备的供电电压范围;
2、这个流程是PC端发命令的流程, 基本是与SDIO手册相一致的,上述是我对这些命令及对应操作查阅手册后的功能理解。
3、 STM32 SDIO给的都是访问SD存储卡, 我这个是SDIO设备, 并不是完全遵循SDmemory 的命令协议;

一周热门 更多>