AronChu
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录2002-01-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:9197回复:26

谁能说一说 USB 枚举的过程?枚举时Firmware的流程是怎么样的?

楼主#
更多 发布于:2001-10-22 09:47
调试Firmware时,枚举总是不成功。
谁能提供枚举时Firmware的完整流程(详细一点),送200分。
谢谢谢谢...
Best Regards/Aron Chu
[AronChu 编辑于 2001-10-22 17:08]

最新喜欢:

wangminwangmi...
Best Regards/Aron Chu 拉拉拉,拉拉拉,我是个失业的流浪汉!
dahello
驱动中牛
驱动中牛
  • 注册日期2001-06-16
  • 最后登录2004-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-22 19:29
老兄你先给分,然后我告诉你全部。嘿嘿嘿我是不是很黑,
不过我说话算话,不想某些人说了不算:)
不懂就问 :D
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-22 21:02
NAME RENUM

rseg EZUSB
EZUSB_RENUM: mov dptr,#USBCS
mov a,#000001010b ; set DISCON and RENUM
movx @dptr,a ; do it
;
; Hold disconnect low for 12 milliseconds (12000 microseconds).
; 10 cycles * 166.6 ns per cycle is 1.66 microseconds per loop.
; 12000 microseconds / 1.66 = 7229.  [assumes 24 MHz clock]
;
mov a, #0 ; Clear dps so that we're using dph and dpl!
mov dps, a ;
mov dptr,#(0ffffH - 6024) ; long pulse for operating
mov r4,#5

time12msec:     inc     dptr            ; 3 cycles
mov     a,dpl           ; 2 cycles
                orl     a,dph           ; 2 cycles
                jnz     time12msec      ; 3 cycles
  djnz r4,time12msec
;
mov dptr,#USBCS
mov a,#00000010b ; discon LO, renum HI
movx @dptr,a
ret
end

应该值200分吧,不过分用来干什么呢?我不知道,你告诉我,我还你100分。

[sunkai 编辑于 2001-10-22 21:05]
AronChu
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录2002-01-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-23 09:10
To sunkai 仁兄,
您的代码应该是很好的,只是我看不懂。
我用的是Motorola的MCU, 没用过EZ-USB.您可能高估了我的能力。
至于分的作用嘛,呵呵....
谢谢您的帮忙。
Best Regards
Aron Chu

To dahello,
我已给了您100分,您跟帖我再给100分。
不过说话要算数,最好给流程。
Best Regards
Aron Chu
Best Regards/Aron Chu 拉拉拉,拉拉拉,我是个失业的流浪汉!
hongbo
驱动牛犊
驱动牛犊
  • 注册日期2001-06-27
  • 最后登录2009-02-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-23 09:33
[QUOTE]原本由 AronChu 发表
[B]To sunkai 仁兄,
您的代码应该是很好的,只是我看不懂。
我用的是Motorola的MCU, 没用过EZ-USB.您可能高估了我的能力。
至于分的作用嘛,呵呵....
谢谢您的帮忙。
Best Regards
Aron Chu

To dahello,
我已给了您100分,您跟帖我再给100分。
不过说话要算数,最好给流程。
Best Regards
Aron Chu [/B][/QUOTE]

你的话有些让人心凉!自己的代码可不是可以随便给别人的。
前进是我的唯一追求!
AronChu
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录2002-01-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-23 09:57
To Hongbo,
您可能误解了我的意思。
我是USB新手,我真的懊恼我看不懂。
Best Regards/Aron Chu 拉拉拉,拉拉拉,我是个失业的流浪汉!
飞天猩猩
驱动巨牛
驱动巨牛
  • 注册日期2001-09-24
  • 最后登录2008-06-17
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-23 12:47
[QUOTE]原本由 sunkai 发表
[B]NAME RENUM

rseg EZUSB
EZUSB_RENUM: mov dptr,#USBCS
mov a,#000001010b ; set DISCON and RENUM
movx @dptr,a ; do it
;
; Hold disconnect low for 12 milliseconds (12000 microseconds).
; 10 cycles * 166.6 ns per cycle is 1.66 microseconds per loop.
; 12000 microseconds / 1.66 = 7229.  [assumes 24 MHz clock]
;
mov a, #0 ; Clear dps so that we're using dph and dpl!
mov dps, a ;
mov dptr,#(0ffffH - 6024) ; long pulse for operating
mov r4,#5

time12msec:     inc     dptr            ; 3 cycles
mov     a,dpl           ; 2 cycles
                orl     a,dph           ; 2 cycles
                jnz     time12msec      ; 3 cycles
  djnz r4,time12msec
;
mov dptr,#USBCS
mov a,#00000010b ; discon LO, renum HI
movx @dptr,a
ret
end

应该值200分吧,不过分用来干什么呢?我不知道,你告诉我,我还你100分。

[sunkai 编辑于 2001-10-22 21:05] [/B][/QUOTE]
好象在段和枚举关系不大,到象似初始化。
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-23 12:59
[QUOTE]原本由 陌路情人 发表
[好象在段和枚举关系不大,到象似初始化。 [/B][/QUOTE]
是啊,我是猪鼻子上插大葱----楞装象,应该怎样回答这个问题,原来银子真是不好赚!
AronChu
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录2002-01-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-23 14:21
To sunkai,
您就不要谦虚啦,您都作过完整的产品,哪会不明白呢。
我的意思是当插入USB Device时,
1. host 会发什么信号,Firmware(如是HID最好) 作什么响应。
2. 枚举什么时候算完,可以进行正常通信。
这问题比较麻烦请不吝赐教。
谢谢!
Best Regards
Aron Chu

Best Regards/Aron Chu 拉拉拉,拉拉拉,我是个失业的流浪汉!
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-10-23 15:00
[QUOTE]原本由 AronChu 发表
[B]To sunkai,
您就不要谦虚啦,您都作过完整的产品,哪会不明白呢。
我的意思是当插入USB Device时,
1. host 会发什么信号,Firmware(如是HID最好) 作什么响应。
2. 枚举什么时候算完,可以进行正常通信。
这问题比较麻烦请不吝赐教。
谢谢!
Best Regards
Aron Chu

 [/B][/QUOTE]
不是谦虚,说起来我倒真的不懂了,用的片子比较简单(EZUSB),它也不需要我关心这些。好象有好几个帖子讲这个的。
usb11
驱动小牛
驱动小牛
  • 注册日期2001-09-17
  • 最后登录2009-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-10-23 15:04
请参考nigx对PDIUSBD12的描述:
PDIUSBD12芯片全速模式下的枚举调试过程:
1) 单片机上电后立即初始化所有的接口、存储区、定时器和中断服务程序指针,按USB协议要求把PDIUSBD12芯片中的Soft_Connect位寄存器置为“1”,把D+线变为高电平,此时D-为低电平,信号为差分1。设备插入USB集线器后,集线器的状态寄存器发生变化,主机软件查询到变化后,发送一系列请求使能集线器的端口中。
2) 如果PDIUSBD12配置为总线供电方式,则外设一连接到集线器上,端口使能后便被提供100mA 总线电流,外设处于上电状态,芯片所有的寄存器清零并指向默认地址。如果用自供电方式,芯片的EOT_N管脚通过一个上拉电阻接到USB的V_BUS上。
3) 单片机第一次接收到主机的GetDescriptor请求中断响应,主机要求外设发送设备描述符,确定外设缺省管道控制端点的每次数据包大小。单片机程序中通过控制端点回送设备描述符,这次只需要保证设备描述符中前8个字节发送正确。
4) 主机发送SetAddree请求到外设,给USB外设分配唯一的地址。单片机把PDIUSBD12芯片的SetAddressEnable寄存器置为1。这时外设被分配唯一地址,此时设备才是真正的外设,只有这以后的USB设备才能进行数据传送。
5) 外设再一次接收到GetDescriptor请求。单片机再一次向主机传送设备描述符,主机分析描述符的信息。操作系统此时才有足够信息来寻找设备的驱动程序。
6) 操作系统会继续发出GetConfiguration请求,读取设备的配置信息。单片机程序中要把PDIUSBD12芯片的各个端点的配置情形回送到主机中。如果有多个配置信息,有多次请求发生。
7) 在设备能通讯前,主机给PDIUSBD12 一个SetConfiguration请求,主机根据整个系统的USB使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关信息,使设备能被客户软件利用。

助人乃快乐之本! 共同进步是我的本意!
AronChu
驱动牛犊
驱动牛犊
  • 注册日期2001-08-01
  • 最后登录2002-01-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-10-25 08:39
谢谢usb11!
哪位熟悉HID的大侠可给我看一看这个Report Descriptor?
Regards/AronChu
Best Regards/Aron Chu 拉拉拉,拉拉拉,我是个失业的流浪汉!
dahello
驱动中牛
驱动中牛
  • 注册日期2001-06-16
  • 最后登录2004-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-10-25 21:17
老兄谢谢你给分先 ,这两天没来,今天以来发现多了100分,还纳闷呢?谢谢你
主机枚举过程setup包如下:
1。80 06 00 01 00 00 12 00得到设备描述字
2。00 05 ** ** 00 00 00 00给设备分配地址
3。80 06 02 00 00 00 2E 00读配置描述子
4。00 09 01 00 00 00 00 00激活设备的一个配置
大体的过程就是这样不同的芯片可能会又不同
比如主机得到设备描述字的前8个字节可能就给设备分配地址了
不过你在固件中都做好了肯定能通过祝你好运!谢谢!
多交流!
不懂就问 :D
madiwy
驱动牛犊
驱动牛犊
  • 注册日期2001-10-25
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2001-10-26 19:32
我看到的是这样的:
1. 80 06 00 01 00 00 40 00 读设备描述字
   实际返回0x12个;
2. RESET
3. 00 05 ** ** 00 00 00 00 分配设备地址
   ACK
4. 80 06 02 00 00 00 09 00 读配置描述字的头
   返回9个
5. 80 06 02 00 00 00 ff 00 读全部配置描述字
   返回无数……
......
以后的动作由设备驱动程序接管.
我想这是总线驱动程序决定的,不同厂家略有不同吧。

usb11
驱动小牛
驱动小牛
  • 注册日期2001-09-17
  • 最后登录2009-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2001-10-26 20:28
应该是总线驱动程序根据外设决定的吧!
助人乃快乐之本! 共同进步是我的本意!
lvgx
驱动牛犊
驱动牛犊
  • 注册日期2001-05-27
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2001-10-30 20:06
   我现在正在找这有关枚举的文章,我用的也是EZ-USB,
现在大概两个方面要用到枚举流程来解决,一个是写inf,
总是有点问题,一时装上,一时又必须先做删除,才能装上。
 还有一个问题是firmware中的,关于断开的语句,看来还是
得通过理解这枚举流程,才能彻底弄清楚。
  以前好像有篇英文写的枚举流程,不知现在是否能找到。
lvgx
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2001-10-31 09:34
usb 1.1 specification
singwoo
abelli
驱动牛犊
驱动牛犊
  • 注册日期2001-10-07
  • 最后登录2001-12-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2001-10-31 18:28
没问题,枚举和设备的初始化是两个概念。但是那位老弟的问题是:在枚举的过程中firmware(我想是USB设备的firmwae吧^_^)的工作流程,你说除了设备的初始化还有什么? :P
我不聪明,因为...... 智慧比聪明更重要。
cikus
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2002-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2001-11-07 11:27
我用的是823的USB控制器,连上主机后的情况是这样:
RESET
收到8006 0001 0000 4000
发送描述符
结果还有
RESET中断,反复三次?
是不是因为主机没有收到描述符?
usb11
驱动小牛
驱动小牛
  • 注册日期2001-09-17
  • 最后登录2009-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2001-11-07 12:10
是的,你的主机没有收到。
助人乃快乐之本! 共同进步是我的本意!
上一页
游客

返回顶部