嵌入式操作系统中USB双向通信的设计与实现_第1页
嵌入式操作系统中USB双向通信的设计与实现_第2页
嵌入式操作系统中USB双向通信的设计与实现_第3页
嵌入式操作系统中USB双向通信的设计与实现_第4页
嵌入式操作系统中USB双向通信的设计与实现_第5页
全文预览已结束

下载本文档

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

文档简介

1、嵌入式操作系统中USB双向通信的设计与实现    USB作为一种串行通信总线,采用主从式通信方式,从设备只能被动响应来自主设备的请求,不能主动发起请求。随着嵌入式系统技术的发展,对交互性操作要求越来越迫切,而采用USB双向通信可以很好地解决上述问题。本文介绍一种基于S1C33L11芯片利用嵌入式操作系统的同步机制通过对循环队列及自定义控制包的操作来实现双向通信的方法。1嵌入式操作系统中USB双向通信系统整体层次结构嵌入式操作系统中USB双向通信系统整体层次结构如图1所示。2硬件系统2.1S1C33L11及其USB BLOCK简介S1C33L11是EPSO

2、N公司的32位高速,低功耗,低电压MCU。他是以C33 STD 32位RISC CPU为核心,功能强大,除一般外围设备外有LCD控制器,Camera接口,JPEG编码,USB1.1功能控制器,MAC(SPI模式)接口,SmartMedia接口,还包括3个振荡电路和2个锁相环(PLL),内置16kB RAM ,无ROM。S1C33L11内建支持USB1.1协议的全速模式。支持控制、块、同步和中断4种传输方式,支持 4个通用通道(Epr(r=a,b,c,d)和一个控制通道(endpoint0),并为每个通道(endpoint)提供1 kB的FIFO。2.2S1C33L11DMT01开发板简介S1C

3、33L11DMT01开发板采用S1C33L11F00A1芯片为核心,外接2 MB RAM,32 MB FLASH,还带有STN TFT 双屏彩色LCD等,此硬件环境适用于各种嵌入式操作系统的运行及多媒体手机、PDA等产品的开发。?3USB双向通信的设计与实现本文USB双向通信在基本传输方式上采用USB块传输1。他由USB初始化、USB中断处理、控制传输和块传输几部分组成2。在实现双向通信上,具体通信机制是:嵌入式应用程序通过读写循环队列和信号量状态与USB 硬件模块中的OUT 和IN FIFO相互通信,而USB下位机与上位机(PC)的读写通信则通过上位机对控制包的读写来实现,最后通过循环队列、

4、信号量、控制包3者结合达到USB双向通信的目的。3.1USB双向通信固件程序的设计与实现(1)循环队列采用IN传输一个循环队列,OUT传输一个循环队列(以下简称队列),每队列动态分配32 kB。OUT队列做为OUT传输时的二级缓冲,即OUT传输时的FIFO的数据必须先放入OUT队列才能由嵌入式操作系统读写;IN队列做为IN传输时的二级缓冲,即IN传输时的FIFO数据必须来自IN队列;嵌入式操作系统只对二级缓冲进行读写,操作系统对队列的管理是采用信号量通知机制来实现。(2)控制包为实现双向通信,规定一种控制包格式,读控制包是在USB协议之外自定义的。控制包固定为5字节。从左到右第一字节为状态字,

5、剩下4字节传送要收发的数据字节数。当控制包由上位机发出时,状态字规定有3种:0x4F:上位机请求OUT传输,0x49:上位机请求IN传输,0x52:上位机请求读取下位机状态;当上位机收到控制包时,状态字规定有5种:0 x00:USB空闲态,0x01:下位机OUT循环队列满(即OUT超时),0x02:下位机IN循环队列空(即IN超时),0x04:OUT传送成功,0x08:IN传送成功。(3)嵌入式操作系统端应用程序读写USB过程读函数:void ReadUSB(unsigned char * ReadBuffer, DWORD size)函数:功能:嵌入式系统应用程序通过USB接口读取上位机(P

6、C)的数据。参数说明:unsigned char*ReadBuffer存放数据的指针,DWORD size为要读出的数据的尺寸(单位:B)。实现过程:首先判断循环队列是否为空,不为空则判断自身信号量是否可用,若可用,则从队列中读取一字节,每读一字节后向USB任务中的BulkOutGet函数(直接读取OUT的FIFO函数)发出一个信号量,通知BulkOutGet函数队列此时可以向OUT循环队列中写入数据,接着重新判断,依次逐字节从OUT循环队列中读取数据,直到读完要求数据大小为止。当循环队列为空时,首先发一个信号量,通知BulkOutGet函数应向本队列中写入数据了,然后复位自身信号量,接着调用

7、等待信号量的函数,直到信号量到时才接着读取。若超时,则向嵌入式操作系统发出超时通知,同时通过向控制包中写入超时状态(0x01)来向上位机(PC)发出超时信号。写函数:void WriteUSB(unsigned char*Write Buffer,DWORD size)函数:功能:嵌入式系统应用程序通过USB接口向上位机(PC)发送数据。参数说明:unsigned char * WriteBuffer 存放数据的指针,DWORD size为要写入的数据的尺寸(单位:B)。实现过程:首先判断循环队列是否满,不为满则判断自身信号量是否可用,若可用,则向队列中写入一字节,每写入一字节后向USB任务中

8、的BulkInDataSet(直接写IN的FIFO函数)函数发出一个信号量通知此函数此时可以从IN循环队列中读取数据;然后接着重新判断依次逐字节向IN循环队列写入数据,直到写完要求数据大小的数据为止。当循环队列满时,先发一个信号量通知BulkInDataSet函数应从队列中取走数据,再复位自身信号量,接着调用等待信号量的函数,直到信号量到时才接着写入,若超时,则向嵌入式操作系统发出超时通知,同时通过向控制包中写入超时状态(0x02)来向上位机(PC)发出超时信号。(4) USB块传输函数USB块传输函数是直接和USB硬件打交道的函数,他们直接读取IN和OUT传输通道的FIFO。voi d Bu

9、lkInDataSet(void):其功能是IN传输过程,即从IN循环队列中读取数据并向IN FIFO中写入数据,再对嵌入式操作系统信号量做相应处理。void BulkOutDataGet(void)其功能是OUT传输过程,即从OUT FIFO中读出数据并向OUT循环队列中写入数据,再对嵌入式操作系统信号量做相应处理。(5) 嵌入式操作系统USB 任务调用函数void SystemInit(void):MCU初始化(微处理器各控制寄存器和状态初始化过程)void USBInit(void):USB初始化(包括对循环队列分配内存等)void USBThread(void):USB运行体(USB工

10、作过程对USB中断进行处理主要包括USB块传输函 数、USB中断状态分析处理等)。void FreeUSB(void):关闭USB和释放由malloc函数分配的循环队列所占内存3.2上位机(PC)部分USB函数层(USBD及HCD)由Windows98提供,负责管理USB设备驱动程序与USB控制器之间的通信、加载及卸载USB驱动程序等。具体方法是通过DriverWorks软件生成上位机(PC)机端USB驱动程序模板3,根据下位机的情况处理相应的读写部分,最后通过封装基本API函数ReadFile,WriteFile来实现用户态应用程序与PC机USB驱动程序的隔离,使PC的应用层对USB的使用如

11、同对串口的使用一样方便,给用户态应 用程序提供有了3个接口函数:unsigned char Read(void *pReadBuffer,DWORD Size):从下位机中读取数据参数说明:void *pBuffer:存放读取数据的缓冲,DWORD Size:需读取数据的大小(字节数)返回值:0x10:驱动出错(指Windows USB 驱动程序出错)0x20:内存空间不足?0x30:请求的数据大小为0 B0x02:下位机发送软超时0x08:读取成功unsigned char Write(void *pWriteBuffer,DWORD Size):发送数据到下位机参数说明:void *pBu

12、ffer; 存放写入数据的缓冲,DWORD Size; 需写入数据的大小(字节数)。返回值:0x10:USB驱动出错(Windows USB 驱动程序出错)0x20:内存空间不足0x30:请求的数据大小为0 B0x01:下位机读取数据软超时0x04:发送成功void RequestUSB(void *pRequestBuffer,DWORD Size=5):读取下位机返回的操作状态。参数说明:void *pRequestBuffer:5 B控制包缓冲其中每次Read或Write函数的调用被分为若干次读/写发送。具体处理是: 设待读写的数据字节数为X B,当X=5B时,分割为X1=4 B和X2=1 B两次发送(由于自定义包是5 B,为了与自定义控制包区分开

温馨提示

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

评论

0/150

提交评论