阅读:3039回复:28
这个贴我一定要搞明白,到底USB是怎么通信的。
我现在用到的EZUSB,AN2131芯片。固件不用我写。我主要就是做高级语言方面的。但是十多天了,我都搞不明白要与USB通信的基本步骤,那位高人请指点我一下。
先说一下USB要做的事,就是要跟USB通信之后,将固件下载到USB,然后再从USB发送或接收数据,就是这样,(调用EZUSB.sys) 比如: 1,用createfil(\\\\.\\EZUSB-0,......)取得设备句柄。 2,...... 3...... 4...... |
|
最新喜欢:![]() |
沙发#
发布于:2003-09-20 08:38
我感觉好象固件程序你也得参与写,不然usb是不会动的。 你得知道你们自己的请求,然后象标准请求那样加到固件中去,在驱动和应用程序中,用相应的ioctl来和固件程序配合。
我才做了2个月,感觉好象是这样,不对的地方高手一定要指出来。 :D [编辑 - 9/23/03 by wdy9927] |
|
板凳#
发布于:2003-09-20 09:01
可惜我只会delphi,要是会C那就好办了,唉。。。。
|
|
地板#
发布于:2003-09-20 09:05
能不能先跟我说说与USB通信在高级语言上具体那些步骤呀?
也好让我有一个思路,到底那些先那些后。要用到那些。谢谢 |
|
地下室#
发布于:2003-09-20 09:22
能不能先跟我说说与USB通信在高级语言上具体那些步骤呀? 这可难为我了,我也才学不久,能说到是能说一点,但我怕说错了误导你呀。 仅供参考: 做usb应该有3个方面,1是固件程序,2是驱动程序,3就是应用程序。你说的高级语言应该包括2和3吧。 驱动程序最好自己看书,或找别人问问在这里根本不能说明白(其实我也不是很懂 哈哈)。 和usb通信主要还是ioctl的问题。最好找个例子看看,再自己做一下。 我用driverstudio,所以说不出什么名堂来。 应用程序我是用vc写的,还是ioctl的问题(要想实现通信,好象就是它的事)。 这里的ioctl一定要和驱动里的相应,他们的ordinal都是从0x800开始的,之前的可不能用。 哈哈,不知道说了什么,能有帮助就看看吧。 有空的时候学学c,很有用的。 :D |
|
5楼#
发布于:2003-09-20 09:27
我现在要做的就是三。
固件不用我写,驱动用CY自带的EZUSB.sys。 所以我就只写应用程序就行了。都这么久了,我还没有半点头绪,唉。。 是不是就是用createfile先取得句柄,然后用deviceIOcontrol来取得XXX,,然后再用readfile或writefile来读写呀。。???? |
|
6楼#
发布于:2003-09-20 09:36
谢谢你。
|
|
7楼#
发布于:2003-09-20 11:09
其实步骤你自己已经清楚了,只是没有做而已。
creatfile 取得句柄 deiveioXXX / read/ write 传输数据 closedevice 关闭程序退出 你需要做的是需要和硬件工程师定制一分通行协议,你发什么样的数据给他,他执行什么样的操作 |
|
|
8楼#
发布于:2003-09-20 12:54
读写数据是不是用deviceIOcontrol这个函数来做的呀???
的确,我这几天看了很多资料,但是还是搞不懂要怎么做才可以。 |
|
9楼#
发布于:2003-09-20 14:01
读写数据是不是用deviceIOcontrol这个函数来做的呀??? 这要看驱动怎么实现的,实际上什么调用都可以读写,, 只要相应的驱动支持,,,实际上是app调用writefile,, readfile,,deviceiocontrol等函数,,到了你驱动这一层时,, 驱动进行相应处理,,完成应用程序的响应,,并且如果 需要向设备发数据,,就发,,应该收数据就收,,对于你是否 应该发,要看你驱动的接口(对于应用程序)想要实现什么功能,, 对于发什么数据,设备该怎么响应,,你应该和固件工程师讨论,, 你们两个定一下应该怎么交换数据完成通信....比如先发同步字,, 然后是命令字,,然后是参数,,最后是校验码什么的...... 我没写过usb驱动,,也没写过基于usb的固件程序,,只是这么理解的,, 不知是否正确,,希望你能从回答中得到应该正确的信息... |
|
|
10楼#
发布于:2003-09-20 14:10
我建议你看一下别人提供的驱动的资料,,,,
你的意思无非就是写一个基于ddk的应用程序,,, 那么首先你要看一下io_ctl中各个码子怎么调用,, 需要什么参数,,实现什么功能..先不用考虑驱动,, 把精力放在ddk的应用上.... |
|
|
11楼#
发布于:2003-09-22 08:19
我要编的只是应用程序,而驱动我是直接调用CY的EZUSB.SYS,但是我看了他带的VB例程,因为不懂VB,所以有些也看不懂。
是不是要对USB进行读写只用到deviceIOcontrol就个就行了,因为他的IO_CTL有读作写的参数。是不是呀?? 能不能写一条例子给我,对USB进行读或写的一条函数呀。 |
|
12楼#
发布于:2003-09-22 10:19
用WinDriver吧
|
|
13楼#
发布于:2003-09-23 12:58
呵呵,我们是同路的,虽然我要做驱动,但是也只是在标准例子上改改。互相鼓励鼓励吧:)
其实高级语言的特点就是friendly,建议你好好研究一下driverstudio里的ezusb例子,对于理解驱动的框架很有用。虽然是c++的,但是看懂程序的结构和DeviceControl()等几个重点函数应该是不成问题。 你可以先试着用DeviceIoControl()实现取设备描述符的功能。 我的驱动还在艰难的编造中,不过应用程序部分已经实现了读取u盘的各种描述符的功能(使用ds带的ezusb驱动),如果需要可以发给你参考。 我要编的只是应用程序,而驱动我是直接调用CY的EZUSB.SYS,但是我看了他带的VB例程,因为不懂VB,所以有些也看不懂。 |
|
14楼#
发布于:2003-09-23 13:10
谢谢andy_ee兄,请发一份给我参考参考。kimlon@163.com
|
|
15楼#
发布于:2003-09-23 15:53
[quote]能不能先跟我说说与USB通信在高级语言上具体那些步骤呀? 这可难为我了,我也才学不久,能说到是能说一点,但我怕说错了误导你呀。 仅供参考: 做usb应该有3个方面,1是固件程序,2是驱动程序,3就是应用程序。你说的高级语言应该包括2和3吧。 驱动程序最好自己看书,或找别人问问在这里根本不能说明白(其实我也不是很懂 哈哈)。 和usb通信主要还是ioctl的问题。最好找个例子看看,再自己做一下。 我用driverstudio,所以说不出什么名堂来。 应用程序我是用vc写的,还是ioctl的问题(要想实现通信,好象就是它的事)。 这里的ioctl一定要和驱动里的相应,他们的ordinal都是从0x800开始的,之前的可不能用。 哈哈,不知道说了什么,能有帮助就看看吧。 有空的时候学学c,很有用的。 :D [/quote] 知音阿,老兄和我一样,我觉得这种处境挺尴尬,你觉得呢? |
|
|
16楼#
发布于:2003-09-23 17:16
[quote][quote]能不能先跟我说说与USB通信在高级语言上具体那些步骤呀? 这可难为我了,我也才学不久,能说到是能说一点,但我怕说错了误导你呀。 仅供参考: 做usb应该有3个方面,1是固件程序,2是驱动程序,3就是应用程序。你说的高级语言应该包括2和3吧。 驱动程序最好自己看书,或找别人问问在这里根本不能说明白(其实我也不是很懂 哈哈)。 和usb通信主要还是ioctl的问题。最好找个例子看看,再自己做一下。 我用driverstudio,所以说不出什么名堂来。 应用程序我是用vc写的,还是ioctl的问题(要想实现通信,好象就是它的事)。 这里的ioctl一定要和驱动里的相应,他们的ordinal都是从0x800开始的,之前的可不能用。 哈哈,不知道说了什么,能有帮助就看看吧。 有空的时候学学c,很有用的。 :D [/quote] 知音阿,老兄和我一样,我觉得这种处境挺尴尬,你觉得呢? [/quote] :D 多多交流,共同进步。 这就好了。 |
|
17楼#
发布于:2003-10-08 12:34
努力吧,没什么难得,我的已经搞定了
|
|
|
18楼#
发布于:2003-10-08 13:06
usb_anywhere兄,能不能说说经验呀,
请问你一下,你有没有用EZUSB用的DLL,我要在delphi上来调用。 就是可以通过这个dll来对ezusb进行读写的。 kimlon@163.com |
|
19楼#
发布于:2003-10-08 15:07
kimlon兄,你的EZUSB的C源程序可不可以给我一份
邮箱:ytzb@netease.com 谢谢! |
|
上一页
下一页