当前位置:首页 > 嵌入式 > 嵌入式硬件

usb作为一种串行通信总线,在嵌入式系统与pc机通信中有着广泛的应用。ill=j=usb总线是主从式结构,通常采用主从式通信方式。这种方式的缺点在于从设备只能被动响应来自主设备的请求,不能主动发起请求,因而在交互性上受到了限制。但随着嵌入式系统技术的发展,对交互性操作要求越来越迫切,而采用usb双向通信可以很好地解决上述问题。本文介绍一种基于s1c33l11芯片利用嵌入式操作系统的同步机制通过对循环队列及自定义控制包的操作来实现双向通信的方法。

1嵌入式操作系统中usb双向通信系统整体层次结构

嵌入式操作系统中usb双向通信系统整体层次结构如图1所示。
3 usb双向通信的设计与实现

本文usb双向通信在基本传输方式上采用usb块传输。他由usb初始化、usb中断处理、控制传输和块传输几部分组成。在实现双向通信上,具体通信机制是:嵌入式应用程序通过读写循环队列和信号量状态与usb硬件模块中的out和in fifo相互通信,而usb下位机与上位机(pc)的读写通信则通过上位机对控制包的读写来实现,最后通过循环队列、信号量、控制包3者结合达到usb双向通信的目的。

3.1 usb双向通信固件程序的设计与实现

(1)循环队列

采用in传输一个循环队列,out传输一个循环队列(以下简称队列),每队列动态分配32 kb。out队列做为out传输时的二级缓冲,即out输时fl~fifo的数据必须先放人out队列才能由嵌入式操作系统读写;in队列做为in传输时的二级缓冲,即in传输时的fifo数据必须来自in队列;嵌入式操作系统只对二级缓冲进行读写,操作系统对队列的管理是采用信号量通知机制来实现。

(2)控制包

为实现双向通信,规定一种控制包格式,读控制包是在usb协议之外自定义的。控制包固定为5字节。从左到右第一字节为状态字,剩下4字节传送要收发的数据字节数。当控制包由上位机发出时,状态字规定有3种:0x4f:上位机请求out传输,0x49:上位机请求in传输,0x52:上位机请求读取下位机状态;当上位机收到控制包时,状态字规定有5种:0x00:usb空闲态,0x01:下位机out循环队列满(i~pout超时),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函数应向本队列中写入数据了,然后复位自身信号量,接着调用等待信号量的函数,直到信号量到时才接着读取。若超时,则向嵌入式操作系统发出超时通知,同时通过向控制包中写入超时状态(ox01)来向上位机(pc)发出超时信号。

写函数:void writeusb(unsigned char*writebuffer,dword size)函数:功能:嵌入式系统应用程序通过usb接口向上位机(pc)发送数据。
参数说明:unsigned char*writebuffer存放数据的指针,dword size为要写入的数据的尺寸(单位:b)。

实现过程:首先判断循环队列是否满,不为满则判断自身信号量是否可用,若可用,则向队列中写入一字节,每写入一字节后向usb任务中的bulkindataset(直接写in的f.ifo函数)函数发出一个信号量通知此函数此时可以从in循环队列中读取数据;然后接着重新判断依次逐字节向in循环队列写人数据,直到写完要求数据大小的数据为止。当循环队列满时,先发一个信号量通知bulkindataset函数应从队列中取走数据,再复位自身信号量,接着调用等待信号量的函数,直到信号量到时才接着写入,若超时,则向嵌入式操作系统发出超时通知,同时通过向控制包中写入超时状态(0x02)来(pc)发出超时信号。

(4)usb块传输函数

usb块传输函数是直接和usb硬件打交道的函数,他们直接读取in和out传输通道的fifo。void bulkindataset(void):其功能是in传输过程,即从in循环队列中读取数据并向in fifo中写入数据,再对嵌入式操作系统信号量做相应处理。

void bulkoutdataget(void)其功能是out传输过程,即从out fifo中读出数据并向out循环队列中写人数据,再对嵌入式操作系统信号量做相应处理。

(5)嵌入式操作系统usb任务调用函数void systemlnit(void):mcu初始化(微处理器各控制寄存器和状态初始化过程)
void usbinit(void):usb初始化(包括对循环队

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭