打印

usb lib2.1是个不完整的库

[复制链接]
2283|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myxiaonia|  楼主 | 2013-8-21 09:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我经过个把月的研究分析,发现这个主机库就是个演示版本,离作为产品用还差的很远

沙发
myxiaonia|  楼主 | 2013-8-21 09:41 | 只看该作者
这个库兼顾的东西很多,给人完整的感觉
但是做的实在是太粗心,各种各样的漏洞,有些是主机库作者打算让你主机来补上,有些么直接就是考虑不周
以下是一个很明显的漏洞
在枚举阶段,只要枚举不成功就会一直持续,根本就不会错误退出,如果是产品上就是死机了,很严重的bug啊

还有就是  状态机是一层套一层,看的人是死的心都有了

使用特权

评论回复
板凳
IJK| | 2013-8-21 10:14 | 只看该作者
个人的理解,ST的任何USB lib、standard lib,都只是演示版本或者例子,都不是拿来就能用于产品的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
myxiaonia + 2 很给力!
地板
myxiaonia|  楼主 | 2013-8-21 11:07 | 只看该作者
又有一个问题,bulk out通道发送CBW时如果收到nak,上层程序会收到urb_not_ready错误,结果就直接重启完整的CBW阶段,我估计设备直接认为cbw不合法
正常情况的话应该是重发当前包,连pid都不能改

使用特权

评论回复
5
myxiaonia|  楼主 | 2013-8-21 11:15 | 只看该作者
usb的状态机也没弄明白   usb out事务如果出现错误后,请求队列是否还有效,数据FIFO是否还保留错误时的FIFO数据呢,错误后本次请求应该还挂在那里,怎么重启,难度只能禁止通道了吗???
如果遇上nak,或者pid翻转错误,按照协议可以进行usb硬件级别的重试,可以不通知上层程序,stm32的usb如何做到

为什么不把usb状态迁移图搞出来呢,现在搞的云里雾里,出错了只能按照协议重启一次完整的传输

使用特权

评论回复
6
myxiaonia|  楼主 | 2013-8-21 11:18 | 只看该作者
IJK 发表于 2013-8-21 10:14
个人的理解,ST的任何USB lib、standard lib,都只是演示版本或者例子,都不是拿来就能用于产品的。 ...

我也有这样的看法,因此也不敢直接用上去
之前u盘是用ch376做的,它的库是直接用的,看上去都比stm32的usb库完整

使用特权

评论回复
7
myxiaonia|  楼主 | 2013-8-21 12:48 | 只看该作者
cbw阶段在bulkout通道一个数据包就可以完成,因为是最大64字节而cbw只有31字节,这样就可以在nak时重发。。。。这也太      凑巧了,而且也没注释,无奈了

使用特权

评论回复
8
mmuuss586| | 2013-8-21 13:06 | 只看该作者
本来软件方面做的就不是很好。

使用特权

评论回复
9
lxyppc| | 2013-8-21 15:54 | 只看该作者
ST的库都是  GUIDANCE ONLY 的
这个在他的每个库文件中都有说明

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
myxiaonia + 2 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:只灌水,不技术

18

主题

499

帖子

5

粉丝