首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32 sdio MultiBlockRead问题

stm32 sdio MultiBlockRead问题

正在用stm32做一个SDIO的TF卡读卡器,初始化和读写都没有问题,只是发现一个驱动时序问题,不知道用stm32是否可以解决。

应用前提:
1. 目前的读卡器驱动时序,USB部分是全状态机实现(因为实现了2个CDC,一个多LUN的MSC和一个HID,需要同时操作),所以要求SD卡得驱动也都是非阻塞操作。
2. USB的MSC驱动,使用了2个512字节的缓冲(只能使用这么多),实现tick-tock操作。
比如:主机发送读取16个512字节block操作(总共8K数据),设备发现需要执行读取操作(必须使用MultiBlockRead),并且2个缓冲至少有一个为空,则读取512字节(非阻塞读取)。

问题是,读取第一个和第二个512字节的block没有问题,因为缓冲可用,但是,如果USB速度太慢,导致没有缓冲用的时候,就会有问题。因为SDIO模块读取开启后,无法停止,所以SDIO一直在接收数据,由于缓冲不可用,最后的结果就是SDIO的fifo溢出,数据丢失。写入部分也有类似问题,会使得FIFO空。

是否可以设置SDIO-> POWER来让SDIO停止输出时钟,等到缓冲可用的时候,再继续输出?
并且,从FIFO读取,到停止SDIO时钟之间接收到的数据,仍旧保留在SDIO的FIFO中。
也就是说,对SDIO-> Power的操作来控制SDIO输出时钟,是否可以保持SDIO总线的完整性?

或者,用MultiBlockRead和MultiBlockWrite实现SD读卡器(主机会发送一些读写大块数据,超过实际可用的内存),有什么建议?

突然发现有HW Flow Control,用这个应该可以搞定了吧。
返回列表