阅读:1784回复:6
d12 bulk transmits缺少最后一个包的问题
Dear All:
我在bulk的传输中还碰到一些问题,希望得到你的帮助。 host程序: driver是microsoft98ddk提供的bulkusb,程序除了增加了对几个用户setup包的处理以外,几乎不变,windows默认的设置4096bytes,及usb client driver一次请求最大4096bytes数据量也不变。 应用程序也是microsoft98ddk提供的rwbulk,程序除了增加利用deviceiocontrol()发送用户控制命令以外,也几乎不变。 device程序: 沿用philips的例程,当接受到一个out包时产生中断,在中断程序中读数据,并把endpoint中的值清空。 我们的操作过程是这样的: bulkout模式: 1、先通过control通道,发送setup包,通知device做接收包的初始准备工作 2、利用microsoft提供的应用程序rwbulk,通过bulkout通道发包给device 出现问题: 用仿真器跟踪发现 如果bulkout发送小于64byte,device端的中断可以进入1次,device可以正常接受数据。 如果bulkout发送大于64byte,小于128byte,device断的中断还是只进入了一次,故device端只接收到前64byte。 如果bulkout发送大于128byte,小于192byte,中断可以进两次,故device端只接收到前128byte数据 如果bulkout发送大于192byte,小于256byte,中断可以进三次,故device端只接收到192byte数据 总之进中断次数要少一次,既最后的一个bulk包未收到。 在D12中提到的double buffer是否会对传输有影响?但这是“transparent”对用户的呀。 另一个问题是我用什么方法去测bulk的速度是较好的。 best regards tony.fu |
|
最新喜欢:crazyq...
|
沙发#
发布于:2001-11-07 12:46
我没有碰上过,不知道有没有人遇到过这样的问题?
|
|
|
板凳#
发布于:2001-11-08 10:52
我碰到过,但后来不知道程序哪里给改了,就再也没有发现过。
|
|
|
地板#
发布于:2001-11-08 13:04
我用示波器看了一下D12的INT0脚,我发了一个130bytes的数据,INT0上的确有三个下降沿。但ENDPONINT2的out中断却只进了二次。我认为是中断设置有错,但到目前还没找到。
rayyang大哥你一定要帮我。 |
|
|
地下室#
发布于:2001-11-08 13:38
记得上次在电话里就提醒过你,没想到到现在你才碰到. :)
你看看zboard的代码罢!如果发现是什么原因,也告诉我.有个老外告诉我是double buffering的原因造成的. |
|
|
5楼#
发布于:2001-11-08 13:46
我一开始用windriver发送,在pc上显示正确,我就没深究。
上次在电话里说的,那时我对bulk的方式还不太了解,听了也不太了解你在说什么,呵呵。 我现在在查问题,找到一定贴出来。 |
|
|
6楼#
发布于:2003-08-21 15:40
没想到两年过去了,我也遇到同样的问题,真是一模一样!确实是双缓冲区造成的,后来有位高人告诉我,在接收中断里面用while循环读数据,就在也没有出现这样的问题了
|
|