您的位置 首页 解答

根据S1C33L11芯片的嵌入式USB双向通信系统设计

基于S1C33L11芯片的嵌入式USB双向通信系统设计-USB作为一种串行通信总线,采用主从式通信方式,从设备只能被动响应来自主设备的请求,不能主动发起请求。随着嵌入式系统技术的发展,对交互性操作要求越来越迫切,而采用USB双向通信可以很好地解决上述问题。本文介绍一种基于S1C33L11芯片利用嵌入式操作系统的同步机制通过对循环队列及自定义控制包的操作来实现双向通信的方法。

USB作为一种串行通讯总线,选用主从式通讯办法,从设备只能被迫呼应来自主设备的恳求,不能自动建议恳求。跟着嵌入式体系技能的开展,对交互性操作要求越来越火急,而选用USB双向通讯能够很好地处理上述问题。本文介绍一种依据S1C33L11芯片运用嵌入式操作体系的同步机制经过对循环行列及自定义操控包的操作来完成双向通讯的办法。

1嵌入式操作体系中USB双向通讯体系全体层次结构

嵌入式操作体系中USB双向通讯体系全体层次结构如图1所示。

依据S1C33L11芯片的嵌入式USB双向通讯体系规划

2硬件体系

2.1S1C33L11及其USB BLOCK简介

S1C33L11是EPSON公司的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开发板简介

S1C33L11DMT01开发板选用S1C33L11F00A1芯片为中心,外接2 MB RAM,32 MB FLASH,还带有STN TFT 双屏五颜六色LCD等,此硬件环境适用于各种嵌入式操作体系的运转及多媒体手机、PDA等产品的开发。?

3USB双向通讯的规划与完成

本文USB双向通讯在根本传输办法上选用USB块传输[1]。他由USB初始化、USB中止处理、操控传输和块传输几部分组成[2]。在完成双向通讯上,详细通讯机制是:嵌入式应用程序经过读写循环行列和信号量状况与USB 硬件模块中的OUT 和IN FIFO彼此通讯,而USB下位机与上位机(PC)的读写通讯则经过上位机对操控包的读写来完成,最终经过循环行列、信号量、操控包3者结合到达USB双向通讯的意图。

3.1USB双向通讯固件程序的规划与完成

(1)循环行列

选用IN传输一个循环行列,OUT传输一个循环行列(以下简称行列),每行列动态分配32 kB。OUT行列做为OUT传输时的二级缓冲,即OUT传输时的FIFO的数据有必要先放入OUT行列才干由嵌入式操作体系读写;IN行列做为IN传输时的二级缓冲,即IN传输时的FIFO数据有必要来自IN行列;嵌入式操作体系只对二级缓冲进行读写,操作体系对行列的办理是选用信号量告诉机制来完成。

(2)操控包

为完成双向通讯,规则一种操控包格局,读操控包是在USB协议之外自定义的。

操控包固定为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接口读取上位机(PC)的数据。

参数阐明:unsigned char*ReadBuffer寄存数据的指针,DWORD size为要读出的数据的尺度(单位:B)。

完成进程:首要判别循环行列是否为空,不为空则判别本身信号量是否可用,若可用,则从行列中读取一字节,每读一字节后向USB使命中的BulkOutGet函数(直接读取OUT的FIFO函数)宣布一个信号量,告诉BulkOutGet函数行列此刻能够向OUT循环行列中写入数据,接着从头判别,顺次逐字节从OUT循环行列中读取数据,直到读完要求数据巨细停止。当循环行列为空时,首要发一个信号量,告诉BulkOutGet函数应向本行列中写入数据了,然后复位本身信号量,接着调用等候信号量的函数,直到信号量届时才接着读取。若超时,则向嵌入式操作体系宣布超时告诉,一起经过向操控包中写入超时状况(0x01)来向上位机(PC)宣布超时信号。

写函数:void WriteUSB(unsigned char*Write Buffer,DWORD size)函数:

功用:嵌入式体系应用程序经过USB接口向上位机(PC)发送数据。

参数阐明:unsigned char * WriteBuffer 寄存数据的指针,DWORD size为要写入的数据的尺度(单位:B)。

完成进程:首要判别循环行列是否满,不为满则判别本身信号量是否可用,若可用,则向行列中写入一字节,每写入一字节后向USB使命中的BulkInDataSet(直接写IN的FIFO函数)函数宣布一个信号量告诉此函数此刻能够从IN循环行列中读取数据;然后接着从头判别顺次逐字节向IN循环行列写入数据,直到写完要求数据巨细的数据停止。当循环行列满时,先发一个信号量告诉BulkInDataSet函数应从行列中取走数据,再复位本身信号量,接着调用等候信号量的函数,直到信号量届时才接着写入,若超时,则向嵌入式操作体系宣布超时告诉,一起经过向操控包中写入超时状况(0x02)来向上位机(PC)宣布超时信号。

(4) USB块传输函数

USB块传输函数是直接和USB硬件打交道的函数,他们直接读取IN和OUT传输通道的FIFO。voi d BulkInDataSet(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作业进程对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的运用如同对串口的运用相同便利,给用户态应 用程序供给有了3个接口函数:

unsigned char Read(void *pReadBuffer,DWORD Size):从下位机中读取数据

参数阐明:void *pBuffer:寄存读取数据的缓冲,DWORD Size:需读取数据的巨细(字节数)

回来值:

0x10:驱动犯错(指Windows USB 驱动程序犯错)

0x20:内存空间缺乏?

0x30:恳求的数据巨细为0 B

0x02:下位机发送软超时

0x08:读取成功

unsigned char Write(void *pWriteBuffer,DWORD Size):发送数据到下位机

参数阐明:void *pBuffer; 寄存写入数据的缓冲,DWORD Size; 需写入数据的巨细(字节数)。

回来值:

0x10:USB驱动犯错(Windows USB 驱动程序犯错)

0x20:内存空间缺乏

0x30:恳求的数据巨细为0 B

0x01:下位机读取数据软超时

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,为了与自定义操控包区分隔);当5 B16 kB时则切割以16kB为单位的数据进行发送,缺乏16 kB的部分再发送一次。每次读/写发送分3个阶段:发操控包,读/写数据,读操控包状况。

4结语

依据S1C33L11芯片在嵌入式操作体系基础上完成的USB双向通讯严厉遵从USB1.1协议,充分运用了S1C33L11芯片的内置功用和嵌入式操作体系的效果,具有交互效果强、嵌入式操作体系中设备无关性好的特色。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/98157.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部