OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2941|回复: 7

stm32的SDIO接口命令响应不对

[复制链接]

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
发表于 2019-1-23 15:51:57 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 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的数据吗



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

18

主题

184

帖子

0

精华

禁止发言

积分
258
金钱
258
注册时间
2019-1-10
在线时间
10 小时
发表于 2019-1-23 15:53:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2019-1-30 14:11:18 | 显示全部楼层
描述有点混乱。。你是用stm32当做host,PC机作为slave吗?
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2019-1-30 15:51:52 | 显示全部楼层
小陀螺爱炒蛋 发表于 2019-1-30 14:11
描述有点混乱。。你是用stm32当做host,PC机作为slave吗?

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

大概是这么个情况,不知道您明白了吗。
我现在已经解决这部分问题, 不过在发送数据给从机时,数据未能发出。
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2019-1-30 16:16:27 | 显示全部楼层
响应不符合手册规范是指哪个响应,指的是CMD5的response吗?有抓到response数据是多少吗?发来看下呢
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2019-1-30 17:29:48 | 显示全部楼层
小陀螺爱炒蛋 发表于 2019-1-30 16:16
响应不符合手册规范是指哪个响应,指的是CMD5的response吗?有抓到response数据是多少吗?发来看下呢

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

现在问题是, 我初始化之后,要给从机发一个数据块(512字节)数据,调用CMD53命令,之后用DMA给SDIO->FIFO发数据, 数据似乎没发过去。 示波器的D0信号线一直为高电平、
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2019-1-30 17:50:02 | 显示全部楼层
1.CMD52后的第二个CMD5response就不符合手册规范了。
不过现在我让初始化执行了两次, 在第二次时, 各命令的response响应在RESP1寄存器里能够读出和PC端一样的数据了。

为什么要在CMD52之后再发CMD5?这样的操作方式是不符合spec的,CMD52是数据通信CMD,和SDIO的标准初始化流程没有关系,建议先将SDIO通信流程搞清楚,才好继续debug

2.现在问题是, 我初始化之后,要给从机发一个数据块(512字节)数据,调用CMD53命令,之后用DMA给SDIO->FIFO发数据, 数据似乎没发过去。 示波器的D0信号线一直为高电平、

这个要看STM32 SDIO的外设example了,和SDIO 通信协议没有关系
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2019-1-30 18:07:30 | 显示全部楼层
小陀螺爱炒蛋 发表于 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 的命令协议;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 13:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表