历史上的今天
返回首页

历史上的今天

今天是:2025年04月23日(星期三)

正在发生

2021年04月23日 | 一种基于ARM和μC/OS-Ⅱ的USB主机设计方案

2021-04-23 来源:eepw

1 引 言


通常情况下,打印机、海量存储等设备是由普通PC机来驱动的,由于大量的测控、医疗等系统需要存储、打印数据,因此开发这类设备的嵌入式驱动是非常有实用价值的。目前,各种嵌入式设备基本上是通过软盘存储,并口打印的,而它们的存储容量、数据传输速度已大大落后当前各类嵌入式系统的需求。因此,开发基于USB接口的嵌入式海量存储设备和打印机驱动已成当务之急。


USB(Universal Serial Bus)是最近几年逐步在PC领域广为应用的新型串行接口技术,它通用性好、实时性强、传输方式多样、成本低、易于扩展和使用,这些优点使它受到许多硬件厂商的青睐,各种类型的USB设备产品大量涌入市场。USB通讯必须是主机和外设通讯,每次通讯都是由主机发起,外设只是被动地执行主机发过来的命令。而市场上所买到和使用的USB 移动设备, 都是USB 的外设(device) , 如USB 的移动硬盘、USB 接口的数码相机、打印机等。这些设备通常只能通过PC 来进行相互的文件和数据交换,没有了PC 机, 这些设备就无法进行数据交换。而实际上并非每个地方都拥有PC机或者适合使用PC机,因此业界和用户需求USB 主机的嵌入式化。也就是开发和设计嵌入式的USB 主机。


根据具体医疗仪器(酶标仪)的实际需要,我们在三星的ARM7处理器 S3C44B0X上移植了实时操作系统(RTOS)——µC/OS-II,并编写了基于USB主控制器芯片SL811的底层驱动。为了能将酶标仪所检测的数据保存到外设(如U盘、移动硬盘)中,研究了对应的文件系统和UFI传输协议,实现了对FAT文件系统的海量存储设备的读写。同时,为了打印霉标仪的检测结果,研究了EPSON打印机的ESC/P打印语言,实现了EPSON C63系列、C65系列、ME1打印机基于USB通讯的嵌入式打印机驱动。


2 嵌入式USB主机的硬件设计


酶标仪的硬件平台核心为三星公司的S3C44B0X(主频最高可达66MHz),它集成了ARM7TDMI核,LCD控制器,是一款适用于中端应用的微控制器。系统扩展包括:存储器(8MB SRAM、2MB NOR Flash)、USB主从机(SL811HS)和按键等硬件资源。其中USB部分硬件连接如图1所示。



一种基于ARM和μC/OS-Ⅱ的USB主机设计方案



图1:硬件连接图


SL811HS 是Cypress公司推出的一款嵌入式USB Host/S1ave芯片。支持USB1.1的全速和低速设备。提供USB主机的硬件接口及总线管理的物理机制。带有在片的SIE和USB发送器以及在片的根集线器Hub。因此, 满足了嵌入式USB 主机系统所需要的功能, 即由主机接口芯片来完成总线底层物理数据包的发送、接收, 并能检测总线状态, 发出中断请求。所以, 选择SL811HS 作为本系统的USB接口芯片是合适的。


如图2所示,ARM通过Cs3片选SL811HS来确定SL811HS的基地址。D0-D7为数据和地址的复用线,并通过A0来区分,当A0为“0”的时候,D0-D7上传输的是偏移地址;反之,当A0为“1”的时候,D0-D7作为数据线用。


3 嵌入式USB主机的软件设计


3.1 嵌入式USB主机的软件总体框架


系统的软件平台核心为µC/OS-II,它是一个源码公开的、占先式多任务管理的实时操作系统内核,其性能完全可与许多商业产品竞争,已在相当多的系统中得到成功应用,是一个经实践证明稳定可靠的内核,且其核心代码短小精悍,简单易学。


USB 主机为USB系统提供的功能有:(1) 检测USB 外设的接入和移出;(2) 管理主机和外设之间进行的USB 标准流量控制;(3) 枚举外设; (4) 管理主机和外设之间的数据流; (5) 搜集系统状态和性能的统计信息;(6) 主机与外设之间的电气接口,包括供电。


USB协议规定了人机接口设备HID 类、MassStorage 类、音频类和打印类等一系列的设备类型, 用于支持不同的设备。根据实际需要,我们开发了USB接口的海量存储类设备和基于ESC/P打印语言的EPSON打印机嵌入式驱动程序。具体驱动程序栈如图2所示。该系统支持热插拔,可以知道识别插上是哪种设备,并调用对应的驱动。



一种基于ARM和μC/OS-Ⅱ的USB主机设计方案



图2:USB驱动程序栈


3.2 USB Mass Storage 类协议框架的实现


USB Mass Storage 类是USB 协议所定义的用来磁盘管理及大容量数据传输的。USB定义了两种海量存储传输协议,它们分别是Buck-only Transport 和Control/Bulk/Interrupt(CBI) Transport。由于目前市场上所出现的海量存储设备基本上都采用前者传输协议,即读写数据都是通过块传输来实现通讯。在命令包CBW (Command Block Wrapper)中包含了标志信息,数据长度以及UFI命令等信息。其中UFI命令含有格式化磁盘、读磁盘、写磁盘和读磁盘容量等一系列磁盘管理命令。


大部分移动存储设备都采用FAT文件系统来管理文件。整个文件系统通过Mass Storage 的UFI 命令与外设的磁盘建立联系。FAT文件系统将海量存储设备上的数据大致分成5个部分:MBR区(主引导区)、DBR区(系统引导区)、FAT区(文件分配表)、FDT区(文件目录表)和DATA区(数据区)。当有USB接口的海量存储设备插上后,系统读取MBR区和DBR区来获得每扇区字节数,每簇扇区数,FAT表个数等文件系统基本信息。获取这些基本信息后从海量存储设备读取一个文件的流程如图3示。因写文件和读文件的流程没有很大的差别,在此就不累述了。



一种基于ARM和μC/OS-Ⅱ的USB主机设计方案



图3读文件流程图


3.3 基于ESC/ P打印控制语言的打印机驱动设计


EPSON公司的打印机基本上都是基于ESC/ P打印控制语言的,不同系列的打印机的控制语言没有太大的差别。因此,我们开发的驱动程序具有比较强的通用性,针对EPSON的C63系列打印机开发的驱动完全适用C65系列和ME1打印机。


各种型号打印机的编程手册可以到EPSON的开发网站上下载。编程手册对各种控制命令作了详细介绍,如初始化打印机(ESC @)、选择图形方式( ESC (C nL nH m )、设置单元大小(ESC (U nL nH m )、打印光栅图像命令(ESC . c v h m N1 Nh d1 ⋯dk)等。


EPSON打印机提供两种打印方式,一种是用来打印文本文件,用该方式打印英文字母、阿拉伯数字、符合的时候向打印机发对应的控制命令后,只要直接发打印内容的ASCII码即可。另一种方式是用来打印光栅图形,当需要打印表格、图片和汉字的时候时往往会用到这种方式。在此,列出几个关键API函数并予已说明:


print_image_init ( void ):因为打印机初始化后默认为打印文本模式,所以要打印光栅图形必须进行相关的初始化。


print_image_command(unsigned int horiz_position,unsigned int verti_position, unsigned char rows, unsigned int columns, char color):调用该函数之前必须事先至少调用过一次print_image_init(),它的功能是向打印机发打印图片命令。其中,第一和第二个输入参数是打印图形的横纵坐标,第三和第四个输入参数分别是打印图形的行数和列数(特别值得注意的是,C63系列和C65系列打印机一次最多可打16行,而 EPSON M1一次只能打15行),第五个输入参数color是选择打印颜色。在调用该函数后,直接向打印机发打印的数据就可以实现打印图片功能了。迎访问无由电子开发网(技术文章 在线阅读 在线商城


由于打印文本模式和打印图形的操作基本相同,而且更简单,在此就不作说明。


3.4 USB协议的实现


这是整个USB 体系软件的根基, 它负责主机和设备之间数据传输。其代码都包含在文件sl811host.c中,可供上层驱动调用的API函数主要有:


EnumUsbDev ():该函数主要实现枚举设备的功能。当有USB设备插上时,系统通过调用到该函数得到设备的标准描述符(接口、配置、端点)并识别是海量存储设备还是打印机。设置地址(SetAdress),设置配置描述符(SetDecriptor),设置配置值(SetConfiguration),设置接口(SetInterface)也在该函数里实现。


BuckSend():该函数主要实现主机上的数据通过块传输方式发送到设备上;


BuckReceive():块传输接受函数;


BuckSend()和BuckReceive()两个函数是最调度最平凡的两个函数,因为对海量存储设备的读写,对打印机发送控制命令、打印数据都是通过块传输通讯的,也就是通过调用这两个函数来实现的。


处理器读写SL811HS单个寄存器或数据存储器的函数如下:


void SL811Write(char a, char d){SL811_ADDR = a;SL811_DATA = d;}


char SL811Read(char a){SL811_ADDR = a; return (SL811_DATA);}


这两个函数是ARM处理器和SL811芯片进行数据交互的基石,所有控制寄存器和数据存储器的读写都可以通过以上两个函数来实现。当需要连续读写SL811中的储存器时可以采用以下方式来实现,可以加快读写速度。


void SL811BufWrite(BYTE addr, BYTE *s, BYTE c)


{SL811H_ADDR = addr;


while (c--)


SL811H_DATA = *s ;}


4 结 论


在基于实时内核µC/OS-II和32位RISC架构ARM7 Core的系统板上,我们实现了嵌入式USB主机设计和开发,为酶标仪这一特定医疗设备提供了读写海量存储设备和打印的功能。经测试,本系统读海量存储设备数据的速度可达750kB/s,写数据的速度最高可达450kB/s;打印功能也完全满足系统要求,性能稳定可靠,使用方便,是一种可行、实用的方案。


推荐阅读

史海拾趣

FINECHIPS公司的发展小趣事

FINECHIPS公司自成立以来,始终将技术创新视为企业发展的核心驱动力。公司投入大量资源于研发部门,专注于集成电路(IC)和电子元器件的技术创新。在某一关键时期,FINECHIPS成功研发出一款高性能、低功耗的模拟开关芯片,该芯片凭借其卓越的性能迅速获得市场认可,不仅在国内市场占据一席之地,还成功打入国际市场,为公司带来了显著的品牌影响力和市场份额增长。

Dawning Precision Co Ltd公司的发展小趣事

随着市场竞争的加剧,Dawning意识到只有不断创新才能在行业中立于不败之地。公司加大了对研发的投入,聘请了一批在电子制造领域具有丰富经验的专家。在专家团队的带领下,Dawning成功开发出了多款具有自主知识产权的高精度电子产品,这些产品不仅在性能上领先同行,而且在价格上也更具竞争力。这些创新产品的推出,极大地提升了Dawning在市场上的竞争力。

Herrmann Kg公司的发展小趣事

Herrmann Kg凭借其卓越的产品质量和专业的服务,赢得了全球众多领先客户的信赖。例如,CUSTOMCELLS®作为一家全球领先的客户专用锂电池开发商,在生产过程中采用了Herrmann Kg的超声波焊接系统,有效降低了废品率,提高了生产效率。这种深度合作不仅展示了Herrmann Kg在电池制造领域的专业能力,也进一步巩固了其在全球市场中的地位。通过不断满足客户的特定需求,Herrmann Kg在电子及其他相关行业中树立了良好的口碑。

Active-Semi公司的发展小趣事

Herrmann Kg凭借其卓越的产品质量和专业的服务,赢得了全球众多领先客户的信赖。例如,CUSTOMCELLS®作为一家全球领先的客户专用锂电池开发商,在生产过程中采用了Herrmann Kg的超声波焊接系统,有效降低了废品率,提高了生产效率。这种深度合作不仅展示了Herrmann Kg在电池制造领域的专业能力,也进一步巩固了其在全球市场中的地位。通过不断满足客户的特定需求,Herrmann Kg在电子及其他相关行业中树立了良好的口碑。

台湾致强(FORT)公司的发展小趣事

随着产品技术的不断成熟,致强科技开始积极寻求市场拓展。2016年,致强科技携手上海晟霆电子科技有限公司,共同致力于致强品牌合金电阻在中国内地市场的推广与销售。这一合作不仅扩大了致强产品的市场覆盖范围,还通过本地化服务提升了客户满意度。通过精准的市场定位和高效的营销策略,致强电阻迅速在内地市场占据了一席之地,成为众多电子企业信赖的合作伙伴。

Emerson公司的发展小趣事

第二次世界大战期间,Emerson迅速调整生产策略,转产炮弹弹壳等军需品。在随后的五年中,公司共生产出超过1000万支铜制炮弹弹壳,为战争的胜利做出了重要贡献。同时,Emerson还利用战时的技术积累,为战后的电气工业发展奠定了基础。

问答坊 | AI 解惑

请问谁有labview8.2的安装软件啊?

如题,请问谁有labview8.2的安装软件啊?我刚开始学,网上看到的下载网址都打不开,谁有的给我共享一下,谢谢。…

查看全部问答>

大家有在NI买产品的经验吗??

我们要买一款数据采集卡,经查NI的做的好像挺多的,不过不知道怎么买。比如说,有没有中国代理?买产品还要买正版软件吗??好像正版软件要很多钱的 呵呵 大家给指导一下吧…

查看全部问答>

招募精英

本公司现招募以下职位,有意者请将个人简历发往 qianleicherry@hotmail.com 软件工程师 职位描述: 1、负责IPTV/DVB驱动软件开发 2、负责IPTV/DVB相关中间件集成 3、负责IPTV/DVB样机调试和测试 4、负责软件相关文档编写 职位要求: 1、本 ...…

查看全部问答>

求 Windows Driver Model 的源代码

Windows Driver Model 的源代码 站内有这个资源,但是我这边下不动,谁发一份到我的邮箱ch609@163.com,谢谢先 …

查看全部问答>

sd驱动问题求解~

我的系统和平台是wince5.0 + 2416 问题:在进入wince的设备里面后,插入sd卡,系统下很快就会显示出sd的盘符,sd的访问也很正常,可是在拔除sd卡的时候,sd卡的盘符要5~6秒才能消失,不知道这个是什么原因。 希望有经验的xdjm们赐教!…

查看全部问答>

空调语音解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 空调语音解决方案 空调是我们每个人都不可缺少的生活用品,在竞争激烈的今天,怎样做出一款更适应市场的好空调,则是每个厂商苦恼的问题,更新和创新是一个企业发展和生存的源泉动力,市面 ...…

查看全部问答>

stm32f103+ucosII2.88运行一段时间后死机

最近在stm32f103VE上跑官方移植的ucosII2.88 ,刚开始运行的时候,系统一切正常,各个任务正常调度,大概可以持续5~7小时。但是>14小时连续运行之后,系统就不正常了,现象是:各个中断可以正常进入(通过观察led),但是有些任务已经不运行了 ...…

查看全部问答>

107USB OTG硬件问题

我的107 USB OTG自己开发的,请问各位硬件电路需要什么特别注意的地方吗?板子已经开回来了,USB的V_Bus供电没问题,但是D+,D-,还有ID上面的电压依次是3.7V,1.7V,1.7V,理论上正确的电压好像不是这样的,我打了其他正常的电压,D+,D-,ID上的电 ...…

查看全部问答>

《MSP430系列常用模块应用原理》 入门不难

买板送的资料,里面详细介绍寄存器的每位,类似于51,avr和stm32的资料,配合149的中文头文件看,入门不难。请看下面几行,有个印象再看配合看电子书和149的中文头文件。   int main(void) {       WDTCTL = WDT ...…

查看全部问答>

请教各位一个问题,关于放大电路的Q点

请看图片,我问的问题跟差分放大没什么关系了,我是看到这里才想到了这个问题。主要问题是关于戴维南定理等效出来的Vcc’和Rc’。1.红色箭头是我标注的电流方向。如果等效电阻是Rc和RL并联的话,那么电流只能这么流吧,可是这样不合理啊,RL上的电 ...…

查看全部问答>