pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
40楼#
发布于:2004-01-10 16:02
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
41楼#
发布于:2004-01-10 16:06
[quote]这一次的枚举是你的固件来响应USB请求的,所以VID/PID就是由你的固件提供的,前一次是有USB核(或者EEPROM)提供的
那两次的驱动是一个驱动文件吗? [/quote]
知道了,如果EZUSB的设备要升级的话,就改变EEPROM里的PID/VID,然后可以在主机上寻找新的驱动程序。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
42楼#
发布于:2004-01-10 16:10
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
43楼#
发布于:2004-01-10 16:33
[quote]现在关于枚举和重枚举我有以下几个疑问

在设备描述符表里,VID和PID决定下载哪种驱动程序,但是如果我的芯片是自己设计的,还没有PID和VID(暂定为零),那怎么决定下载那种驱动呢?



如果是自己开发,自定义PID和VID,那么通过.inf引导找到驱动中的对应来驱动啊!这样你还是要写驱动的! [/quote]
主机通过PID/VID来找到INF文件,该文件把设备的PID/VID绑定到特定的特定的USB设备驱动程序上,那我把INF文件中的产品和生产商的数据改一下,不就行了吗?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
44楼#
发布于:2004-01-10 16:37
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
45楼#
发布于:2004-01-10 16:51
和升级没有关系 :),我的工作是实现连在设备上的硬盘与主机通信,应该是个Mass Storage的通用设备,windows2000下应该有相应的设备驱动程序,所以我想我是不是不用作设备驱动了?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
46楼#
发布于:2004-01-10 16:53
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
47楼#
发布于:2004-01-10 16:59
如果你作成Mass Storage标准设备,当然不用做驱动了,WIN2000自带他的标准驱动,和HID设备一样,随便买个鼠标键盘一插就OK

那固件还是要写的 :mad:
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
48楼#
发布于:2004-01-10 17:00
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
49楼#
发布于:2004-01-10 17:33
[quote]这一次的枚举是你的固件来响应USB请求的,所以VID/PID就是由你的固件提供的,前一次是有USB核(或者EEPROM)提供的
那两次的驱动是一个驱动文件吗? [/quote]

其实只要你一开始提供了PID,VID,其实一次枚举就可以了!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
50楼#
发布于:2004-01-10 17:34
[quote][quote]这一次的枚举是你的固件来响应USB请求的,所以VID/PID就是由你的固件提供的,前一次是有USB核(或者EEPROM)提供的
那两次的驱动是一个驱动文件吗? [/quote]
知道了,如果EZUSB的设备要升级的话,就改变EEPROM里的PID/VID,然后可以在主机上寻找新的驱动程序。 [/quote]

只改固件!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
51楼#
发布于:2004-01-10 17:35
[quote]如果你作成Mass Storage标准设备,当然不用做驱动了,WIN2000自带他的标准驱动,和HID设备一样,随便买个鼠标键盘一插就OK

那固件还是要写的 :mad: [/quote]

这可是怎么都省不了的啊! :D
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
52楼#
发布于:2004-01-10 17:38
用户被禁言,该主题自动屏蔽!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
53楼#
发布于:2004-01-10 17:44
全省了就没得做的了


^_^,到也省事了!!!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
54楼#
发布于:2004-01-10 17:48
用户被禁言,该主题自动屏蔽!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
55楼#
发布于:2004-01-10 23:21
帮我看看这个问题:
[quote][quote]现在关于枚举和重枚举我有以下几个疑问

在设备描述符表里,VID和PID决定下载哪种驱动程序,但是如果我的芯片是自己设计的,还没有PID和VID(暂定为零),那怎么决定下载那种驱动呢?



如果是自己开发,自定义PID和VID,那么通过.inf引导找到驱动中的对应来驱动啊!这样你还是要写驱动的! [/quote]
主机通过PID/VID来找到INF文件,该文件把设备的PID/VID绑定到特定的特定的USB设备驱动程序上,那我把INF文件中的产品和生产商的数据改一下,不就行了吗?
 [/quote]
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
56楼#
发布于:2004-01-10 23:31
其实只要你一开始提供了PID,VID,其实一次枚举就可以了!
第二次:“如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。”
----引自pengenwen
 

这两句话看上去矛盾啊! :oflytomoon的意思是不是我第一次提供的PID/VID和固件里提供的一样的情况下,一次枚举就可以了,因为即使枚举两次,装入的驱动程序也是同一个文件,重枚举就没有必要了,重枚举的意义就在于它使设备易于升级,如果没有升级的要求,可以不用.
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
57楼#
发布于:2004-01-11 08:59
[quote]其实只要你一开始提供了PID,VID,其实一次枚举就可以了!
第二次:“如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。”
----引自pengenwen
 

这两句话看上去矛盾啊! :oflytomoon的意思是不是我第一次提供的PID/VID和固件里提供的一样的情况下,一次枚举就可以了,因为即使枚举两次,装入的驱动程序也是同一个文件,重枚举就没有必要了,重枚举的意义就在于它使设备易于升级,如果没有升级的要求,可以不用. [/quote]

就是说你的设备的VID和PID定下来以后,一次枚举就够了,不用重枚举了就。 :D
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
58楼#
发布于:2004-01-11 10:13
那上一个问题呢? :o
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
59楼#
发布于:2004-01-12 09:15
俺也来说一说,班门弄斧,各位大侠见笑了。

枚举步骤:
1、接入USB总线,此时设备的地址为0,USB协议要求它必须为0。

2、USB控制器发现一个新设备,报告系统、同时打开该端口(硬件端口),系统通过地址0发送GetDescriptor命令,读取设备的设备描述符。如果在一瞬间有多个新设备插入(极端情况下),那么控制器通过一个一个的打开硬件端口,也就说等一个设备枚举完成后才打开另一个等待枚举的新设备,每个设备在他连接的端口没有打开前,是接受不到USB总线上的数据的。通过这种方法可以避免同时连接多个设备所有可能引来的冲突。

3、系统向新设备发送SetAddress命令,这样设备就有了新地址,后面的操作都是通过新地址进行的。

4、然后,系统会通过一系列命令从设备读取设备描述符(步骤2读取的设备描述符是不完全的只有8个字节,好像)、配置描述符(包括所有配置、接口、端点描述符)、字符串描述符。

5、此时,系统已经知道设备的一切信息,PID VID在设备描述符种返回设备,系统据此加载驱动程序。


在步骤2、3、4中,对命令的响应,如果没有使用EZ-USB系列,例如使用D12,则肯定要由MCU响应,固件固化在硬件,所以只需要一次枚举过程。
如果使用EZ-USB,则系统上电后他查找由没有连接EEPROM,如果在地址1(具体的地址极不清了)按照固定的格式联接了大容量的EEPROM(固件就在EEPROM中),芯片把其中的内容(也就是你的固件调入芯片内),有你的固件响应命令,此时只需要一次枚举;   如果没有,则如果在地址0按照固定的格式联接了一个256字节的EEPROM(其内容是设备、培植、接口、端点、字符串描述符),则把这些信息调入芯片、返回系统,此时由EZ-USB内固化的一些程序响应命令;    如果没有连接EEPROM芯片,则把芯片内固化的描述符返回系统。

对应后两种情况可能需要重枚举,重枚举的步骤为:
A、从地址0读取设备描述符(此时由固化的CY固件响应);
B、设置地址;
C、从新地址读取设备、配置端口地址描述负;
D、驱动程序(CY控制面板)下载你的固件;
E、你的固件开始运行;
F、断开原设备、地址回0,等一会儿后重新连接;
G、从地址0读取设备描述符(此时由你的固件响应);
H、设置地址;
I、从新地址读取设备、配置端口地址描述负;
J、加载你的驱动。

  成功。
好好学习,天天向上,做一个乖宝宝。
游客

返回顶部