1、常用到的名词:
USB控制器:
USB总线结构:根集线器、集线器、USB设备;
USB主控制器驱动是不需要我们去写的,也不需要我们去移植。嵌入 式的USB主控制器都是集成到SOC内部,所以厂商会提供驱动
USB的主控制器,分为UHCI、OHCI、EHCI和XHCI等
根集线器、集线器、控制器之间连接关系:设备经过集线器汇聚,根集线器可以连接设备,也可以连接集线器;控制器连接主机与根集线器;
需要注意:我们需要做的是外围设备的驱动;但是外围设备基本会有相关的驱动,需要将外围设备与主机配合使用起来;
2、 基本硬件和基本概念(上和下两期)--掌握
1、USB设备支持热插拔;
2、接口分为公口和母口:有A型的、B型的;
3、USB接口定义:四根线电源正极(红)、电源地(黑)、数据D+(绿色)、数据D-(白色);传输差分信号;
3、USB协议:
1、USB是英特尔、康柏、IBM、Microsoft等多家公司联合提出的。 USB协议中规定了USB的软件结构、硬件结构、数据传输等等
2、 USB传输速率如下所示,不同版本的速度不一样:
1、 USB1.0:1.5Mbps(192KB/s)低速(Low-Speed)500mA;
2、 USB1.1:12Mbps(1.5MB/s)全速(Full-Speed)500mA
3、USB2.0:480Mbps(60MB/s)高速(High-Speed)500mA
4、 USB3.0:5Gbps(640MB/s)超速(Super-Speed)900mA
4、 USB常见驱动移植方式--先介绍实际驱动的移植,再介绍理论知识 •
1 内核自带已经配置对应驱动--USB-HUB--熟练掌握 •
2 内核自带但是没有配置--pl2303--熟练掌握 •
3 内核没有驱动--ch34x(找驱动)--熟练掌握 •
4 内核没有驱动+应用层需要移植对应软件--3G/4G和USB-WIFI--熟练掌握
5、USB转串口
1、嵌入式的外围通常需要很多设备,但是串口数量有限,因此可以通过扩展USB接口,来连接设备;因此解决了,串口不够用的情况;
2、USB转串口常使用的芯片:PL2303、CP210X和CH34X
PL2303和CP210X几乎所有内核都自带驱动 ,那么将驱动编辑进去就可以正常使用;
CH34X的驱动部分内核自带,内核没有带,就需要寻找驱动,然后再做编译;
3、在make menuconfig中配置驱动:
-> Device Drivers – -> USB support (USB_SUPPORT [=y]) – -> USB Serial Converter support (USB_SERIAL [=y])
USB接口插入模块,观察打印信息
重新编译内核,烧写镜像,USB接口插入设备就会打印信息,查看 会生成新的设备节点/dev/ttyUSB*
6、内核中不带有驱动的设备:CH34x
1、准备工作: 找到CH34X的Linux内核驱动源码 、 编译器(和内核编译器一致)、源码(通用) 、Makefile(指向编译过的内核目录)
2、加载驱动:动态加载、测试
3、USB设备没有驱动的时候,连接上设备会打印信息:idVentor厂商id、idProduct产品id;
4、编译驱动可能出现的问题:
1、驱动直接支持设备;
2、 驱动需要添加idVendor和idProduct;
3、驱动需要添加idVendor和idProduct,还要打补丁或者驱动中增加额外代码