您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 天祥ARM视频第10讲
主讲:冯坤出品:天祥电子网址:www.txmcu.comwww.tx-power.com学ARM和学单片机一样简单学ARM和学单片机一样简单第十讲:USB驱动编程学ARM和学单片机一样简单Linux下USB系统文件节点:同其他外设一样,上层应用软件对连接在系统地USB设备访问是通过文件系统的形式进行的。每个连接到系统总线上的USB设备可以同时对应有一个或者多个驱动程序。即一个USB设备可以在Linux系统上形成一个或多个设备节点,以供应用程序使用。在Linux系统上,每个设备节点都有其相关的主设备号和次设备号。USB主机驱动结构:LinuxUSB主机驱动由三部分组成:1)USB主机控制器驱动(HCD):是USB主机驱动程序中直接与硬件交互的软件模块,其主要功能有:主机控制器硬件初始化;为USBD层提供相应的接口函数;提供根HUB(ROOTHUB)设备配置、控制功能;完成4种类型的数据传输等。2)USB驱动(USBD):是整个USB主机驱动的核心,其主要实现的功能有:USB总线管理、USB总线设备、USB总线带宽管理、USB的4种类型数据传输、USBHUB驱动、为USB设备类驱动提供相关接口、提供应用程序访问的USB系统的文件接口等。学ARM和学单片机一样简单3)USB设备类驱动:是最终与应用程序交互的软件模块,其主要实现的功有:访问特定的USB设备、为应用程序提供访问接口等。应用程序首先通过文件系统(POSIX)接口来访问相应的USB设备类驱动程序和USBD;USB设备类驱动程序则通过USBD提供的相关接口将数据请求包传递给USBD;USBD通过HCD提供的接口,进一步将数据包传递给HCD;HCD最终将数据发送到USB总线上。Linux定义了通用的数据结构URB用来在USB设备类驱动和USBD,USBD和HCD间进行数据传输。统一的URB(UniversalRequestBlock)结构为usb主机驱动程序的开发带来了很大方便。USB时序:数据传输时序:在USB总线上,所有的数据传输都是由USBHOST发起的。每个USB设备通过地址过滤出自己要接受的数据包,并根据数据包请求的类型与USBHOST进行数据传输。由于数据传输的时序和总线带宽问题,当应用程序通过设备类提供一个URB时,该数据包并不能立即被送到USB总线上,而只能在USB总线上有足够带宽的情况下,该数据请求才会被传输。因而,HCD层为不同类型的数据传输维护了相应的数据链,当数据链上的数据包传输结束后,HCD通过调用与该数据包相关联的回调函数来通知设备类驱动程序。学ARM和学单片机一样简单CH375B的linux主控制器驱动CH375B的HCD对Linux的USB协议栈进行补充,加入对CH375B主设备控制器的支持。CH375B的HCD可以分为以下功能模块:◎对虚拟根hub的支持;◎USB请求队列◎USB请求安排表◎中断处理◎USB请求转化为USB事务和包◎USB包的发送和接收HCD支持中断,控制,和批量端点,不支持同步的端点。HCD与LinuxUSB内核接口通过一系列的API函数接口。学ARM和学单片机一样简单设备连接和断开学ARM和学单片机一样简单学ARM和学单片机一样简单2.设备断开学ARM和学单片机一样简单学ARM和学单片机一样简单学ARM和学单片机一样简单structusb_bus*usb_alloc_bus(structusb_operations*op)voidusb_free_bus(structusb_bus*bus)voidusb_register_bus(structusb_bus*bus)voidusb_deregister_bus(structusb_bus*bus)学ARM和学单片机一样简单学ARM和学单片机一样简单学ARM和学单片机一样简单学ARM和学单片机一样简单学ARM和学单片机一样简单
本文标题:天祥ARM视频第10讲
链接地址:https://www.777doc.com/doc-28832 .html