搜索
bottom↓
回复: 20

请教一个stm usb 控制传输的问题

[复制链接]

出0入0汤圆

发表于 2017-7-19 10:20:39 | 显示全部楼层 |阅读模式
usb收到GetReport后,我在准备数据,然后返回了一个USB_NOT_READY。
怎么样可以当我数据准备好的时候,直接把数据发送,不需要再等待下一个GetReport呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-7-19 13:43:48 | 显示全部楼层
好像没有办法吧,USB中永远是Host来发起

出0入0汤圆

发表于 2017-7-19 14:06:22 来自手机 | 显示全部楼层
主从通信  点到你你才能说话

出0入0汤圆

发表于 2017-7-19 14:08:00 来自手机 | 显示全部楼层
不是你发 是你可以预先把数据准备好 点到了硬件自然会给你发

出0入0汤圆

 楼主| 发表于 2017-7-25 08:32:44 | 显示全部楼层
huangqi412 发表于 2017-7-19 14:08
不是你发 是你可以预先把数据准备好 点到了硬件自然会给你发

不好意思,一直没空看,回复。

那如果是这样的话。
这个抓包可能是用哪种传输方式实现的呢?

这个是公司一个比较久的usb密码键盘,没有留下什么资料。
现在想要升级成stm32芯片,但是上位机驱动要用原来的。
他发送命令之后会等待获取密码,这边他倒是当密码输入完毕之后,数据就可以直接获取,不需要等待下一个getreport。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-7-25 09:15:59 | 显示全部楼层
sujieww 发表于 2017-7-25 08:32
不好意思,一直没空看,回复。

那如果是这样的话。

。。。键盘通信快一点慢一点有差别么。 假设10MS中断传输, 差一个节拍也就10MS

出0入0汤圆

发表于 2017-7-25 09:21:04 | 显示全部楼层
sujieww 发表于 2017-7-25 08:32
不好意思,一直没空看,回复。

那如果是这样的话。

好久没搞过USB了,细节记不清。

出0入0汤圆

发表于 2017-7-26 00:16:07 | 显示全部楼层
這是控制傳輸,不是中斷傳輸,隨時可傳,只受hid封包數限制吧,如果是全速,傳輸速度可以到64KB/S.

出0入0汤圆

发表于 2017-7-26 00:20:51 | 显示全部楼层
至於IN封包回送電腦端,以協議來說,足足可卡2,3秒沒問題,實際我也試過(也是剛好程式有BUG才發現可以卡這麼久,哈哈),你的運算應該不會需要這麼久吧?

出0入0汤圆

 楼主| 发表于 2017-7-26 08:54:44 | 显示全部楼层
hyper320 发表于 2017-7-26 00:20
至於IN封包回送電腦端,以協議來說,足足可卡2,3秒沒問題,實際我也試過(也是剛好程式有BUG才發現可以卡這麼久 ...

需要等待键盘的返回,不是需要准备那么的数据。
那怎么样可以卡2,3秒呢?
我试的都是不回NAK的话,就直接失败了。。

出0入0汤圆

发表于 2017-7-26 12:35:50 | 显示全部楼层
當然要回NAK阿,之後PC端會一直要求數據阿,如果一直回NAK太久都沒返回數據,電腦端就會出現錯誤,這段時間有好幾秒吧

出0入0汤圆

 楼主| 发表于 2017-7-27 09:29:08 | 显示全部楼层
hyper320 发表于 2017-7-26 12:35
當然要回NAK阿,之後PC端會一直要求數據阿,如果一直回NAK太久都沒返回數據,電腦端就會出現錯誤,這段時間有好 ...

那我应该怎么样在回NAK后,再把数据返回给PC?
现在是我回了NAK后,PC端就不理我,然后我只能在他5s后给下一个GETREPORT的时候,我才能返回数据了。
或者是我传递数据的方式有问题?
刚接触这块,还是不太了解。

出0入0汤圆

发表于 2017-8-3 00:45:46 | 显示全部楼层
usb是一個標準的協議,不可能發生這樣的事,肯定是程式有問題,看過usb協議分析儀的資料嗎?

出0入0汤圆

发表于 2017-8-3 00:51:27 | 显示全部楼层
nak意思就是device暫時沒空,是一個很重要的同步機制,不可能你回了之後電腦就不理妳,最好還是用協議分析儀看下你和pc溝通的過程是哪裡出問題!!

出0入0汤圆

发表于 2017-8-3 00:55:45 | 显示全部楼层
電腦端的協議分析軟體看不到細部的東西,最好是硬體的usb協議分析儀來查,很容易就看出是哪裡出問題了!!

出0入0汤圆

发表于 2017-8-3 06:49:10 | 显示全部楼层
hyper320 发表于 2017-8-3 00:55
電腦端的協議分析軟體看不到細部的東西,最好是硬體的usb協議分析儀來查,很容易就看出是哪裡出問題了!! ...

硬件的好贵,beagle USB 12只能分析全速的,都要3000RM啊。。。

群里好像有人研究开源的USB协议分析仪,期待啊

出0入0汤圆

发表于 2017-8-3 14:31:32 | 显示全部楼层
全速的便宜,可以接個全速的hub降速來觀察

出0入0汤圆

 楼主| 发表于 2017-8-4 10:05:53 | 显示全部楼层
hyper320 发表于 2017-8-3 00:51
nak意思就是device暫時沒空,是一個很重要的同步機制,不可能你回了之後電腦就不理妳,最好還是用協議分析儀看 ...

应该是我说的不对。
是回NAK后,电脑就只会在5s后再一次发送getreport了。
我现在的程序,只能在获得getreport后才能返回数据。
那我如何在回NAK后,准备好数据了,直接发送数据给电脑,而不想等到电脑给我下一个getreport?

出0入0汤圆

发表于 2017-8-7 01:56:37 | 显示全部楼层
sujieww 发表于 2017-8-4 10:05
应该是我说的不对。
是回NAK后,电脑就只会在5s后再一次发送getreport了。
我现在的程序,只能在获得getr ...

usb協議是底層的系統在執行的,你說的情況不可能會發生,除非usb底層出問題,因為這是屬於usb協議的部份,如果你發"NAK"是在GET_REPORT的 "IN"封包回應的,依照USB協議,驅動會找機會再發"IN"封包,但不太可能5秒後才重發,所以要你找個協議分析儀來妳的程序哪裡出問題,有可能電腦已經發出N的封包只是你看不到,電腦端的協議軟體也看不到的,一般來說,電腦出問題的機率不大,99.99%是你的裝置程序出問題!

出0入0汤圆

发表于 2017-8-7 02:12:23 | 显示全部楼层
還有一個重要觀念,USB是主從協議,你的裝置屬於從端,主端主動與從端連絡,從端才能收發數據,而USB協議早就考慮到主從兩邊效率快慢的問題,所以才有"NAK"封包,"NAK"就是來處理裝置端暫時沒有準備好數據,例如,FLASH燒錄,當FLASH在清除時需要時間,而電腦端並不知道你要處理多久,而裝置端等待FLASH清除時也無法收取電腦端的數據,這時就可回應"NAK",電腦端會等待一段時間再發送封包傳送數據,而裝置端的作法就是在FLASH清除完成前,設置USB寄存器相關端點回應NAK,這是硬體自動處理的,軟體並不需要干預,等FLASH清除完成可以接收數據時,裝置再把相關的端點可接收標誌位設定,等電腦傳來數據,裝置的硬件會自動接收並設定已接收標誌位來通知軟件接收!

出0入0汤圆

 楼主| 发表于 2017-8-7 08:18:44 | 显示全部楼层
hyper320 发表于 2017-8-7 01:56
usb協議是底層的系統在執行的,你說的情況不可能會發生,除非usb底層出問題,因為這是屬於usb協議的部份,如 ...

好的。
谢谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 00:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表