flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-01-10 11:32
小声问:设备每一次插到USB接口时,都要经过枚举和重枚举两个步骤吗?
以前总觉得第一次插到USB接口时,出现的“发现USB设备”等提示就是枚举,以后,该设备再插上,就是重枚举,也没有什么提示信息了。现在发现好像错了 :o


ren兄讲的不错,你好好看看。没那么难理解吧! :D
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-01-10 13:00
现在我对枚举和重枚举的概念:

枚举  

1.主机通过地址0获得设备描述符,然后分配新地址给设备,再从新地址向设备提出获得设备描述符的请求,设备响应之;

2.然后根据PID/VID查找固件,下载到设备上

3.固件运行,设备重置取消

现在,开始重枚举  
1.主机再次查询设备描述符,配置描述符等等

2.提示用户选择合适的设备驱动

这样,主机和设备间就可以进行数据传输了.

大家看看这些步骤有没有错误?

如果我不想自己编写下载器驱动程序,直接把固件用串口烧到设备上行不行?


[b][color=green]我庄严宣誓我没干好事[/color] [/b]
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-01-10 13:04
可以烧到设备上。
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2004-01-10 13:27
那我的步骤对不对呀?还有,下载何种固件是通过PID和VID来确定的,选择设备驱动程序也是通过他们两个决定的,前面的两个(PID 和VID)和后面的两个是一样的吗?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2004-01-10 13:47
发现我很爱较真,贴个详细的:
1. 设备接上总线,开始供电(有些设备不是总线供电的);
2. 重置电路维持芯片的重置状态,EZ-USB芯片产生稳定的CLKOUT;
3. MCU检测到EEROM连接在I2C总线上,读取存放在EEPROM中的PID,VID 码,并以这个码来覆盖原来MCU中内建的

PID,VID码;这两个有什么不同?  

现在开始枚举
4. Host检测到USB设备;
5. Host通过地址0发出GetDescriptor的请求(这其中就包括了PID,VID 码);
6. 设备返回无加载固件的设备ID码来回应(固件加载前后,设备ID有什么不同吗);
7. 主机根据PID,VID 码,并知道将加载器驱动程序(估计就是让固件下载到设备的程序)加载;
8.主机配置新地址给设备
9. 主机使用新地址再次发出GetDescriptor请求,设备返回设备描述符
10. 加载器驱动程序执行固件代码,并加载到MCU中。

如果通过串行口下载固件,是不是就不必经过8,10两步了?  

重枚举:
11. 释放MCU的重置,开始执行固件代码
12. 固件以电子驱动方式,将设备从总线中脱离,然后再重新连接
13. 主机发现设备连接到HUB中,发出GetDescriptor请求,设备返回描述符
14.主机查询其他描述符
至此,枚举过程全部完成,然后主机要求用户提供inf文件,并根据PID,VID 来确定该文件是否适合设备。

大伙帮我看看,这些步骤对不对?
在整个过程中,主机先后发出GetDescriptor请求三次,其中在枚举过程中发出两次,分别是通过地址0和新地址发出的,在重枚举过程中一次。在枚举开始之前,MCU内建的PID,VID被存放在EEPROM中的PID,VID,它们有什么不同?    

[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2004-01-10 14:33
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2004-01-10 14:59
你的过程基本正确:
其实设备每插上一次都要经过两次枚举过程,第一次是操作系统自动枚举,严格的说应该是USBD总线驱动的枚举,这个过程用户是不能控制的,基本过程就是读取设备描述符、配置描述符、字符串描述符等。以决定用户是插入的什么设备(字符串描述符决定),装入相应的的驱动,如果注册表中有你的VID/PID信息,说明你以前已经装过驱动了,系统自动装入驱动,如果注册表中没有VID/PID信息,系统会提示用户装入驱动,用户选择驱动后,安装成功,装入驱动,系统装入驱动后,驱动程序中一般还会有枚举过程,这个枚举过程主要是读取描述符信息,配置设备,建立PIPE等工作,至此一次枚举过程结束。如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。

第二次在哪里?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2004-01-10 15:05
好好的一个问题贴,怎么又跑到了探讨枚举和重枚举这个几个月前的话题上去了? :(
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2004-01-10 15:08
[quote]你的过程基本正确:
其实设备每插上一次都要经过两次枚举过程,第一次是操作系统自动枚举,严格的说应该是USBD总线驱动的枚举,这个过程用户是不能控制的,基本过程就是读取设备描述符、配置描述符、字符串描述符等。以决定用户是插入的什么设备(字符串描述符决定),装入相应的的驱动,如果注册表中有你的VID/PID信息,说明你以前已经装过驱动了,系统自动装入驱动,如果注册表中没有VID/PID信息,系统会提示用户装入驱动,用户选择驱动后,安装成功,装入驱动,系统装入驱动后,驱动程序中一般还会有枚举过程,这个枚举过程主要是读取描述符信息,配置设备,建立PIPE等工作,至此一次枚举过程结束。如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。

第二次在哪里? [/quote]

第二次:“如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。”
----引自pengenwen
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2004-01-10 15:10
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2004-01-10 15:11
呵呵,不知道我的论述正不正确?在各位大虾面前见笑了


单就枚举和重枚举是没有问题的,个人总结做的还是不错的! :D
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2004-01-10 15:15
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2004-01-10 15:17
久闻flytomoon大虾大名,久仰久仰


承蒙夸奖,小弟愧不敢当。不过不要在问题贴里聊天了,这里要抱着科学的态度回答问题的。 :D

[编辑 -  1/10/04 by  flytomoon]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2004-01-10 15:35
那么是这样:
枚举过程:
主机通过地址0获得设备描述符
主机给设备分配新地址
主机通过新地址再一次获取设备描述符,配置描述符,字符串描述符等
根据PID/VID来查找设备驱动,安装
主机读取描述符信息,配置设备,建立FIPE

重新枚举的过程:
主机通过发出请求,获得设备描述符表信息
主机根据PID/VID(上一个是由EEPROM提供的,这个是由什么提供的?)装入驱动------------------------- 这里我就不明白了,怎么是装入两次驱动呢?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2004-01-10 15:38
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2004-01-10 15:39
那么是这样:
枚举过程:
主机通过地址0获得设备描述符
主机给设备分配新地址
主机通过新地址再一次获取设备描述符,配置描述符,字符串描述符等
根据PID/VID来查找设备驱动,安装
主机读取描述符信息,配置设备,建立FIPE

重新枚举的过程:
主机通过发出请求,获得设备描述符表信息
主机根据PID/VID(上一个是由EEPROM提供的,这个是由什么提供的?)装入驱动------------------------- 这里我就不明白了,怎么是装入两次驱动呢?

这是针对已有的ez系列开发产品设计的,任何成型的usb产品在应用后不需要重枚举的过程,可以说重枚举是cy考虑到开发的便捷设计的,其实usb芯片没有重枚举过程是可以的!!!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
36楼#
发布于:2004-01-10 15:44
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
37楼#
发布于:2004-01-10 15:47
对,EZ-USB也可以把固件代码放到EEPROM中,或者干脆就带一块FLASH存放固件,这样就不需要重枚举了,但是要想用易于升级的软配置,重枚举就是必须的了


这样考虑还是很周到的嘛!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
38楼#
发布于:2004-01-10 15:55
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
39楼#
发布于:2004-01-10 15:58
这一次的枚举是你的固件来响应USB请求的,所以VID/PID就是由你的固件提供的,前一次是有USB核(或者EEPROM)提供的
那两次的驱动是一个驱动文件吗?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
游客

返回顶部