打印

upsd34xx,还有人在用吗?USB通讯时,数据包误重发怎么办?

[复制链接]
2284|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cly1005|  楼主 | 2009-8-15 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前几天用upsd3434+MMC卡模拟实现U盘功能,端口配置是MASS STORAGE。
但是数据由单片机上传到计算机时有数据包误重发现象。
仔细阅读该单片机的pdf文档,发现如下Important notes:
Erroneous resend of data packet
When a data packet is sent the respective IN FIFO busy bit is not automatically cleared by
the USB SIE. This can cause a data packet to be erroneously resent to the host in response
to an IN PID immediately after the first correct transmission of this data packet.
??????
多次测试发现FIFO的busy位在每个包成功发送后,多数情况会自动清零,但是有时候则不会,正是它没有清零导致了前一个包的重发。 文档的推荐用法是每次发送完后无条件的手动清零,不过好像效果不是很明显,有时还是会出现误重发的情况。最后害得我只要检测到BUSY位没有自动清零就得RESET一次,很是郁闷,速度慢了很多
请问有没有遇到类似情况的朋友?怎么解决啊?
沙发
cly1005|  楼主 | 2009-8-17 13:31 | 只看该作者
看来的确是很冷门的片子,没得人过问

使用特权

评论回复
板凳
mohanwei| | 2009-8-17 14:52 | 只看该作者
那就手动清零。

使用特权

评论回复
地板
cly1005|  楼主 | 2009-8-18 21:14 | 只看该作者
只能是如此了,还好测试了3天都没有什么问题,遇到重发时传输速度变慢了

使用特权

评论回复
5
mohanwei| | 2009-8-19 14:39 | 只看该作者
用状态迁移图把你的通信协议描述出来,可能不用问就豁然开朗了……
这个图绝对不能有“死胡同”,也不能有局部死循环。

使用特权

评论回复
6
mohanwei| | 2009-8-19 14:43 | 只看该作者
举个例子:起床->去拉屎->拉出屎->刷牙->吃早饭->上班……下班->刷压->睡觉,起床…… 这是一个不完美的状态迁移图。为什么呢?如果有一天,一直没拉出屎,岂不是要在厕所一直呆下去?
所以要在拉屎时加入一个时间判断条件……
通信过程往往很复杂,需要考虑到方方面面的影响因素。

使用特权

评论回复
7
cly1005|  楼主 | 2009-8-19 20:32 | 只看该作者
多谢mohanwei大侠。我估计有几方面的原因,一是本身此单片机存在bug;二是单片机处理速度相对计算机慢,没有能够及时清除busy位;至于状态迁移,的确可能还有考虑不周的地方,明天继续检查。

使用特权

评论回复
8
xwj| | 2009-8-19 20:35 | 只看该作者
;P

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

68

帖子

0

粉丝