USB设备收发数据实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机学院综合性实验实验报告课程名称嵌入式系统基础实验学期至学年第1学期学生所在学院部计算机学院年级专业班级学生姓名学号任课教师实验成绩计算机学院制华北科技学院计算机学院综合性实验报告第1页《嵌入式系统基础》课程综合性实验报告开课实验室:组成原理实验室2017年11月18日实验题目USB设备收发数据实验一、实验目的1、了解USB工作的基本组成原理;2、深入理解固件程序的编写;二、设备与环境1、EL-ARM-860教学实验箱,PentiumⅡ以上的PC机,仿真调试电缆,USB扁平线缆、扁平方头电缆、串口直连电缆。2、PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。三、实验内容1、实验内容在PC上运行一个应用程序,通过USB总线发送数据,并接受实验箱送回的数据。2、实验原理USB(UniversalSerialBus)即通用串行总线,是现代非常流行的一种快递、双向、廉价、可以进行熱插拔的接口,在现代的每一台PC机上都可以找到一对USB接口。在遵循USB1.1规范的基础上,USB接口最高传输速度可达12Mb/s,而在最新的USB2.0规范下,更可以达到480Mb/s,同时它可以连接127个USB设备,而且连接的方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同PC机的USB接口相连。此外,它还可以从系统中直接汲取电流,无需单独的供电系统,USB的这些特点使它获得了广泛的应用。在设计开发一个USB外设的时候,主要需要编写三部分的程序:①固件程序②USB驱动程序③客户应用程序固件是FIREWARE的对应中文词,它实际上是程序文件,其编写语言可以采用C语言或是汇编语言.它的操作方式与硬件联系紧密,包括USB设备的连接USB协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,需要编写人员对端口、中断和华北科技学院计算机学院综合性实验报告第2页硬件结构非常熟悉。固件程序一般放入MPU中,当把设备连接到主机上(USB连接线插入插孔)时,上位机可以发现新设备,然后建立连接。因此。编写固件程序的一个最主要的目的就时让Windows可以检测和识别设备。USB的驱动程序和客户的应用程序属于中、上层程序。实验箱上的USB驱动器采用的是PDIUSBD12。USB固件程序由三部分组成:①初始化S3C2410相关接口电路(包括PDIUSBD12);②主循环部分,其任务是可以中断的;③中断服务程序,其任务是对时间敏感的,必须马上执行。根据USB协议,任何传输都是由主机(Host)开始的。S3C2410作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给S3C2410发中断。S3C2410进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。在USB程序中,要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。S3C2410与PDIUSBD12的通信主要是靠S3C2410给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。S3C2410先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。本实验随机带的上层应用程序usbhid.exe的基本的设计原理是在USB设备初始化完之后,PC通过USB总线给设备写数据到数据端口,设备收到数据后,把数据放到数据输出端口,供PC读取。而PC端通过上层程序的Once或Continuous按钮,读一次或连续读USB设备的端口,从而把数据端口的数据读出。3、实验步骤(1)本实验使用实验教学系统的CPU板,USB单元、CPU板上的串口。在进行本实验时,音频的左右声道开关、A/D通道选择开关、触摸屏中断选择开关、LCD电源开关等均应处在关闭状态。(2)在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。以及串口间连接公/母接头串口线。(3)打开超级终端,配置串口的属性(如COM1),配置波特率为115200,校验位无,数据位为8,停止位为1,数据控制流为无,如图1;检查连接是否可靠,可靠后,接入电源线,系统上电,同时按住“空格”键,进入VIVI状态。华北科技学院计算机学院综合性实验报告第3页图1(4)打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验十五\D12.mcp项目文件,进行编译。(5)编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验十五\D12_Data\Debug中的映象文件程序映像D12.axf。显示图2图2(6)在ADS调试环境下全速运行映象文件。使用USB电缆线,,扁头接PC机端,方头插入实验箱底板的USB单元的接口处。观察D3指示灯的变化,同时,若是第一华北科技学院计算机学院综合性实验报告第4页次实验,则在PC机上会出现自动安装USB设备的过程,安装上后,D3灯应该不停的闪烁。同时,如图3在控制面板/系统/硬件/设备管理器栏里自动添加了一个名为人体学输入设备的USB设备。图3(7)此时,打开随箱提供的/实验软件syrj/tools/目录下的上层应用程序usbhidio.exe文件,如图2-15-2,在Bytestosend栏中选择要发送的数据,之后,点击一下WriteReport按钮,在SendandReceiveData栏中选择Once或Continuous,Once是发一次收一次,而Continuous是连续发和连续收,接收到的数据在BytesReceive栏中显示,在连续发的过程中也可以更改要发送的数据,而接收数据实时更换。图4华北科技学院计算机学院综合性实验报告第5页(8)关闭程序usbhidio.exe,关闭ADS调式环境,拔出USB电缆,关闭电源。4、关键代码#defineSETDATA*(volatileunsignedchar*)0x200000f8//设定数据发送地址处#defineSETADDR*(volatileunsignedchar*)0x200000f9//设定命令发送地址处voidMLsup_StallEP0(void){//GiveaneedleholeforSetupOverwrittenaswellasISRSETADDR=0x40;//0端点停止(用于发送Stall包)SETDATA=0x01;SETADDR=0x41;//1端点停止(用于发送Stall包)SETDATA=0x01;SETADDR=0xF1;//应答SETUP包,使能(清OUT缓冲区、使能IN缓冲区)命令}voidChap9_GetStatus(void){XmtBuff.b[1]=0x00;switch(XmtBuff.b[0]){case0x80://返回设备状态//发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。XmtBuff.b[0]=0x03;break;case0x81://返回接口状态//发送两个字节数据:第一字节为0;第二字节为0。//XmtBuff.b[5]为接口号XmtBuff.b[0]=0x00;华北科技学院计算机学院综合性实验报告第6页break;case0x82://返回端点状态//发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。//XmtBuff.b[5]D7为方向,D3~0为端点号XmtBuff.b[0]=0x00;break;}XmtBuff.wrLength=2;XmtBuff.p=XmtBuff.b;rx_0();}voidrx_0(){INT8tmp;if(XmtBuff.pNumXmtBuff.wrLength){XmtBuff.b[6]=XmtBuff.wrLength;}else{XmtBuff.b[6]=XmtBuff.pNum;bIsOrig=0;}tmp=XmtBuff.in;SETADDR=tmp;//选择IN端点(指针指向0位置)SETADDR=0xF0;//写缓冲区SETDATA=0x00;tmp=XmtBuff.b[6];华北科技学院计算机学院综合性实验报告第7页SETDATA=tmp;for(XmtBuff.b[7]=0;XmtBuff.b[7]XmtBuff.b[6];XmtBuff.b[7]++){tmp=*(XmtBuff.p++);SETDATA=tmp;}XmtBuff.wrLength-=XmtBuff.b[6];if(XmtBuff.wrLength=0)bIsOrig=1;SETADDR=0xFA;//设置IN缓冲区有效(满标志)tmp=XmtBuff.in;SETADDR=tmp|0x40;tmp=SETDATA;}voidtx_0(){inti;SETADDR=0x00;SETADDR=0xF0;XmtBuff.b[0]=SETDATA;XmtBuff.b[1]=SETDATA;for(i=0;i8;i++){XmtBuff.b[i]=SETDATA;}SETADDR=0xF1;//应答SETUP包,使能(清OUT缓冲区、使能IN缓冲区)命令SETADDR=0xF2;//清OUT缓冲区SETADDR=0x01;//选择端点1(指针指向0位置)华北科技学院计算机学院综合性实验报告第8页SETADDR=0xF1;//应答SETUP包,使能(清OUT缓冲区、使能IN缓冲区)命令if(XmtBuff.b[0]&0x20)//厂商请求跳转表{(*NonStandardDeviceRequest[XmtBuff.b[1]])();return;}else{if(XmtBuff.b[1]=0x0B)//标准请求跳转表{(*StandardDeviceRequest[XmtBuff.b[1]])();return;}}}voidtx_1(){inti;SETADDR=XmtBuff.out;//选择端点0(指针指向0位置)SETADDR=0xF0;//读标准控制码XmtBuff.b[0]=SETDATA;XmtBuff.b[1]=SETDATA;for(i=0;i8;i++){XmtBuff.b[i]=SETDATA;}SETADDR=0xF2;//清OUT缓冲区}华北科技学院计算机学院综合性实验报告第9页voidread_out(){INT8i;SETADDR=XmtBuff.out;//选择端点0(指针指向0位置)SETADDR=0xF0;//读标准控制码XmtBuff.b[0]=SETDATA;XmtBuff.b[1]=SETDATA;for(i=0;i8;i++){XmtBuff.b[i]=SETDATA;}SETADDR=0xF2;//清OUT缓冲区}华北科技学院计算机学院综合性实验报告第10页四、实验结果及分析在Bytestosend栏中选择要发送的数据,之后,点击一下WriteReport按钮,在SendandReceiveData栏中选择Continuous选项,接收到的数据在BytesReceive栏中显示如下图。本实验随机带的上层应用程序usbhid.exe的基本的设计原理是在USB设备初始化完之后,PC通过USB总线给设备写数据到数据端口,设备收到数据后,把数据放到数据输出端口,供PC读取。而PC端通过上层程序的Continuous按钮连续读USB设备的端口,从而把数据端口的数据读出。华北科技学院计算机学院综合性实验报告第11页教师评价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功