xuqing119
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2188回复:11

USB往单片机发送数据!!

楼主#
更多 发布于:2003-11-24 17:08
手头有motorola jb8芯片,需要通过USB往里面灌程序,因为USB与串口传输有很大不同所以想请教一下问题:
现在大脑一片糊涂:
我把我的思路说一下吧,往高手指点:
1,首先需要编写驱动程序(这个驱动应该是所谓的USB枚举吧??)
2,当设备插上后,根据线路电压变化,主机发现有新设备,然后用先前的驱动对设备进行枚举,得到设备的信息,分配地址。
3,接下来,主机就可以识别设备,然后可以用高端程序通过USB总线往单片机写数据了。

希望好人能指点,这些天头都大死了
qq:61673408
mail:xuqing119@sina.com
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-25 10:29
大致上是这样,但是最好一步一步写程序,容易调试。
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-11-25 12:01
手头有motorola jb8芯片,需要通过USB往里面灌程序,因为USB与串口传输有很大不同所以想请教一下问题:
现在大脑一片糊涂:
我把我的思路说一下吧,往高手指点:
1,首先需要编写驱动程序(这个驱动应该是所谓的USB枚举吧??)
第一步,是要让你的USB接口(在motorola jb8芯片端)工作,要写好固件!然后才是在windows端写驱动,在驱动装载前是枚举阶段,枚举成功后装载驱动,如果驱动装载成功,那么你的设备就可以工作了。

2,当设备插上后,根据线路电压变化,主机发现有新设备,然后用先前的驱动对设备进行枚举,得到设备的信息,分配地址。
错!发现新设备时,是windows系统中的usbd进行枚举,枚举成功后才会用到你写的驱动!

3,接下来,主机就可以识别设备,然后可以用高端程序通过USB总线往单片机写数据了。
如果装载你的驱动成功,就可以往单片机发数据了

希望好人能指点,这些天头都大死了
qq:61673408
mail:xuqing119@sina.com
我思,故我在
xuqing119
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-25 13:55
谢谢两位的指点,现在思路清楚了,固件端的代码已经搞定了,但是涉及到具体的枚举和驱动,还有点不清楚,想再请教一下。
1,关于枚举:flycat0101的回复中提到“发现新设备时,是windows系统中的usbd进行枚举”,你的意思就是我插上,然后我开始枚举,而且枚举过程我也很清楚,但是涉及到代码就不行了,不知道你有没有代码,可以让我参考一下!!!

2,关于驱动:我看了很多有关驱动的资料和代码,但是总是很模糊:网上说用ddk编写,用windrive编写,但是我看到的驱动都是.inf格式的,里面的驱动都是大同小异的,不知道这里面有什么关系?是不是驱动也只要想.inf那样写就可以了吖?请指教,谢谢!

希望大家能多多指教!!!
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-11-25 15:34
谢谢两位的指点,现在思路清楚了,固件端的代码已经搞定了,但是涉及到具体的枚举和驱动,还有点不清楚,想再请教一下。
1,关于枚举:flycat0101的回复中提到“发现新设备时,是windows系统中的usbd进行枚举”,你的意思就是我插上,然后我开始枚举,而且枚举过程我也很清楚,但是涉及到代码就不行了,不知道你有没有代码,可以让我参考一下!!!
当系统检测到有设备插入时,系统自动进行枚举,和你的代码没有任何关系,也就是说系统端的枚举过程可以不用考虑,当枚举完成后才会载入你所编写的驱动程序。
注意:枚举过程只和设备、系统有关,和你的驱动程序没有关系!
如果你想了解枚举的具体过程,可以看看linux下的代码,usb.c文件,如果想看windows下的源码,估计你得找微软要,给不给你我就不知道了,呵呵。


2,关于驱动:我看了很多有关驱动的资料和代码,但是总是很模糊:网上说用ddk编写,用windrive编写,但是我看到的驱动都是.inf格式的,里面的驱动都是大同小异的,不知道这里面有什么关系?是不是驱动也只要想.inf那样写就可以了吖?请指教,谢谢!
编写驱动有好多种方式,ddk、windriver都行。不过,首先你要了解WDM的运作方式。生成一个.sys的文件,然后才是编写.inf文件,这两个文件是缺一不可的。inf文件只是和你真正的驱动程序挂钩的一个文件,而真正完成数据收发和这没有关系,只和sys文件有关。这在用ddk时都是要进行的工作,而用windriver好像是根据你的输入的条件自动生成一些代码和inf文件,这个你可以看看这方面的资料。

希望大家能多多指教!!!
 

我思,故我在
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-25 15:39
代码很多,这里有,网上也有。
inf只是安装驱动的引导文件,真正的驱动是.sys\\.vxd\\.drv....
xuqing119
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-25 18:51
flycat0101的意思我明白了,是不是枚举是系统帮我们完成的,不需要我们去考虑,那就ok了。
1.那我想再问一下,枚举后系统是不是会在已有的驱动中根据枚举的各种描述符进行搜索,如果没有匹配的那么需要我们再载入自己编写的驱动程序呢?但是我们的驱动是要根据枚举来写的,那么这些枚举中的数据怎么得来呢?

2.还有,我在网上看到,一般USB驱动都是大同小异的,好象我看了很多人提供的驱动中.inf文件里面的东西好象都是差不多的,.SYS也差不多,那是不是把类似的拿来稍做修改就行了呢?

因为我所要做的很简单,只需通过usb口往芯片里灌数据就行了。



xuqing119
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-11-25 19:19
顺便再问一句,既然枚举是系统帮我们完成的,那为什么一些朋友的枚举还是需要自己编程来完成呢?比如此论坛“请教USB编程(急!!!) ”帖子中的网友用程序来获取设备的各种信息和描述符呢?
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-26 08:30
用户被禁言,该主题自动屏蔽!
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-11-26 12:34
flycat0101的意思我明白了,是不是枚举是系统帮我们完成的,不需要我们去考虑,那就ok了。
1.那我想再问一下,枚举后系统是不是会在已有的驱动中根据枚举的各种描述符进行搜索,如果没有匹配的那么需要我们再载入自己编写的驱动程序呢?但是我们的驱动是要根据枚举来写的,那么这些枚举中的数据怎么得来呢?

2.还有,我在网上看到,一般USB驱动都是大同小异的,好象我看了很多人提供的驱动中.inf文件里面的东西好象都是差不多的,.SYS也差不多,那是不是把类似的拿来稍做修改就行了呢?

因为我所要做的很简单,只需通过usb口往芯片里灌数据就行了。

 


对于第一个问题,系统会根据你描述符中的PID、VID与已经注册的驱动的PID、VID进行比对,比对成功就载入相应的驱动,如果不能找到的话,那就不能工作了。驱动是根据功能来写的,怎么会根据枚举呢?
2,inf文件的确是差不多的。你不应该看sys文件,而是要看产生这个sys文件的源码,这里除了架构差不多外,其余就要根据你设备的功能进行编写了。注意,你可以找一个类似的源码进行修改,然后产生一个sys文件,就像编译、连接一个.c文件最后产生一个.exe文件一样!
我思,故我在
xuqing119
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-26 13:13
那如果比对不成功,然后就要装载自己编写的驱动了??
听说用windriver编写驱动很傻瓜化,不需要任何的代码编写,Driver Wizard会产生文件,然后编译产生.exe驱动程序文件,然后再用VC,CB来编译这个文件就会产生驱动了。这样是不是很适合不太了解驱动的人用呢???
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-11-26 14:32
那如果比对不成功,然后就要装载自己编写的驱动了??
听说用windriver编写驱动很傻瓜化,不需要任何的代码编写,Driver Wizard会产生文件,然后编译产生.exe驱动程序文件,然后再用VC,CB来编译这个文件就会产生驱动了。这样是不是很适合不太了解驱动的人用呢???


在你的驱动中也是要提供PID、VID,如果不成功,也不能载入你的驱动程序。windriver提供了基本的框架,你只要在合适的地方将你的设备功能代码添加就可以了,编译连接后就能产生sys文件。相对于DDk来说,要简单很多。
我思,故我在
游客

返回顶部