基于ARM和μC/OS-Ⅱ的嵌入式USB主机设计与应用

发布者:BlissfulMoments最新更新时间:2021-04-06 来源: eefocus关键字:ARM  μC  OS-Ⅱ  USB主机 手机看文章 扫描二维码
随时随地手机看文章

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所示。

图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所示。该系统支持热插拔,可以知道识别插上是哪种设备,并调用对应的驱动。

图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示。因写文件和读文件的流程没有很大的差别,在此就不累述了。

图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;打印功能也完全满足系统要求,性能稳定可靠,使用方便,是一种可行、实用的方案。


关键字:ARM  μC  OS-Ⅱ  USB主机 引用地址:基于ARM和μC/OS-Ⅱ的嵌入式USB主机设计与应用

上一篇:精密模拟微控制器构建温度监控器
下一篇:ARM开发板不能挂载U盘问题解决

推荐阅读最新更新时间:2024-11-07 08:30

具有电隔离、线"或"能力和改善噪声容限的I2C接口
本设计实例描述了一种简单而有效的方法为连接在I 2 C总线上的设备提供光隔离(图1)。这个电路改进了早期的版本。(参考1)。SDA和SCL处在I 2 C总线的主区域。SDA1和SCL1在从设备区域。可以很容易对时钟线路进行光隔离,因为它具有从主设备到从设备的单向性。P沟道MOSFET,Q3为快速光耦合器IC2的LED提供电流,缓冲时钟线路。 但数据线路是双向的。电路的该部分是对称的。电阻R6和R7为IC在总线从设备一侧的上拉电阻,而R3和R1为与位于SDA/SCL一侧平行于主I 2 C上拉电阻的虚拟上拉电阻。如果SDA和SDA1线都为高电平——也就是说,I2C设备没有将其电平拉低——Q1将截止,没有电流流进光耦IC2的发光二极
[应用]
ARM推出CORTEX-A15 MPCORE处理器,运行可达2.5GHz
ARM公司今天推出了Cortex-A15 MPCore 处理器 ,与当今先进的智能手机处理器相比,在类似的功耗下,提高了5倍的性能。在先进的基础设施应用中,Cortex-A15处理器可运行在2.5GHz,能够在不断萎缩的能源、散热和成本预算范围内提供高度可扩展性解决方案。Cortex-A15处理器今天起可通过授权获得,并计划以32nm、28nm和未来更先进的节点工艺进行制造。 作为ARM Cortex-A系列的最新处理器产品, Cortex-A15 MPCore处理器可以应用在广泛的新产品系列上,包括从下一代智能手机、平板电脑、大屏幕移动计算和高端数字家庭娱乐终端到无线基站和企业级基础设施产品等。 ARM处理器
[工业控制]
单片机C语言中volatile的作用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求vol
[单片机]
【STM32CubeMX】9,STM32之I2C,EEPROM
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET) { HAL_Delay(500); testarr +=3; if(HAL_I2C_Mem_Write(&hi2c1,0xa0,60,I2C_MEMADD_SIZE_8BIT,&testarr ,1,3000)==HAL_OK) { printf ( testarr =%drn ,testarr ); printf ( write OK !!!rn ); HAL_Delay(5); } else printf ( write false !!!rn ); // HAL_I2
[单片机]
c51写的93C46的读写程序
#include reg52.h sbit CS=P2^7; sbit SK=P2^6; sbit DI=P2^5; sbit DO=P2^4; /* extern unsigned char ReadChar(unsigned char address); extern void WriteChar(unsigned char address,unsigned char InData); extern void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number); extern void WriteStr
[单片机]
赛灵思助力安森美智能功率模块平台更快更高效
本文编译自Xilinx官方博客 安森美的智能功率模块(IPM)和集成功率模块是为有效控制电机而制造的。它们适用于高电压和高工作温度,并减少了驱动器的空间。更高的开关频率有助于提高效率,超越了传统电机控制解决方案的能力。 这就是为什么在软件中具有算法的MCU无法优化新技术的原因。在专用逻辑中使用高级算法的快速切换可控制电动机的旋转磁场,从而最大程度地提高效率。通过Xilinx(赛灵思) Zynq-7000 SoC中的电机控制功能,该系统可通过设计获得最佳性能。无论Xilinx SoC内部正在运行什么,控制环的速度始终是可预测的。处理系统中的Arm内核使该设备变得智能化,可用于工业物联网(IIoT)。 电机的能效起着至关重
[嵌入式]
赛灵思助力安森美智能功率模块平台更快更高效
ARM预料明年授权量增长低于今年
  * 预估明年半导体产业将成长数个百分点   * ARM明年授权数量增长将较今年放缓,但仍优于前几年   记者 张雅菁/詹颖颐   路透台北11月17日电 在全球总体经济充满不安情绪之际,英国晶片设计大厂ARM(ARM.L: 行情)周四表示,预估明年半导体产业将成长数个百分点,而ARM明年授权数量成长亦无法维持今年的高速.   ARM全球总裁Tudor Brown在访台时接受路透专访并表示,在ARM持续投资研发,同时有数个产品线的推动下,授权数量还是会优于前几年.ARM的历史纪录显示,其授权量每年通常成长75-100个.不过,他不愿对明年的数量做明确的预估.   "我们投资很多在研发上,所以我们创造新技术的能量也随之升高,所以授权
[嵌入式]
ch32和gd32哪个好用?
Ch32和Gd32是两个比较常见的芯片系列,都是基于ARM Cortex-M3内核设计的,因此具有类似的特点和性能。在选择使用哪个芯片时,需要根据具体的项目需求和开发难度加以考虑。 首先,我们来简单介绍一下这两个芯片系列的特点。Ch32是中国厂商江苏长鹰半导体公司生产的一款芯片,可以实现信号的高速处理和计算机视觉应用,广泛应用于机器人、智能家居、智能驾驶等领域。Gd32则是由中国厂商北京兆易创新科技有限公司生产的芯片,主要应用于工控、嵌入式、智能家居、智能穿戴等领域。 在开发难度方面,刚开始学习嵌入式开发的初学者可能会觉得Gd32更加好用,因为它有完善的开发工具链和丰富的文档资料,对于初学者来说更加友好。Ch32的开发工具链和文档
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved