本帖最后由 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的数据吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是这样, 我这里有一个以PC作为SDIO主机、访问一个SDIO从设备的代码工程,
现在想在STM32上实现上述代码所实现的功能。
但是呢, 实际PC给SDIO从设备发命令时, 得到的响应格式并不是完全遵循SDIO手册里的数据规范,但能实现访问从机功能。
我用STM32参考PC代码工程依次发送SDIO命令时,STM32接收到命令后,会直接通过内部寄存器校验发现命令的响应不符合手册规范,在发送后续命令时,响应寄存器里的值不会被更新。
大概是这么个情况,不知道您明白了吗。
我现在已经解决这部分问题, 不过在发送数据给从机时,数据未能发出。
CMD52后的第二个CMD5response就不符合手册规范了。
不过现在我让初始化执行了两次, 在第二次时, 各命令的response响应在RESP1寄存器里能够读出和PC端一样的数据了。
现在问题是, 我初始化之后,要给从机发一个数据块(512字节)数据,调用CMD53命令,之后用DMA给SDIO->FIFO发数据, 数据似乎没发过去。 示波器的D0信号线一直为高电平、
1、 ①CMD52 参数0x80000c08,软件复位IO
②CMD5,参数0;
③发送CMD5,参数0x00FFFF00,设置从设备的供电电压范围;
2、这个流程是PC端发命令的流程, 基本是与SDIO手册相一致的,上述是我对这些命令及对应操作查阅手册后的功能理解。
3、 STM32 SDIO给的都是访问SD存储卡, 我这个是SDIO设备, 并不是完全遵循SDmemory 的命令协议;
一周热门 更多>