nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:4646回复:74

我的USB开发问题专用帖--二(原帖分已放)

楼主#
更多 发布于:2004-01-09 15:42
如题,上次在我含混不清的叙述下,诸位大佬都被搞得晕头转向 ;),但是有几位还是勉强猜出了我的意思,在此表示佩服和感谢。

这次放分不够500了 :(,最近没空灌水,但是请大家放心,俺还是会补上的 :),好下面进入正题。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-14 18:50
在这个帖子里,我总算对枚举和重枚举有些概念,放分。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-13 10:39
你确实说的含糊不清,我的看法如下:
1.并不是所有的USB设备都要进行一个所谓重枚举,那只是EZUSB采取的一种方法,它的目的是为了能够向EZUSB芯片内下载用户程序的一个手段而已。普通USB设备只需要一次枚举就行了。
2.关于PID和VID在我看来只是用来表示加载哪个驱动程序的,当然对于市场上的成熟产品都有固定的PID和VID,你不能随便占用。不过你若是在调试阶段可以不要太考虑这个问题,随便取一个就成,原则是不要和现有设备的PID和VID冲突。
3.我还没看懂你所指的不要些驱动程序是什么意思。我看来除非你有一个现成的驱动可以满足你的测试要求而且和你的通讯协议兼容,那么你就不必重写了。只要将你的设备的PID和VID配置成和这个驱动程序相同的样子就行了。否则估计还是要重写!
给你个好的方法:
在你的计算机上装一个WINDRIVER,这样你就省去很多麻烦。应为WINDRIVER可以直接测试你的硬件。还能生成测试程序。很方便!


这是指你没有现成的驱动,如果有,可以直接修改源代码后用ddk编译生成新的驱动。另外说的pid和vid不能随便占用确实是对的,因为你的东西要商品化,所以应该实现考虑到这个问题。
sean_wang
驱动牛犊
驱动牛犊
  • 注册日期2003-10-28
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-13 10:13
你确实说的含糊不清,我的看法如下:
1.并不是所有的USB设备都要进行一个所谓重枚举,那只是EZUSB采取的一种方法,它的目的是为了能够向EZUSB芯片内下载用户程序的一个手段而已。普通USB设备只需要一次枚举就行了。
2.关于PID和VID在我看来只是用来表示加载哪个驱动程序的,当然对于市场上的成熟产品都有固定的PID和VID,你不能随便占用。不过你若是在调试阶段可以不要太考虑这个问题,随便取一个就成,原则是不要和现有设备的PID和VID冲突。
3.我还没看懂你所指的不要些驱动程序是什么意思。我看来除非你有一个现成的驱动可以满足你的测试要求而且和你的通讯协议兼容,那么你就不必重写了。只要将你的设备的PID和VID配置成和这个驱动程序相同的样子就行了。否则估计还是要重写!
给你个好的方法:
在你的计算机上装一个WINDRIVER,这样你就省去很多麻烦。应为WINDRIVER可以直接测试你的硬件。还能生成测试程序。很方便!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-13 08:56
用户被禁言,该主题自动屏蔽!
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-13 08:54
我觉得这两本书的不足就在于不是讲一般设备的驱动,而只是专门的EZUSB系列的,我当时就是认为所有的驱动硬件上都和EZUSB的类似,是把MCU和USB核放在一个片子中的,所有的硬件驱动都是严格的按照那些步骤来的,学的太死板,不能举一反三,当然,这和我的硬件知识严重缺乏是有很大关系的。等完成这个任务,好好补一下。


若能联合广大国内USB开发的工程师写上一些东西或许更有用一些
我来自中国 抵制日货
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-12 12:41
我觉得这两本书的不足就在于不是讲一般设备的驱动,而只是专门的EZUSB系列的,我当时就是认为所有的驱动硬件上都和EZUSB的类似,是把MCU和USB核放在一个片子中的,所有的硬件驱动都是严格的按照那些步骤来的,学的太死板,不能举一反三,当然,这和我的硬件知识严重缺乏是有很大关系的。等完成这个任务,好好补一下。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-12 12:16
我现在的工作据说很简单;那块USB芯片XD的功能据说很全(如果我和硬件设计人员的交流没有出现误差的话 :)),它存储了设备描述信息,当连接到主机上时,可以对主机发出的Get_Descriptord等请求进行响应,另外他还可以对主机发来的USB信息进行解码,纠错等,FIFO也都连在USB核芯片上。


发现我的固件只是对USB核传来的数据编码成IDE格式,再传给硬盘。可是我的固件不需要完成其他功能了吗?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-12 11:56
[quote][quote]
看了呀!还看了两本呢,北航的,越看越糊涂,都是基于EZUSB系列的,有时还把固件的下载和枚举分开讲,我是太抠字眼了,这样很浪费时间,但是没办法,感觉和书的作者没法沟通似的,看书就像找病句,一句话就能让我想半天。我也不知道自己的问题出在哪里。


有的时候,时因为翻译的问题,很多书都是翻译外国人的书、资料,语言的逻辑习惯不太一样。 [/quote]

不过肯定比入门的理解的好!!! [/quote]

那是肯定的,就是有的时候句子不好读懂。如果看英文的原版能通顺一些,但是英文又会成为一个问题。

[编辑 -  1/12/04 by  huoxy]

[编辑 -  1/12/04 by  huoxy]
好好学习,天天向上,做一个乖宝宝。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-12 11:41
[quote
看了呀!还看了两本呢,北航的,越看越糊涂,都是基于EZUSB系列的,有时还把固件的下载和枚举分开讲,我是太抠字眼了,这样很浪费时间,但是没办法,感觉和书的作者没法沟通似的,看书就像找病句,一句话就能让我想半天。我也不知道自己的问题出在哪里。


有的时候,时因为翻译的问题,很多书都是翻译外国人的书、资料,语言的逻辑习惯不太一样。 [/quote]

不过肯定比入门的理解的好!!!
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-12 11:29
[quote
看了呀!还看了两本呢,北航的,越看越糊涂,都是基于EZUSB系列的,有时还把固件的下载和枚举分开讲,我是太抠字眼了,这样很浪费时间,但是没办法,感觉和书的作者没法沟通似的,看书就像找病句,一句话就能让我想半天。我也不知道自己的问题出在哪里。 [/quote]

有的时候,时因为翻译的问题,很多书都是翻译外国人的书、资料,语言的逻辑习惯不太一样。
好好学习,天天向上,做一个乖宝宝。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-01-12 11:27
[quote][quote]楼上说的真详细。 :)


其实这些步骤你应该看书了解的! :D [/quote]
看了呀!还看了两本呢,北航的,越看越糊涂,都是基于EZUSB系列的,有时还把固件的下载和枚举分开讲,我是太抠字眼了,这样很浪费时间,但是没办法,感觉和书的作者没法沟通似的,看书就像找病句,一句话就能让我想半天。我也不知道自己的问题出在哪里。 [/quote]

这么认真啊,佩服!!!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-01-12 10:48
[quote]楼上说的真详细。 :)


其实这些步骤你应该看书了解的! :D [/quote]
看了呀!还看了两本呢,北航的,越看越糊涂,都是基于EZUSB系列的,有时还把固件的下载和枚举分开讲,我是太抠字眼了,这样很浪费时间,但是没办法,感觉和书的作者没法沟通似的,看书就像找病句,一句话就能让我想半天。我也不知道自己的问题出在哪里。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-01-12 10:37
楼上说的真详细。 :)


其实这些步骤你应该看书了解的! :D
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-01-12 10:07
楼上说的真详细。 :)
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-01-12 09:20
我推测,你们不需要重枚举,在你的USB核芯片中,固化你的固件,一次就枚据成你需要的设备。
好好学习,天天向上,做一个乖宝宝。
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于: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、加载你的驱动。

  成功。
好好学习,天天向上,做一个乖宝宝。
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-01-11 10:13
那上一个问题呢? :o
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于: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分
19楼#
发布于:2004-01-10 23:31
其实只要你一开始提供了PID,VID,其实一次枚举就可以了!
第二次:“如果用户的固件(EZ-USB)需要重新枚举,和以上步骤一样,不同的是这一次用户一般会提供自己的VID/PID和上次不一样,就会装入不同的驱动,但是枚举过程是完全一样的。。。”
----引自pengenwen
 

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

返回顶部