目录

一、USB OTG

二、I.MX6ULL USB 接口简介

硬件原理图

1、USB HUB 原理图

2 、USB OTG 原理图

三、使能驱动

1、打开 HID 驱动

2、 使能 USB 键盘和鼠标驱动

3 、使能 Linux 内核中的 SCSI 协议

4、使能 U 盘驱动

四、测试u盘

五、 Linux 内核自带 USB OTG


USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、 USB 摄像
头等,我们在实际开发中也常常遇到 USB 接口的设备,来学习一下如何使能 Linux内核自带的 USB 驱动

一、USB OTG

USB 分为 HOST(主机)和从机(或 DEVICE),有些设备可能有时候需要做HOST,有时候又需要做 DEVICE,配两个 USB 口当然可以实现,但是太浪费资源了。如果一个 USB 接口既可以做 HOST 又可以做 DEVICE 那就太好了,使用起来就方便很多。为此, USBOTG 应运而生, OTG 是 On-The-Go 的缩写,支持 USB OTG 功能的 USB 接口既可以做 HOST,也可以做 DEVICE。Mini USB 插头有 5 根线,其中一条就是 ID 线。 ID 线的高低电平表示 USB 口工作在 HOST 还是 DEVICE 模式:
ID=1: OTG 设备工作在从机模式。
ID=0: OTG 设备工作在主机模式。

二、I.MX6ULL USB 接口简介

I.MX6ULL 内部集成了两个独立的 USB 控制器,这两个 USB 控制器都支持 OTG 功能。
I.MX6ULL 内部 USB 控制器特性如下:
①、有两个 USB2.0 控制器内核分别为 Core0 和 Core1,这两个 Core 分别连接到 OTG1 和OTG2。
②、两个 USB2.0 控制器都支持 HS、 FS 和 LS 模式,不管是主机还是从机模式都支持HS/FS/LS,硬件支持 OTG 信号、会话请求协议和主机协商协议,支持 8 个双向端点。
③、支持低功耗模式,本地或远端可以唤醒。
④、每个控制器都有一个 DMA

每个 USB 控制器都有两个模式:正常模式(normal mode)和低功耗模式(low power mode)。
每个 USB OTG 控制器都可以运行在高速模式(HS 480Mbps)、全速模式(LS 12Mbps)和低速模式
(1.5Mbps)。正常模式下每个 OTG 控制器都可以工作在主机(HOST)或从机(DEVICE)模式下,每
个 USB 控制器都有其对应的接口。低功耗模式顾名思义就是为了节省功耗, USB2.0 协议中要
求,设备在上行端口检测到空闲状态以后就可以进入挂起状态。在从机(DEVICE)模式下,端口
停止活动 3ms 以后 OTG 控制器内核进入挂起状态。

硬件原理图

1、USB HUB 原理图

I.MX6ULL 的 USB OTG2 扩展成了 4 路 HOST 接口,其中一路供 4G 模块使用,因此就剩下了三个通用的 USB A 插座,U10 就是 USB HUB 芯片 GL850G, GL850G 是一款符合 USB2.0 标准的 USB HUB 芯片,支持一拖四扩展,可以将一路 USB 扩展为 4 路 USB HOST 接口

2 、USB OTG 原理图

开发板上还有一路 USB OTG 接口,使用 I.MX6ULL 的 USB OTG1 接口。此路 USB OTG 既可以作为主机(HOST),也可以作为从机(DEVICE),从而实现完整的 OTG 功能,左侧的为 Mini USB 插座,当 OTG 作为从机(DEVICE)的时候 USB 线接入此接口。右侧为 USB A 插座,当 OTG 作为主机的时候将 USB 设备插入到此接口中,另外开发板上集成了一个 USB HOST 接口

主机(HOST)模式: 主机模式下必须将 Mini USB 线拔出来,将 USB 设备连接到对应的USB HOST 接口上。 Mini USB 线拔出来以后 USB_OTG_VBUS 就没有电压了,此时 USB_OTG1_ID线就被 R31 这个 100K 电阻下拉到地,因此 USB_OTG1_ID 线的电压就为 0,当 ID 线为 0 的时候就表示 OTG 工作在主机模式。

从机(DEVICE)模式: USB_OTG_VBUS 是 Mini USB 的电源线,只有插入Mini USB 线以后 USB_OTG_VBUS 才有效(5V)。插入 Mini USB 线就表示开发板此时要做从机(此时不考虑接 OTG 线的情况), USB_OTG_VBUS 就是电脑供的 5V 电压,由于分压电阻 R111和 R31 的作用,此时 USB_OTG1_ID 的电压就是 4.5V 左右,很明显这一个高电平。当 ID 线为高的时候就表示 OTG 工作在从机模式

三、使能驱动

NXP 官方的 Linux 内核默认已经使能了 USB 键盘鼠标和  U 盘驱动

1、打开 HID 驱动

-> Device Drivers
      -> HID support

-> HID bus support (HID [=y])
                        -> <*> Generic HID driver

2、 使能 USB 键盘和鼠标驱动

-> Device Drivers
        -> HID support
                -> USB HID support
                        -> <*> USB HID transport layer

3 、使能 Linux 内核中的 SCSI 协议

-> Device Drivers
        -> SCSI device support
                -> <*> SCSI disk support

4、使能 U 盘驱动

-> Device Drivers
        -> USB support (USB_SUPPORT [=y])
                -> Support for Host-side USB (USB [=y])
                        -> <*> USB Mass Storage support

注意 U 盘要为 FAT32 格式的!NTFS 和 exFAT 由于版权问题所以在 Linux下支持的不完善,操作的话可能会有问题,比如只能读,不能写或者无法识别等

编译内核用新的zImage和设备树启动开发板

四、测试u盘

插上u盘在开发版就会打印下面信息

进入dev目录就能看到这个目录

/dev/sda 是整个 U盘, /dev/sda1 是 U 盘的第一个分区,我们一般使用 U 盘的时候都是只有一个分区。要想访问 U盘我们需要先对 U 盘进行挂载,理论上挂载到任意一个目录下都可以,这里我创建一个/mnt/usb_disk 目录,然后将 U 盘挂载到/mnt/usb_disk 目录下,命令如下

mkdir /mnt/usb_disk -p //创建目录
mount /dev/sda1 /mnt/usb_disk/ -t vfat -o iocharset=utf8 //挂载

-t 指定挂载所使用的文件系统类型,这里设置为 vfat,也就是 FAT 文件系统,“-o iocharset”设置硬盘编码格式为 utf8,否则的话 U 盘里面的中文会显示乱码

上图可以看到,挂载成功以后进入到/mnt/usb_disk 目录下能读能写

至此 U 盘就能正常读写操作了,直接对/mnt/usb_disk 目录进行操作就行了。如果要拔出 U盘要执行一个 sync 命令进行同步,然后在使用 unmount 进行 U 盘卸载,命令如下所示:

sync //同步
cd / //如果处于/mnt/usb_disk 目录先退出来,否则卸载的提示设备忙,导致卸载失败
umount /mnt/usb_disk //卸载

五、 Linux 内核自带 USB OTG

这里因为开发板为了在板子上集成 OTG 的主机和从机接口对 ID 线做了修改,需要修改 ID 引脚的电气属性

查阅原理图可以知道, USB OTG1 的 ID 引脚连接到了 I.MX6ULL 的 GPIO1_IO00 这个引
脚上, USB OTG 默认工作在主机(HOST)模式下,因此 ID 线应该是低电平。这里需要修改设备树中 GPIO1_IO00 这个引脚的电气属性,将其设置为默认下拉

MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058

就是将 GPIO1_IO00 复用为 OTG1 ID,并且设置电气属性为 0X13058,默认下拉,设备树修改好以后重新编译并用新的设备树启动系统,系统重启成功以后就可以正常使用 USB OTG1 接口, OTG 既可以做主机,也可以做从机,做主机的话测试,直接在开发板的 OTG HOST 接口上插入 USB 鼠标键盘、 U 盘等设备。

体验Linux USB 驱动相关推荐

  1. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  2. Linux USB驱动程序设计

    Linux USB驱动程序设计 1. USB发展史 USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯. USB是在1994年底 ...

  3. 【正点原子Linux连载】第六十七章 Linux USB驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  4. Linux USB 驱动开发实例(七)—— 基于USB 总线的无线网卡浅析

    回顾一下USB的相关知识 USB(Universal Serial Bus)总线又叫通用串行外部总线, 它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量的 ...

  5. 嵌入式Linux USB驱动开发之教你一步步编写USB驱动程序

    2019独角兽企业重金招聘Python工程师标准>>> 编写与一个USB设备驱动程序的方法和其他总线驱动方式类似,驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商和设备标 ...

  6. Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结

    http://blog.csdn.net/zqixiao_09/article/details/51057086 设备驱动程序是操作系统内核和机器硬件之间的接口,由一组函数和一些私有数据组成,是应用程 ...

  7. linux usb驱动

    0.usb协议     usb的版本:     硬件         usb 1.0     OHCI        微软                 硬件 > 软件         usb ...

  8. USB基础---Linux USB驱动层次

    在Linux系统中,提供主机侧和设备侧视角的USB驱动框架,从主机侧看到的USB主机控制器和设备驱动,以及从设备侧看到的设备控制器和Gadget驱动. Linux系统中USB驱动的整体视图 图1 (1 ...

  9. Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析

    回顾一下USB的相关知识   USB(Universal Serial Bus)总线又叫通用串行外部总线,它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量 ...

最新文章

  1. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式
  2. python下的橡皮线_python线性代数常用操作
  3. 安卓toast文字提示
  4. 浅谈BPM和SOA架构下的电子政务系统
  5. 【对比学习】koa.js、Gin与asp.net core——中间件
  6. 土木工程计算机仿真学科未来前景,同济大学土木工程学院土木工程计算机仿真2010级学历教育硕士--培养方案...
  7. boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
  8. paip.程序不报错自动退出的解决
  9. 固定资产管理员计算机应用,浅谈计算机在固定资产管理中应用.doc
  10. 银行卡Bin查询接口
  11. Java 映射(Map)和集合(Set) 用法总结
  12. Linux停服务器命令,使用linux的shutdown命令关闭服务器
  13. 阿拉德之怒手游超详细图文架设教程
  14. 中国石油大学(北京)-《 修井工程》第二阶段在线作业
  15. 根据父母身高预测儿子的身高
  16. 【译】SafetyNet:Google对Android的篡改检测 (SafetyNet: Google's tamper detection - Part 1 )
  17. SQL数据库质疑怎么解决呢?
  18. 你会爬虫吗,我来教你爬海关蜀黍
  19. oracle11g导入或导出dump文件
  20. 页面调用Adobe Reader自带的控件实现pdf打印

热门文章

  1. oracle_tpch导数据,TPCH数据导入postgresql教程
  2. python如何做文本相似性判断_文本相似度算法的整理和python实现
  3. WPF中显示GIF图片
  4. 2021-2027全球与中国金属粉末成型3D打印机市场现状及未来发展趋势
  5. Ansible(1) Centos7安装Ansible
  6. 在Ubantu虚拟机上编译OpenWrt系统
  7. 单例设计模式中三重检索
  8. Tui-x 资源管理
  9. Mybatis的一对多、多对一、多对多案例
  10. 九年级计算机课程教案,初三微机课教案