nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:4272回复: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-09 16:23
首先,说一下背景:整个项目的目的是设计一块USB核芯片,现在已经投片了,但是还需要测试它的功能,才能大批量生产。我的任务就是测试那块USB芯片能否正常工作,如果最后能够在主机上对连接在MCU 1201(一块基于ARM核的控制器)上的硬盘进行读写,那就成功了。由于这块USB芯片是被测试的目标,所以必须在整个数据传输中扮演角色,目的是测试芯片功能,实现硬盘的读写只是手段 所以不必关心为什么不把68000和MCU直接连在一起的问题。
 :) :) :) :) :)
下面,说一说各个芯片的功能。  :o
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-09 16:38
你最好编辑一下,写在一起,不要一点一点写,这样比较容易看,不会叫回复的帖子打乱思路!
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-09 16:39
关于68000,我只知道它在这块板子上扮演UTMI的角色,进行数据的串并转换,别的就没有什么了。 :)
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-09 16:40
要测试的USB 芯片则是扮演了SIE的功能,它对PID信息包进行解码,错误检测,然后把有效数据送到USB设备,当向主机发送数据时,它接受来自USB设备的数据字节和控制信号,将它们变成USB格式。
另外,它存储了设备的信息,MCU要对USB芯片进行配置,这样的目的就是当设备连上主机后,可自动把设备信息传送给主机(EZUSB也有类似的功能,EZUSB是通过一个控制位”Resume”(USBCS.1)来决
定是由SIE还是由8051核处理端点0的设备请求的,在我看的bulktest例子里,是由8051处理的,这里要由USB CORE来处理)。
 :)
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
freshfish
驱动牛犊
驱动牛犊
  • 注册日期2003-12-24
  • 最后登录2008-12-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-09 16:41
好像导演一样!
我是一条鱼,网上的空气......
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-09 16:41
这里,我要问一下:如果主机收到设备的信息,是不是就可以识别USB设备了?枚举和重枚举就算完成了?


那我是不是不必写USB的驱动了?MCU只负责对USB 芯片进行配置,接受来自USB芯片的数据,然后进行数据转换,变成IDE格式。
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-09 16:42
好像还没有写完啊!建议你都写在一起!!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-09 16:47
这里,我要问一下:如果主机收到设备的信息,是不是就可以识别USB设备了?枚举和重枚举就算完成了?


那我是不是不必写USB的驱动了?MCU只负责对USB 芯片进行配置,接受来自USB芯片的数据,然后进行数据转换,变成IDE格式。
 


你应该明确,枚举的目的就是通过得到的设备描述信息找到设备的驱动程序进行加载,成功加载后才算是枚举的完成。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-09 16:48
这里,我要问一下:如果主机收到设备的信息,是不是就可以识别USB设备了?枚举和重枚举就算完成了?


那我是不是不必写USB的驱动了?MCU只负责对USB 芯片进行配置,接受来自USB芯片的数据,然后进行数据转换,变成IDE格式。
 


重枚举是EZ系列的特性,不是所有的usb设备都要进行重枚举的,这个你要清楚。
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-09 16:51
flytomoon说的对 :(
把上面的贴在一起:
首先,说一下背景:整个项目的目的是设计一块USB核芯片,现在已经投片了,但是还需要测试它的功能,才能大批量生产。我的任务就是测试那块USB芯片能否正常工作,如果最后能够在主机上对连接在MCU 1201(一块基于ARM核的控制器)上的硬盘进行读写,那就成功了。由于这块USB芯片是被测试的目标,所以必须在整个数据传输中扮演角色,目的是测试芯片功能,实现硬盘的读写只是手段 所以不必关心为什么不把68000和MCU直接连在一起的问题。
 
-----------------------------  
下面,说一说各个芯片的角色和功能

1. 68000:我只知道它在这块板子上扮演UTMI的角色,进行数据的串并转换,别的就没有什么了。


2. USB芯片:要测试的USB 芯片则是扮演了SIE的功能,它对PID信息包进行解码,错误检测,然后把有效数据送到USB设备,当向主机发送数据时,它接受来自USB设备的数据字节和控制信号,将它们变成USB格式。

另外,它存储了设备的信息,MCU要对USB芯片进行配置,这样的目的就是当设备连上主机后,可自动把设备信息传送给主机(EZUSB也有类似的功能,EZUSB是通过一个控制位”Resume”(USBCS.1)来决
定是由SIE还是由8051核处理端点0的设备请求的,在我看的bulktest例子里,是由8051处理的,这里要由USB CORE来处理)。


3. MCU(1201E,一块采用ARM核的控制器):只负责对USB 芯片进行配置,另外接受来自USB芯片的数据,进行数据转换,变成IDE格式。










[b][color=green]我庄严宣誓我没干好事[/color] [/b]
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-01-09 16:51
我现在对你的工作的理解是应该先开发个已成功的板子,用于实现读写,这样你可以以后只更换usb芯片从而发现其是否工作正常?
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-01-09 16:52
现在你的68000和arm合在一起了吗?你只是想知道如何配置68000的寄存器以实现通过arm的控制和主机进行通讯吗?

[编辑 -  1/9/04 by  flytomoon]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-01-09 17:36
[quote]这里,我要问一下:如果主机收到设备的信息,是不是就可以识别USB设备了?枚举和重枚举就算完成了?


那我是不是不必写USB的驱动了?MCU只负责对USB 芯片进行配置,接受来自USB芯片的数据,然后进行数据转换,变成IDE格式。
 


你应该明确,枚举的目的就是通过得到的设备描述信息找到设备的驱动程序进行加载,成功加载后才算是枚举的完成。 [/quote]发现自己的基本概念都不清楚 :o,如果你让我说什么是枚举和重枚举还真说不准,又翻书,在我的认识里,
枚举的概念是这样的:当设备第一次插上时,设备描述符表和固件都是在设备上的,主机向地址0发送取设备请求,设备向主机发送ID,告诉主机它是谁,然后主机给设备提供一个唯一的地址,然后发出多个获取设备信息的请求,如设备的端点数,电源要求,下载何种驱动程序等。
重枚举的概念:当插上外围设备时,设备首先通过USB总线下载固件和设备描述符表(这两个是不是在枚举时发送到主机上了?怎么没看见枚举时固件也传送的步骤啊?)

 
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-01-09 17:48
现在关于枚举和重枚举我有以下几个疑问

在设备描述符表里,VID和PID决定下载哪种驱动程序,但是如果我的芯片是自己设计的,还没有PID和VID(暂定为零),那怎么决定下载那种驱动呢?
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
nlq_new
驱动老牛
驱动老牛
  • 注册日期2003-04-11
  • 最后登录2012-04-28
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-01-09 17:58
小声问:设备每一次插到USB接口时,都要经过枚举和重枚举两个步骤吗?
以前总觉得第一次插到USB接口时,出现的“发现USB设备”等提示就是枚举,以后,该设备再插上,就是重枚举,也没有什么提示信息了。现在发现好像错了 :o
[b][color=green]我庄严宣誓我没干好事[/color] [/b]
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-01-09 23:27
你对枚举的理解是对的,只是有些细节没明白而已,不过有些也用不着明白,ezusb的枚举是做在硬件中的,因此只要设备硬件设计没问题,上电后主机会发现设备并枚举,此时会加载cy的驱动,2k自带的有,驱动加载完成枚举也就结束了。

重枚举是指你通过usb电缆下载了自己的固件程序,在你的固件程序运行后会先把之前的D+线上(好象是吧,68013是)的电阻断掉,这相当于拔掉了电缆,然后再把它连接上,这样设备会再次发现并枚举设备,但这次主机收到的描述符是你自己的,如果你更改了vid和pid,那么主机会提示你加载相应的驱动,而不是cy的驱动了,加载完毕后枚举结束,然后设备就按照你的要求工作。这就是所谓的重枚举。

我说明白了吗?

还有并不是说第一次插上电缆叫枚举,第二次叫重枚举,不是这样的,关键的问题载第二次是否枚举的是你定义的设备,如果你的固件(即你的arm运行的程序)没有运行,那枚举的还是cy的设备,还是叫枚举,不叫重枚举
junj18
驱动牛犊
驱动牛犊
  • 注册日期2003-06-30
  • 最后登录2005-01-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-01-10 08:19
呵呵,是了,还是jinghuiren说的清楚啊!
努力。。努力。。一切都会好的,相信自己!
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-01-10 08:38
概念说了不少了,开这个贴子到底要干吗?
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-01-10 11:30
现在关于枚举和重枚举我有以下几个疑问

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



如果是自己开发,自定义PID和VID,那么通过.inf引导找到驱动中的对应来驱动啊!这样你还是要写驱动的!
上一页
游客

返回顶部