阅读:9194回复:26
谁能说一说 USB 枚举的过程?枚举时Firmware的流程是怎么样的?
调试Firmware时,枚举总是不成功。
谁能提供枚举时Firmware的完整流程(详细一点),送200分。 谢谢谢谢... Best Regards/Aron Chu [AronChu 编辑于 2001-10-22 17:08] |
|
最新喜欢:![]()
|
沙发#
发布于:2001-10-22 19:29
老兄你先给分,然后我告诉你全部。嘿嘿嘿我是不是很黑,
不过我说话算话,不想某些人说了不算:) |
|
|
板凳#
发布于: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] |
|
地板#
发布于:2001-10-23 09:10
To sunkai 仁兄,
您的代码应该是很好的,只是我看不懂。 我用的是Motorola的MCU, 没用过EZ-USB.您可能高估了我的能力。 至于分的作用嘛,呵呵.... 谢谢您的帮忙。 Best Regards Aron Chu To dahello, 我已给了您100分,您跟帖我再给100分。 不过说话要算数,最好给流程。 Best Regards Aron Chu |
|
|
地下室#
发布于: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] 你的话有些让人心凉!自己的代码可不是可以随便给别人的。 |
|
|
5楼#
发布于:2001-10-23 09:57
To Hongbo,
您可能误解了我的意思。 我是USB新手,我真的懊恼我看不懂。 |
|
|
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] 好象在段和枚举关系不大,到象似初始化。 |
|
7楼#
发布于:2001-10-23 12:59
[QUOTE]原本由 陌路情人 发表
[好象在段和枚举关系不大,到象似初始化。 [/B][/QUOTE] 是啊,我是猪鼻子上插大葱----楞装象,应该怎样回答这个问题,原来银子真是不好赚! |
|
8楼#
发布于:2001-10-23 14:21
To sunkai,
您就不要谦虚啦,您都作过完整的产品,哪会不明白呢。 我的意思是当插入USB Device时, 1. host 会发什么信号,Firmware(如是HID最好) 作什么响应。 2. 枚举什么时候算完,可以进行正常通信。 这问题比较麻烦请不吝赐教。 谢谢! Best Regards Aron Chu |
|
|
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),它也不需要我关心这些。好象有好几个帖子讲这个的。 |
|
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使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关信息,使设备能被客户软件利用。 |
|
|
11楼#
发布于:2001-10-25 08:39
谢谢usb11!
哪位熟悉HID的大侠可给我看一看这个Report Descriptor? Regards/AronChu |
|
|
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个字节可能就给设备分配地址了 不过你在固件中都做好了肯定能通过祝你好运!谢谢! 多交流! |
|
|
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 读全部配置描述字 返回无数…… ...... 以后的动作由设备驱动程序接管. 我想这是总线驱动程序决定的,不同厂家略有不同吧。 |
|
14楼#
发布于:2001-10-26 20:28
应该是总线驱动程序根据外设决定的吧!
|
|
|
15楼#
发布于:2001-10-30 20:06
我现在正在找这有关枚举的文章,我用的也是EZ-USB,
现在大概两个方面要用到枚举流程来解决,一个是写inf, 总是有点问题,一时装上,一时又必须先做删除,才能装上。 还有一个问题是firmware中的,关于断开的语句,看来还是 得通过理解这枚举流程,才能彻底弄清楚。 以前好像有篇英文写的枚举流程,不知现在是否能找到。 |
|
|
16楼#
发布于:2001-10-31 09:34
usb 1.1 specification
|
|
|
17楼#
发布于:2001-10-31 18:28
没问题,枚举和设备的初始化是两个概念。但是那位老弟的问题是:在枚举的过程中firmware(我想是USB设备的firmwae吧^_^)的工作流程,你说除了设备的初始化还有什么? :P
|
|
|
18楼#
发布于:2001-11-07 11:27
我用的是823的USB控制器,连上主机后的情况是这样:
RESET 收到8006 0001 0000 4000 发送描述符 结果还有 RESET中断,反复三次? 是不是因为主机没有收到描述符? |
|
19楼#
发布于:2001-11-07 12:10
是的,你的主机没有收到。
|
|
|
上一页
下一页