基于C8051f340单片机的USB HID类设备设计
倪陈强;陈贇
【摘 要】USB作为近年来计算机和嵌入式领域中的热点,推动了计算机外设的飞速发展,各种具有USB接口的嵌入式系统不断涌现.但是,USB协议复杂,若为每种设备都开发相应的设备驱动程序,开发周期势必加长.介绍一种USB外设的实现方案,该方案采用C8051F340单片机内置的USB接口,实现了基于HID类协议的USB设备的设计.采用该方案实现USB设备,无需专门开发设备驱动程序.该方案实用性强,可大大缩短开发周期.
【期刊名称】分组名称《现代电子技术》
【年(卷),期】2007(030)018
【总页数】3页(P64-66)
【关键词】USB;C8051F 单片机;HID;API
【作 者】倪陈强;陈贇
文件名提取【作者单位】西安科技大学,机械工程学院,陕西,西安,710054;西安科技大学,机械工程学院,陕西,西安,710054
【正文语种】中 文
【中图分类】TP33
基于传统I/O模式的外设必须占用PC主机的中断请求、I/O地址等系统资源,而这些有限的主机资源无法满足众多外设连接的需要。USB接口的出现,解决了日益增加的PC外设与有限的主板插槽和端口数量之间的矛盾。但是,USB设备协议比较复杂,驱动程序开发比较费时。本文介绍一种利用C8051F340单片机和USB HID类设备驱动程序进行USB设备开发的方法。
1 C8051F340单片机简介
系统单片机采用C8051F340,此单片机具有流水线的指令结构;70%指令的执行时间为1或2个系统时钟,48 MHz的时钟频率,指令执行速度可达48 MIPS。其内置USB接口完全兼容USB 2.0,支持全速(12 MBPS)和低速(1.5 MBPS)两种运行速度,8个可灵活配置的端
点,专用的1 kB的USB缓冲存储器,集成的收发器,无需外部电阻,可方便实现与计算机的通信。片内稳压器支持USB总线供电;片内稳压器旁路支持USB自供电。
2 单片机的USB接口设计
C8051F340单片机内部集成了USB收发器,无需外部电阻,可以方便地与USB接口连接。USB接口与单片机的连接如图1所示。C8051F340可以被配置为USB固件自身供电,也可以配置为USB总线供电。将J3的VBUS与REGIN短接起来,被配置为USB总线供电;将J3的VDD与REGIN短接,被配置为USB固件自身供电,并且片内稳压器被禁止;将J4的REGIN与5 V网络短接,被配置为USB固件自身供电,但片内稳压器被允许。
图1 8051F340单片机的USB的接口
3 USB HID设备类协议
为简化USB设备的开发过程,USB提出了设备类的概念。HID设备类即人机接口设备,如键盘、鼠标等。HID设备既可以是低速设备也可以是全速设备,具有以下的功能特点:适用于传输少量或中量的数据;传输的数据具有突发性;传输的最大速率有限制;无固定的
传输率。
3.1 HID的数据传输方式
USB规范规定了4种数据传输方式:控制传输、中断传输、同步传输和批量传输。控制传输主要用于主机与设备间关于配置、状态和控制信息的传输,任何USB设备都必须支持控制传输。中断传输用于数据量较小、小定时传送、允许一定延迟、服务周期受限的设备;同步传输用于大数据量、实时性高、允许一定差错的设备;批量传输用于大数据量、可靠性高、实时性不很高的设备。根据HID规范,所有HID类设备与主机间的通信采用控制传输和中断传输2种方式。HID类设备与主机的传输管道如图2所示。
图2 HID的数据传输方式
3.2 设备描述符结构
HID设备类除支持设备(Device)描述符、配置(Configuration)描述符、接口(Interface)描述符、端点(Endpoint)描述符和字符串(String)描述符等标准描述符外,还自行定义了3种类描述符,分别为HID描述符(主要用于识别HID设备所包含的其他类描述符)、报告(Report)描
述符(提供HID设备和主机间交换数据的格式)和物理(Physical)描述符。一个HID设备只能支持一个HID描述符;可以支持一个或多个报告描述符;物理描述符是可选的,大多数HID设备不需要使用他。描述符包含USB设备的各种信息,一般以数据表的形式固化在程序存贮器中。图3是HID类设备的设备描述符结构。
图3 HID的描述符结构
3.3 设备请求
一个完善的USB设备必须能够正确地响应主机针对该设备可能发出的所有设备请求。设备请求也可以分成标准设备请求和类特殊设备请求。标准设备请求由USB规范规定,类特殊设备请求由类规范规定。标准设备请求有Get Status(00H),Clear Feature(01H),Set Feature(03H),Set Address(05H),Get Description(06H),Set Description(07H),Get Configuration(08H),Set Configuration(09H),Get Interface(0AH),Set Interface(0BH)和Synch Frame(0CH)。HID类设备特殊的设备请求有Get Report、Set Report、Get Idle、Set Idle、Get Protocol和Set Protocol。Get Report和Set Report的作用是通过控制管道接收和发送数据报告。草莓怎么保存会时间长一点
4 固件程序设计
USB设备固件程序设计的核心在于对主机的请求做出响应。主机的请求分为2类:控制传输的请求和数据传输的请求。软件开发的主要工作是编写USB的中断服务程序,其功能是处理USB发送、接收的不同信息,从端点0获得主机的控制信息,或是向端点0发送设备的状态信息,以及向端点发送的数据等。
中断服务程序的任务是根据不同的中断请求,转入相应的处理程序。整个中断处理过程可以分为3个步骤:
(1) 通过访问USB芯片的IN1INT,OUT1INT,CMINT寄存器,判断发生的中断请求;
(2) 根据不同的请求以及其他的相关信息,转入相应的协议处理过程;
(3) 根据协议处理的结果,完成相应的通信任务。
根据设备类型的不同,主机发送的令牌种类和数量都会不同。HID类设备在响应主机命令时,除了处理普通的USB命令,还要响应HID类设备的一些命令,中断服务程序根据不同的请求来完成相应的动作。
5 应用程序设计
在Windows 98及其以后的版本中都提供了完整的HID类驱动程序以及相应的API函数,因此开发HID的应用程序主要通过调用API函数实现。Windows提供的HID类驱动程序(Hidclass.sys)向下与USB底层驱动程序通信,向上对HID子类的所有上层驱动程序提供支持,还有用户层的Hid.dll,他的作用就像Hidclass.sys在内核的作用一样,提供HID设备的通用命令支持。用户层的应用程序则一般直接调用Hid.dll提供的API函数。成都展览展示
护士述职报告范文这里介绍用户模式的HID客户程序的设计过程。他主要包括4个方面的的工作:
(1) 查所有HID设备;
(2) 确定哪一个是用户需要的HID设备,并连接该设备;
(3) 获得HID设备的信息;
(4) 根据用户需要,读取HID输入Report或者写HID输出Report。
设备的路径获取要通过调用系统API函数来获取,采用如下步骤:
GUID HidGuiD;
HidD_GetHidGuid(&HidGuid);
风景名胜区//根据GUID取得设备信急
hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,0,DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);//枚举设备类的所有接口
SetupDiEnumDeviceInterfaces(DeviceInfoSet,0,&HidGuid,MemberIndex,
&deviceInfoData);//获取与设备相关的结构的接口信息
SetupDiGetDeviceInterfaceDetail(DeviceInfoSet,&deviceInfoData,DeviceInterfaceDetailData,0,&requiredLength,0);
//获取接口的详细信急
可以从DeviceInterfaceDetailData中获得CreateFile所需的设备路径,通过调用CreateFile获得设备的句柄。程序可以通过文件操作函数完成对设备的读写。也可以利用HID类的API
函数,如HidD_GetAttributes、HidD_SetFeature、HidD_SetOutputReport、HidD_GetInputReport、HidD_GetPreparsedData等完成与设备的通信。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论