USB设备收发数据实验_第1页
USB设备收发数据实验_第2页
USB设备收发数据实验_第3页
USB设备收发数据实验_第4页
USB设备收发数据实验_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上计算机学院综合性实验实 验 报 告 课程名称 嵌入式系统基础 实验学期 至 学年 第 1 学期学生所在学院部 计算机学院 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计算机学院制嵌入式系统基础课程综合性实验报告 开课实验室: 组成原理实验室 2017 年 11月18 日实验题目USB设备收发数据实验1、 实验目的1、了解USB工作的基本组成原理;2、深入理解固件程序的编写;二、设备与环境1、EL-ARM-860教学实验箱,Pentium以上的PC机,仿真调试电缆,USB扁平线缆、扁平方头电缆、串口直连电缆。2、PC操作系统WIN98或WIN2000或WINXP

2、,ADS1.2集成开发环境,仿真调试驱动程序。三、实验内容1、实验内容 在PC上运行一个应用程序,通过USB总线发送数据,并接受实验箱送回的数据。2、 实验原理USB(Universal Serial Bus)即通用串行总线,是现代非常流行的一种快递、双向、廉价、可以进行熱插拔的接口,在现代的每一台PC机上都可以找到一对USB接口。在遵循USB1.1规范的基础上,USB接口最高传输速度可达12 Mb/s,而在最新的USB2.0规范下,更可以达到480 Mb/s,同时它可以连接127个USB设备,而且连接的方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同P

3、C机的USB接口相连。此外,它还可以从系统中直接汲取电流,无需单独的供电系统,USB的这些特点使它获得了广泛的应用。在设计开发一个USB外设的时候,主要需要编写三部分的程序:固件程序USB驱动程序客户应用程序固件是FIREWARE的对应中文词,它实际上是程序文件,其编写语言可以采用C语言或是汇编语言.它的操作方式与硬件联系紧密,包括USB设备的连接USB协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,需要编写人员对端口、中断和硬件结构非常熟悉。固件程序一般放入MPU中,当把设备连接到主机上(USB连接线插入插孔)时,上位机可以发现新设备,然后建立连接。因此。编写固件程序的一个最主要的

4、目的就时让Windows可以检测和识别设备。USB的驱动程序和客户的应用程序属于中、上层程序。 实验箱上的USB驱动器采用的是PDIUSBD12。 USB固件程序由三部分组成:初始化S3C2410相关接口电路(包括PDIUSBD12);主循环部分,其任务是可以中断的;中断服务程序,其任务是对时间敏感的,必须马上执行。根据USB协议,任何传输都是由主机(Host)开始的。S3C2410作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给S3C2410发中断。S3C2410进入中断服务程序,首先读 PDIUSBD12的中断寄存器

5、,判断USB令牌包的类型,然后执行相应的操作。在USB程序中,要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。 S3C2410与PDIUSBD12的通信主要是靠S3C2410给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字 分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。S3C2410先给PDIUSBD12的命令地址发 命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。 本实验随机带的上层应用程序usbhid.exe的基

6、本的设计原理是在USB设备初始化完之后,PC通过USB总线给设备写数据到数据端口,设备收到数据后,把数据放到数据输出端口,供PC读取。而PC端通过上层程序的Once或Continuous按钮,读一次或连续读USB设备的端口,从而把数据端口的数据读出。 3、 实验步骤(1) 本实验使用实验教学系统的CPU板,USB单元、CPU板上的串口。在进行本实验时,音频的左右声道开关、A/D通道选择开关、触摸屏中断选择开关、LCD电源开关等均应处在关闭状态。 (2) 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。以及串口间连接公/母接头串口线。 (3) 打开超级终端,配置串口的属性(

7、如COM1),配置波特率为,校验位无,数据位为8,停止位为1,数据控制流为无,如图 1;检查连接是否可靠,可靠后,接入电源线,系统上电,同时按住“空格”键,进入VIVI状态。 图1(4) 打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验十五D12.mcp项目文件,进行编译。 (5) 编译通过后,进入ADS1.2调试界面,加载实验程序HARDWAREADS实验十五D12_DataDebug中的映象文件程序映像D12.axf。 显示图 2 图2(6) 在ADS调试环境下全速运行映象文件。使用USB电缆线,扁头接PC机端,方头插入实验箱底板的USB单元的接口处。观察D3指示灯的

8、变化,同时,若是第一次实验,则在PC机上会出现自动安装USB设备的过程,安装上后,D3灯应该不停的闪烁。同时,如图3 在控制面板/系统/硬件/设备管理器栏里自动添加了一个名为人体学输入设备的USB设备。图3(7) 此时,打开随箱提供的/实验软件syrj/tools/目录下的上层应用程序usbhidio.exe文件,如图2-15-2,在Bytes to send栏中选择要发送的数据,之后,点击一下Write Report按钮,在Send and Receive Data栏中选择Once或Continuous,Once是发一次收一次,而Continuous是连续发和连续收,接收到的数据在Bytes

9、 Receive 栏中显示,在连续发的过程中也可以更改要发送的数据,而接收数据实时更换。图4(8) 关闭程序usbhidio.exe,关闭ADS调式环境,拔出USB电缆,关闭电源。4、 关键代码 #define SETDATA *(volatile unsigned char*)0xf8 /设定数据发送地址处#define SETADDR *(volatile unsigned char*)0xf9 /设定命令发送地址处void MLsup_StallEP0 (void) / Give a needle hole for Setup Overwritten as well as ISR SET

10、ADDR = 0x40;/ 0 端点停止(用于发送Stall包) SETDATA = 0x01; SETADDR = 0x41;/ 1 端点停止(用于发送Stall包) SETDATA = 0x01; SETADDR = 0xF1;/ 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令void Chap9_GetStatus (void) XmtBuff.b1 = 0x00; switch (XmtBuff.b0) case 0x80:/返回设备状态 /发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。 XmtBuff.b0 = 0

11、x03; break; case 0x81:/返回接口状态 /发送两个字节数据:第一字节为0;第二字节为0。 /XmtBuff.b5 为接口号 XmtBuff.b0 = 0x00; break; case 0x82:/返回端点状态 /发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。 /XmtBuff.b5 D7为方向,D30为端点号 XmtBuff.b0 = 0x00; break; XmtBuff.wrLength = 2; XmtBuff.p = XmtBuff.b; rx_0 ();void rx_0 () INT8 tmp; if (XmtBuf

12、f.pNum XmtBuff.wrLength) XmtBuff.b6 = XmtBuff.wrLength; else XmtBuff.b6 = XmtBuff.pNum; bIsOrig = 0; tmp = XmtBuff.in; SETADDR = tmp;/ 选择 IN 端点(指针指向0位置) SETADDR = 0xF0;/ 写缓冲区 SETDATA = 0x00; tmp = XmtBuff.b6; SETDATA = tmp; for (XmtBuff.b7 = 0; XmtBuff.b7 XmtBuff.b6; XmtBuff.b7+) tmp = *(XmtBuff.p+)

13、; SETDATA = tmp; XmtBuff.wrLength -= XmtBuff.b6; if (XmtBuff.wrLength = 0) bIsOrig = 1; SETADDR = 0xFA;/ 设置 IN 缓冲区有效(满标志) tmp = XmtBuff.in; SETADDR = tmp | 0x40; tmp = SETDATA;void tx_0 () int i; SETADDR = 0x00; SETADDR = 0xF0; XmtBuff.b0 = SETDATA; XmtBuff.b1 = SETDATA; for (i = 0; i 8; i+) XmtBuff

14、.bi = SETDATA; SETADDR = 0xF1;/ 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令 SETADDR = 0xF2;/ 清 OUT 缓冲区 SETADDR = 0x01;/ 选择端点 1(指针指向0位置) SETADDR = 0xF1;/ 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令 if (XmtBuff.b0 & 0x20)/厂商请求跳转表 (*NonStandardDeviceRequestXmtBuff.b1) (); return; else if (XmtBuff.b1 = 0x0B)/标准请求跳转表 (*St

15、andardDeviceRequestXmtBuff.b1) (); return; void tx_1 () int i; SETADDR = XmtBuff.out;/ 选择端点0(指针指向0位置) SETADDR = 0xF0;/ 读标准控制码 XmtBuff.b0 = SETDATA; XmtBuff.b1 = SETDATA; for (i = 0; i 8; i+) XmtBuff.bi = SETDATA; SETADDR = 0xF2;/ 清 OUT 缓冲区void read_out () INT8 i; SETADDR = XmtBuff.out;/ 选择端点0(指针指向0位置) SETADDR = 0xF0;/ 读标准控制码 XmtBuff.b0 = SETDATA; XmtBuff.b1 = SETDATA; for (i = 0; i 8; i+) XmtBuff.bi = SETDATA; SETADDR = 0xF2;/ 清 OUT 缓冲区四、实验结果及分析在Bytes to send栏中选择要发送的数据,之后,点击一下Write Report按钮,在Send and Receive Data栏中选择Continuous选项,接收到的数据在Bytes Rece

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论