6792|10

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教usb发送完成检测 [复制链接]

用st的usb库,但不知道如何检测发送完成?现在我用
while(GetEPTxStatus(ENDP1) != EP_TX_NAK);
但有些情况这个判断不行,现在只能在发送后加延时来解决。特向大家请教如何直接来判断?
此帖出自stm32/stm8论坛

最新回复

                                 重新看了一下所有的帖子,发现这里是关键:试验板直接插pc usb口可以,通过usb hub就不行,楼主能否再确认一下,直接插PC USB口没有问题。 如果果然如此,是否你的HUB有问题,可不可以换一个HUB试试看? 另外,“独立出来后在进行App->ISP切换,USB要重新进行初始化,就是我上面说得 重启usb”,这个重启USB是怎么做的?  详情 回复 发表于 2010-1-10 10:20
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有些情况这个判断不行? 什么情况?
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
case ORDER_UPDATE:
                                        {
                                                if((ReBufBak[2] == DEVICE_ID) || (ReBufBak[2] == 0xff))
                                                {
                                                        WriteCom(ACK);                                                               
                                                        while(GetEPTxStatus(ENDP1) != EP_TX_NAK);//等待usb发送完
//                                                        Beep(2);
                                                          //跳转到 bootloader
                                                        GotoISP();
                                                        while(1);
                                                }
                                                else
                                                {       
                                                        WriteCom(NAK);
                                                        Beep(3);
                                                }
                                        }
                                        break;

以上是发ACK后,mcu进入USB ISP升级状态,会重启USB. 我的j-link和试验板插电脑不同的usb口没问题,但两个usb同时插到一个usb hub(1转4)就不行了,上程序加上Beep(2),又可以。我现在跟踪pc端的接收程序...
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 更正一下,是试验板直接插pc usb口可以,通过usb hub就不行,跟j-link无关
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 用 Bus Hound 看,不行时,ACK确实没有发出
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 我现在认为:while(GetEPTxStatus(ENDP1) != EP_TX_NAK);是表示发送完成,但是数据只是发到了usb-hub中,因为我的后续是进入usbisp,要重启usb, usb-hub还没来得及吧数据发到pc,usb-hub就被重启信号中断了,pc就没收到数据。请版主指点。如果是这个原因,看来也只能加延时来解决了
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
USB HUB只是一个转发器,没有存储的功能。HUB上的延迟只有几个ns,这么短的时间可以忽略不计。

还是从你的软件上找原因吧。
此帖出自stm32/stm8论坛
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 我用的是hid协议,包传输间隔设置为1ms,我对usb-hid深层的控制机理不了解,但我想是不是这个间隔时间是不能忽略的。而且加上延时后确实 解决了问题
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 请介绍一下你的通信协议和控制流程,你给出的信息非常少,无法判断问题在哪里。
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 我的程序  ISP + App 两部分,首地址分别为0x0800000,0x08003000,先判断是否有ISP请求(如某个IO口为低),无就进入App. 这部分参考ST的DFU例程, 在ISP和App中分别实现USB-HID协议,这部分参考st的coustmer-hid例程,实现64byte, endpoint1 IN/OUT传输。然后在次基础上建立自己的硬件通讯协议(在ISP中)和通讯控制协议(在App中)。在上位机上做了对应的硬件升级软件,当发出升级命令时,下位机App中会相应此命令,就是我3楼贴出的程序片段,下位机由App转入ISP中运行,开始硬件更新。选用hid主要看中了无需驱动比较方便,isp都是自己的一套,便于加密。 ISP和App都有自己独立的HID程序部分,当初也想过共用ISP中的就可以了,可以省空间,但可能对以后App程序扩展性造成不利影响,独立出来后在进行App->ISP切换,USB要重新进行初始化,就是我上面说得 重启usb.
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
重新看了一下所有的帖子,发现这里是关键:试验板直接插pc usb口可以,通过usb hub就不行,楼主能否再确认一下,直接插PC USB口没有问题

如果果然如此,是否你的HUB有问题,可不可以换一个HUB试试看?

另外,“独立出来后在进行App->ISP切换,USB要重新进行初始化,就是我上面说得 重启usb”,这个重启USB是怎么做的?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表