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

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初始化(包括对循环队

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

全新原生集成方案实现企业短信服务的简化、强化与规模化升级 马来西亚吉隆坡2025年9月11日 /美通社/ -- 全球云通信平台Infobip宣布扩展与微软Azure通信服务的集成合作,通过其先进的短信接口,助力企业与全...

关键字: 微软 通信 IP AZURE

当地时间 9 月 8 日,SpaceX 与 EchoStar 正式达成一项价值 170 亿美元的频谱交易,SpaceX 将收购 EchoStar 旗下 AWS-4 频段(2GHz 频段)及 H 频段的频谱许可证,此举引发...

关键字: SpaceX EchoStar 星链 通信

在现代工业和汽车领域,控制器局域网(CAN)总线作为一种可靠且高效的通信方式,广泛应用于各种电子设备之间的数据传输。在 CAN 总线系统中,有一个看似毫不起眼却至关重要的元件 ——120Ω 终端电阻。这个小小的电阻,对于...

关键字: 控制器局域网 总线 通信

8月14日消息,今天,国务院新闻办公室举行“高质量完成‘十四五’规划”系列主题新闻发布会,国家数据局介绍“十四五”时期数字中国建设发展成就。

关键字: 算力 通信

北京2025年8月8日 /美通社/ -- 8月7日,浪潮信息发布面向万亿参数大模型的超节点AI服务器"元脑SD200"。该产品基于浪潮信息创新研发的多主机低延迟内存语义通信架构,以开放系统设计向上扩展...

关键字: 模型 节点 SD 通信

在现代通信技术的复杂网络中,射频(RF)滤波器犹如一位幕后英雄,虽鲜少被大众提及,却发挥着举足轻重的作用。从我们日常使用的智能手机,到构建通信基础设施的基站,再到新兴的物联网设备,RF 滤波器无处不在,默默保障着信号的顺...

关键字: 射频 滤波器 通信

在当今数字化时代,5G 通信技术以前所未有的速度改变着我们的生活,从高速的数据传输到实时的物联网应用,5G 的影响力无处不在。然而,在这一系列令人瞩目的技术背后,有一个常常被忽视却至关重要的角色 —— 晶振。它如同幕后的...

关键字: 通信 数据传输 晶振

德国斯图加特 2025年7月2日 /美通社/ -- 国际关键通信协会The Critical Communications Association (以下简称TCCA)宣布...

关键字: 通信 TETRA TC 测试流程

北京 2025年7月3日 /美通社/ -- 近日,北京积算科技有限公司(以下简称"积算科技")正式推出GPU裸金属算力服务套件,帮助客户实现并行环境的分钟级部署与出厂级性能校准,在GPU裸金属算力上...

关键字: 金属 GPU 性能优化 操作系统

近日,欧洲统一专利法院曼海姆分庭更新的一则诉讼信息,引发了全球科技界震动——联发科子公司HFI Innovation起诉了华为旗下五家子公司侵犯其LTE专利EP2689624。这场诉讼标志着两家科技巨头持续两年的专利纠纷...

关键字: 通信
关闭