USB鼠标嵌入式驱动系统
朱娟光华长春大学
吉林省
E-mail:zhuj_guanghua@
https://www.wendangku.net/doc/1a5611480.html, 王帅中国科学院长春光
学精密机械与物理研究
所
吉林长春
张舒阳王津立李赵希
长春大学光华学院
吉林长春
摘要:该论文设计了一种USB鼠标基于AT89S52单片机的嵌入式驱动系统。这AT89S52控制USB的主控芯片,SL811HS实现控制USB鼠标的功能。硬件给出该系统的原理框图。软件介绍系统的实现原理和USB总线重新插入行动的装置检测、设备速度检测等。嵌入式USB驱动系统有重要的参考价值,USB主机系统的设计。
关键词——USB数目;SL811HS;AT89S52单片机
I.简介
USB设备因其便捷和高性价比特点,被广泛用于日常工作和生活中。例如,USB 磁盘,USB相机,USB鼠标,USB键盘,等等。单片机(SCM)有成熟的技术和高性价比,被广泛用于自动化领域中。但是单片机没有USB主机接口配置,从而导致直接控制USB外围设备有困难。如果我们在单片机系统中增加USB主机接口、通过接口控制USB从动装置设备,单片机系统的功能将大大扩展。该系统为单片机加上USB主机接口。使用常见的51单片机连接特殊解决USB接口芯片。这个解决方案具有良好的灵活性和简单的移植。它为低成本产品的开发提供了一个广阔的前景。系统选用Atmel公司的AT89S52单片机。USB的主控制芯片是芯片赛浦路斯的公司的SL811HS。SL811HS可以在任何一个主机或从动模型使用,它支持USB1.1的全速和低速数据传输。当在主机模式下工作时,就可以自动检测到嵌入SL811HS的行为。本论文介绍方法AT89S52控制SL811HS以完成USB控制的方法。例如,USB鼠标控制计划的情况。
II.系统硬件
系统的硬件如图一所示。AT89S52和SL811HS的电压分别为5V和3.3V。虽然电压不同,AT89S52和SL811HS的参数可以根据噪音容忍参数直接连接。
图1、总系统图
无需转换电压,当设计硬件时,需注意一下方面:
1、SL811HS的D引脚上拉电阻连接线与AT89S52单片机的P0引脚连接,应确保AT89S52对于SL811HS的读/写(R/W)控制。
2、用33欧的电阻在一个15K的下拉电阻在连接线上,连接AT89S52和SL811HS 的数据参数。
3、在这里,SL811HS用于主机模式下,所以控制存储器的参数必须设置为0。米每秒的必须设置为0。
4、晶体频率应为48赫兹
III.控制程序
A.SL811HS的读写控制
SL811HS的读写控制项目如下所示
图2、寻读功能图
图3、写函数
在图2和图3中,根据SL811HS 的读写时序,EZUSB 延时(1)代表延时一毫
秒。
B.初始化
当单片机控制SL811HS,首先,它会进行一些列初始化操作。初始化操作由SL811HS 芯片重置、USB 总线复位、插入检测装置、USB 数据传送速度检测装置等等组成。通过这些初始化操作,SL811HS 将建立一个基础的保护USB 接口作为从属装置的连接关系,这为接下来的数据传输做准备。重设是芯片状态的重设操作,包括了芯片内部存储器测试值的重设。该操作不需要读写内部寄存器,只需要输入一个效果产生脉冲到内部芯片。USB 总线复位是指让USB 数据可以输出到SE0状态,该状态保持超过10毫秒。当从属装置连接到USB 总线接受的重置信号,将为接下来的数据传输做准备。CtrlReg 的寄存器比特设置为3和4,并保持10毫秒以上,然后恢复至00.然后,内部芯片产生USB 总线复位信号。
在USB 协议的物理层,USB 设备是连接到USB 总线而不是检测总线电压。单片机也可以从电压处得到速度支持。在物理层电压处检测结果反映在SL811HS
的状
态寄存器数值上。单片机通过读出这些状态寄存器数值获得嵌入状态和装置速度。
https://www.wendangku.net/doc/1a5611480.html,B设备列举
主中心不断检测DATA+DATA-引脚中断两个信号线分别由15K电阻连接到地线。每个USB设备通过1.5K电阻连接在电源的D+引脚。当主机的尾端连接在一个USB装置上,USB装置的电阻将会使电压升高。所以主机中心意识到有USB装置嵌入。主机检测到一个新的USB装置,它会进行USB计算操作。Enumeration是一些USB设备连接到系统时从主机获得一个特殊的地址码所进行的操作。这地址码用于访问个别装置。当USB主机控制要查究某个装置属于哪类型的装置,它会绑定到项目的驱动装置上。在列举过程中,主机将发送一些基本命令给从属装置。设置地址,该命令会改变当前的设备地址。获取设备描述符号,该命令会获取该装置的信息,包括制造商、固件版本等等。
?设置地址,该命令会改变当前的设备地址。
?获取设备描述符号,该命令会获取该装置的信息,包括制造商、固件版本等等。
?获取配置描述符,将会恢复使用该端口。
?获取内部描述符,将会通过该装置的内部接口。
?获取字符串描述符,将得到制造商、产品名称的统一格式符号。
?设置配置
?设置内部
和一个USB装置连接到主机,上述的基本过程都是必须的,如果USB装置没有列举,这个设置将不能被操作系统使用。
D、传输的实现
传输由发送每个指令和以下数据传输而实现。根据USB1.1协议,传输事件通常由三个数据包组成。他们分别是指令包,数据包和数据包助手。指令包负责传输的类型,传输数据的长度和数据存储空间地址等等。指令包由USB主机和从属装置发出,USB从属装置会发出和USB主机指令一致的传输数据。如果传输成功,主机会发送握手信号给USB从属装置。所有类型的USB传输操作都通过SL811HS
内部存储器的读写而实现。
例如,获取装置描述符号的指令应包括5个存储器的读写。分别是EP0状态,EP0计算,EP0地址,EP0Xferlen和EP0控制。获取装置描述符号的指令如下所示:
表1、获取设备运行命令符号
每个
寄存器设计如下:
EP0Status =0xD0;//十六进制的D 赋予PID_SETUP,0端口等于0.EP0Counter =0x00;//USB 地址是十六进制的0.EP0Address =0x10;//数据的起始地址是十六进制的10也称为date0.
EP0XferLen =0x08;//8段数据长度。
EP0Control =0x07;//数据传送的方向是主动机到从动机.
设置了上述5个寄存器后,前面储存的数据“8006000100001200”将会用data00x10写成8位进制,建立过程完成。阅读EP0S 状态寄存器的数据,当牵手完成,SL811HS 以0x10为开始地址。储存设备描述符号。单片机用SL811HS 读取数据,从而获得完整数据。
IV.
鼠标的指令
如果USB鼠标和主机连接在一起,主机会发送以下指令。用一个
鼠标联合
在我们的系统中为例。A.
获取设备描述符
输入指令“8006000100001200”,然后系统会获得USB的描述信息。
数据是“120100020000000822340007058103049D 9F”,另一个数据是08,用十八进制。这对接下来的指令有用。
B.设置地址
输入指令“0005010000000000,系统接下来会建立一个地址为01,代表USB中心。
C.再次获得描述符号
这个地址对接下来的指令有帮助。用新地址“01”再次获得USB鼠标的描述符,描述数据从第一次到第九次,会有小的变化。使用的鼠标给出的数据是“12010002000000086D 040E C0101101020001”。
D.获得设备配置
输入指令“800600020000FF 00”,It is “09(长度是9),02(是设备
请求求求评估索引长度
80
06
00
01
00
00
12
00
配置描述符号)2200010100A03109(长度是9)04(04是接触面描述符)00(00是接触面数字)0001(端点数量)03(人工接口设备(HID))0102(协议代码)00 09(9长度是9)21(人工接口设备描述符)1001000122340007(长度是7)05(端点描述符)81(10000001:终端数字是001)03(中断传输)04(传送数据的最大值) 000A(时间间隔是10毫秒)”。
E.设置配置
输入指令0009010000000000,设置配置01。
F.获取界面
输入指令810A010*********,系统获取界面值00。
G.设置界面
输入指令810A010*********,设置界面。
这些操作后,USB鼠标设置完成,可以进行一般使用。如果进行一些操作,单片机会接收到对应的数据。下列数据时这个鼠标操作数据的一部分,每个数字都是一组鼠标的操作。
TABLE II.鼠标工作的数据章节
数据功效0100000000000000按击左部按钮
0200000000000000按击右部按钮
0400000000000000按击中间按钮
00010000向右边方向移动
00FF0000向左边方向移动
0000FF00向前移动
00000100向后移动
00010100向右后方向移动
0001FE00向右后方向移动
00FE0100向左后方向移动
00FF FE00向左后方向移动
总结
当单片机控制SL811HS,寄存器对于SL811HS的读写是最低的工作。为确保数据传
输,单片机会读写五个寄存器。USB列举是使用这个USB设备的第一步,接下来单片机系统可以喝USB设备进行沟通。
感谢书
我衷心感谢在完成本次论文期间所有给予我帮助的人,包括长春机械印刷有限公司。本文作者衷心感谢吉林教育研究部对于本次研究的资金支持。
参考文献
[1]赛赛普拉斯半导体公司,SL811HS嵌入式USB主机/从机控制器,数据表。
[2]周立功PDIUSB12USB《软件程序运用和驱动发展》北京航空航天大学出版社
2003(中文版)
[3]陈志荣李斌51《单片机控制》《USB主机根本设备》《电子设计运用》2003(中
文版)
[4]钱浩《USB设备列举过程和代码设计》《电脑知识和技术》2010(中文版)
[5]https://www.wendangku.net/doc/1a5611480.html,/developers/wusb/docs
[6]https://www.wendangku.net/doc/1a5611480.html,/view/dc3e56d376a20029bd642dc5.html
译文原文出处:重庆大学数字图书馆IEEE/IET Electronic Library(网址
嵌入式点亮一个LED灯的程序
飞凌OK6410开发板(裸板)第一个点亮LED灯程序,主要的C程序,完整程序请下载附件。 #define rGPMCON (*(volatile unsigned *)(0x7F008820)) #define rGPMDAT (*(volatile unsigned *)(0x7F008824)) #define rGPMPUD (*(volatile unsigned *)(0x7F008828)) void msDelay(int time) { volatile unsigned int i,j; for(i = 0; i < 2000000; i++) for(j=0; j