发新帖本帖赏金 2.00元(功能说明)我要提问
返回列表
打印
[技术问题解答]

求USB驱动例程

[复制链接]
9016|104
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LuoR|  楼主 | 2015-12-8 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,要做USB驱动来实现通信,板子是飞思卡尔的K22系列的,实现数据收发。(不是CDC虚拟串口)
还有,哪里大侠帮我解释一下USB免驱的实现方法和原理。

打赏榜单

21ic小管家 打赏了 2.00 元 2015-12-08

相关帖子

沙发
fclmyl2| | 2015-12-8 13:53 | 只看该作者
USB HID 是免驱的,应该有例程的

使用特权

评论回复
板凳
zhanzr21| | 2015-12-8 13:55 | 只看该作者
用HID吧 HID的话电脑就自带驱动了 那个KL27 Mini板子的例子中就有HID的例子 论坛中有下载连接 你搜搜

使用特权

评论回复
地板
LuoR|  楼主 | 2015-12-8 14:10 | 只看该作者
zhanzr21 发表于 2015-12-8 13:55
用HID吧 HID的话电脑就自带驱动了 那个KL27 Mini板子的例子中就有HID的例子 论坛中有下载连接 你搜搜 ...

HID不是人工设备嘛,可以应用于传数据吗?我也是初学者,不是很明白

使用特权

评论回复
5
zhanzr21| | 2015-12-8 14:28 | 只看该作者
你数据量大吗? 大概甚么速率可以接受,HID的速度是慢一点, 好处就是不用另外做驱动,
主要看你需求了。

使用特权

评论回复
6
LuoR|  楼主 | 2015-12-8 14:43 | 只看该作者
fclmyl2 发表于 2015-12-8 13:53
USB HID 是免驱的,应该有例程的

HID速度能达到多少,之前用虚拟串口达不到要求,所以才要做USB驱动的

使用特权

评论回复
7
FSL_TICS_Jeremy| | 2015-12-8 14:45 | 只看该作者
驱动程序是针对PC机而言的,哪有在MCU上写驱动程序的啊

使用特权

评论回复
8
fclmyl2| | 2015-12-8 14:56 | 只看该作者
你做什么传输的,USB转串口可以上M的速度的

使用特权

评论回复
9
LuoR|  楼主 | 2015-12-8 14:58 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-12-8 14:45
驱动程序是针对PC机而言的,哪有在MCU上写驱动程序的啊

这个不能叫驱动么,就是在ARM里边写USB底层代码,初始化等,直接进行数据传输,而不是用虚拟串口~PC端进行免驱

使用特权

评论回复
10
fclmyl2| | 2015-12-8 14:59 | 只看该作者
网上找的
1、最大的传输速度有限,特别是低速与全速的时候。主机可以保证低速的中断端点,每10ms内不会有超过1笔事务,每一秒最多800个字节。主机可以保证全速端点,每1ms1笔事务,每一秒最多是64000个字节。主机可以保证高速端点,每125us1笔事务,每一秒最多24.576MB。

2、没有保证的传输速率。如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这是最快的轮询速率,所以断点可以保证有正确的带宽可供使用

使用特权

评论回复
11
LuoR|  楼主 | 2015-12-8 15:13 | 只看该作者
zhanzr21 发表于 2015-12-8 14:28
你数据量大吗? 大概甚么速率可以接受,HID的速度是慢一点, 好处就是不用另外做驱动,
主要看你需求了。 ...

我这边是要收发CAN报文,之前用CDC类来做的,但是BOSS觉得速度不行,叫做USB驱动,HID的应该也不行吧~

使用特权

评论回复
12
FSL_TICS_Jeremy| | 2015-12-8 15:15 | 只看该作者
LuoR 发表于 2015-12-8 14:58
这个不能叫驱动么,就是在ARM里边写USB底层代码,初始化等,直接进行数据传输,而不是用虚拟串口~PC端进 ...

这不叫驱动程序,你想使用USB,你必须遵循USB 设备类的协议,举个例子你可以选择HID类,或者CDC类,只有这样PC机才可以正确枚举该设备

使用特权

评论回复
13
zhanzr21| | 2015-12-8 15:22 | 只看该作者
LuoR 发表于 2015-12-8 15:13
我这边是要收发CAN报文,之前用CDC类来做的,但是BOSS觉得速度不行,叫做USB驱动,HID的应该也不行吧~ ...

CAN的速度才多少? 应该是所有总线中最慢的一种。用CDC不行,你用CDC用的多大速率呢?

我觉得问题的关键是,你没有搞清楚原来是甚么速率, 也不知道要达到什么速率,这样不好怎么探讨哪个快哪个慢。

USB还有个同步模式, 传递图像都没问题, 2.0理论速率48Mbit/s, 关键是你追求的速率到底是多少呢?

使用特权

评论回复
14
LuoR|  楼主 | 2015-12-8 15:43 | 只看该作者
fclmyl2 发表于 2015-12-8 14:59
网上找的
1、最大的传输速度有限,特别是低速与全速的时候。主机可以保证低速的中断端点,每10ms内不会有超 ...

传输CAN报文,其实我认为虚拟串口够了,但是BOSS说不行~就是直接边程序进行通信,省去虚拟串口的过程~!
之前用虚拟串口设置的波特率是115200~这个波特率和USB传输的48Mbit/s是什么区别?
我论坛等级是实习生,1个小时只能回复三个内容,所以很慢,还请理解~

使用特权

评论回复
15
LuoR|  楼主 | 2015-12-8 16:01 | 只看该作者
zhanzr21 发表于 2015-12-8 15:22
CAN的速度才多少? 应该是所有总线中最慢的一种。用CDC不行,你用CDC用的多大速率呢?

我觉得问题的关键 ...

我是有些混淆不清,按照USB2.0协议 48M肯定是够的,就是传输CAN报文,因为之前用CDC下位设置的波特率是115200,接收数据的时候会有时不时的延迟,所以要换方法改进这个通信, 还有楼上版主说的这种不叫驱动?
但是我查过,是可以通过编写下位机来实现通信,这和HID和CDC又是不一样的,而且还可以实现PC端的免驱,那么这不叫USB驱动应该叫什么,正确枚举必须通过HID或者CDC?
还有一个问题,刚才在一个帖子中看到“虚拟串口里面,不存在波特率的概念,虚拟串口中的波特率只有在用于USB转串口的时候才会用到,设置了虚拟串口的波特率之后,在打开虚拟串口的时候,USB包里面会有一个控制命令,告知电脑设置的波特率是多少,如果你是要做usb转串口的应用,则在这个时候,初始化你的串口比较合适,如果你不是转串口,那么可以直接无视。“  这个解释就是说其实我用虚拟串口进行数据传输,但是传播的速度还是按照USB协议设定的走的,只不过USB转串口的时候会受到波特率的影响~

使用特权

评论回复
16
LuoR|  楼主 | 2015-12-8 16:08 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-12-8 15:15
这不叫驱动程序,你想使用USB,你必须遵循USB 设备类的协议,举个例子你可以选择HID类,或者CDC类,只有 ...

    我是有些混淆不清,按照USB2.0协议 48M肯定是够的,就是传输CAN报文,因为之前用CDC下位设置的波特率是115200,接收数据的时候会有时不时的延迟,所以要换方法改进这个通信!
    但是我查过,是可以通过编写下位机来实现通信,这和HID和CDC又是不一样的,而且还可以实现PC端的免驱,那么这不叫USB驱动应该叫什么,正确枚举必须通过HID或者CDC?
    还有一个问题,刚才在一个帖子中看到“虚拟串口里面,不存在波特率的概念,虚拟串口中的波特率只有在用于USB转串口的时候才会用到,设置了虚拟串口的波特率之后,在打开虚拟串口的时候,USB包里面会有一个控制命令,告知电脑设置的波特率是多少,如果你是要做usb转串口的应用,则在这个时候,初始化你的串口比较合适,如果你不是转串口,那么可以直接无视。“  这个解释就是说其实我用虚拟串口进行数据传输,但是传播的速度还是按照USB协议设定的走的,只不过USB转串口的时候会受到波特率的影响~

使用特权

评论回复
17
LuoR|  楼主 | 2015-12-8 16:09 | 只看该作者
fclmyl2 发表于 2015-12-8 14:56
你做什么传输的,USB转串口可以上M的速度的

按照USB2.0协议 48M肯定是够的,就是传输CAN报文,因为之前用CDC下位设置的波特率是115200,接收数据的时候会有时不时的延迟,所以要换方法改进这个通信, 还有楼上版主说的这种不叫驱动?
但是我查过,是可以通过编写下位机来实现通信,这和HID和CDC又是不一样的,而且还可以实现PC端的免驱,那么这不叫USB驱动应该叫什么,正确枚举必须通过HID或者CDC?
还有一个问题,刚才在一个帖子中看到“虚拟串口里面,不存在波特率的概念,虚拟串口中的波特率只有在用于USB转串口的时候才会用到,设置了虚拟串口的波特率之后,在打开虚拟串口的时候,USB包里面会有一个控制命令,告知电脑设置的波特率是多少,如果你是要做usb转串口的应用,则在这个时候,初始化你的串口比较合适,如果你不是转串口,那么可以直接无视。“  这个解释就是说其实我用虚拟串口进行数据传输,但是传播的速度还是按照USB协议设定的走的,只不过USB转串口的时候会受到波特率的影响~

使用特权

评论回复
18
LuoR|  楼主 | 2015-12-8 16:30 | 只看该作者

使用特权

评论回复
19
FSL_TICS_Jeremy| | 2015-12-8 16:32 | 只看该作者
LuoR 发表于 2015-12-8 16:08
我是有些混淆不清,按照USB2.0协议 48M肯定是够的,就是传输CAN报文,因为之前用CDC下位设置的波特率 ...

建议楼主还是先看看这本书吧,多了解一下USB CDC协议吧
https://bbs.21ic.com/forum.php?mo ... C%88%E5%9C%88%2BUSB

使用特权

评论回复
20
zhanzr21| | 2015-12-8 16:32 | 只看该作者
你别纠结驱动甚么不驱动的了

先把速率这个问题搞清楚,
115200这个速率在CDC这里其实还可以提高一倍, 你时不时有延迟这个现象也不一定是115200这里卡住了, 有可能是你其他地方造成的延迟, 如果不仔细分析,找出瓶颈, 可能换甚么速率都延迟就白忙活了. 根据你的描述, 我其实怀疑115200是瓶颈这个论断。具体怎么做实验,因为你对你项目描述较简单,只能由你自己去设计实验了。基本思路就是把数据源头的每条信息打上标号, 再进行转发到电脑上看接收到的信息的情况。

波特率这个是设计USB CDC类的时候可以控制的, 很简单一个道理,你买过那种USB转TTL的小板子没有, 那种就是别人设计好一种CDC, 他可以调波特率, 你设计的CDC肯定可以调,只不过你一次设定,他是工具所以随时可以改。

使用特权

评论回复
发新帖 本帖赏金 2.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

105

帖子

1

粉丝