基于ARM和μCOS-Ⅱ的嵌入式USB主机设计与应用._第1页
基于ARM和μCOS-Ⅱ的嵌入式USB主机设计与应用._第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于 ARM 和itC/OS 的嵌入式 USB 主机设计与应用基于 ARMffi tC/OSU的嵌入式 USB 主机设计与应用类别:嵌入式系统1 引 言 通常情况下,打印机、海量存储等设备是由普通 PC 机来驱动的,由于大量的测控、医疗等系统需要存储、打印数据,因此开发这 类设备的嵌入式驱动是非常有实用价值的。目前,各种嵌入式设备基本上是通 过软盘存储,并口打印的,而它们的存储容量、数据传输速度已大大落后当前 各类嵌入式系统的需求。因此,开发基于 USB 接口的嵌入式海量存储设备和打 印机驱动已成当务之急。USB(Universal Serial Bus) 是最近几年逐步在PC 领域广为应用的

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

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

4、印机驱动。2 嵌入式 USB 主机的硬件设计酶标仪的硬件平台核心为三星公司的 S3C44B0X(主频最高可达 66MHZ,它集成了 ARM7TDM 核, LCD控制器, 是一款适用于中端应用的微控制器。 系统扩展包括: 存储器 ( 8MB SRAM 2MBFlash)、USBi 从机(SL811HS 和按键等硬件资源。其中 USB 部 分硬件连接如图 1所示。图 1:硬件连接图SL811HS 是 Cypress 公司推出的一款嵌入式 USB Host/S1ave 芯片。支持 USB1.1 的全速和低速设备。 提供USB 主机的硬件接口及总线管理的物理机制。带有在片的SIE 和 USB 发送器以

5、及在片的根集线器 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 主机的软件总体框架系统的软件平台核心

6、为 µC/OS-II ,它是一个源码公开的、占先式多任务 管理的实时操作系统内核,其性能完全可与许多商业产品竞争,已在相当多的 系统中得到成功应用,是一个经实践证明稳定可靠的内核,且其核心代码短小 精悍,简单易学。USB 主机为 USB 系统提供的功能有: 检测 USB 外设的接入和移出; (2) 管理主机和外设之间进行的 USB 标准流量控制; (3) 枚 举外设; (4) 管理主机和外设之间的数据流; (5) 搜集系统状态和性能的统 计信息;(6)主机与外设之间的电气接口,包括供电。USB 协议规定了人机接口设备 HID 类、MassStorage 类、音频类和打印类等

7、一系列的设备类型,用于支持不同的设备。根据实际需要,我们开发了USB 接口的海量存储类设备和基于 ESC/P 打印语言的 EPSO 打印机嵌入式驱动程序。具体驱动程序栈如图 2 所示。该系统支持热插拔,可以知道识别插上是哪种设备,并调用对应的驱 动。图2: USB 驱动程序栈3.2 USB Mass Storage 类协议框架的实现 USB Mass Storage 类是 USB 协议所定义的用来磁盘管理及大容量数据 传输的。USB 定义了两种海量存储传输协议,它们分别是Buck-o nly Tran sport和 Control/Bulk/Interrupt(CBI) Transport。由

8、于目前市场上所出现的海量存储设备基本上都采用前者传输协议,即读写数据都是通过块传输来实现通 讯。在命令包 CBW (Comma nd Block Wrapper)中包含了标志信息,数据长度 以及 UFI 命令等信息。其中 UFI 命令含有格式化磁盘、读磁盘、写磁盘和读磁 盘容量等一系列磁盘管理命令。大部分移动存储设备都采用 FAT 文件系统来管理文件。整个文件系统通过 Mass Storage 的 UFI 命令与外设的磁盘建立 联系。FAT 文件系统将海量存储设备上的数据大致分成5 个部分:MBR 区(主引导区)、DBR 区 (系统引导区)、FAT 区(文件分配表)、FDT 区(文件目录 表)

9、和 DATA区(数据区)。当有 USB 接口的海量存储设备插上后,系统读取 MBR 区和 DBR 区来获得每扇区字节数,每簇扇区数,FAT 表个数等文件系统基本 信息。获取这些基本信息后从海量存储设备读取一个文件的流程如图 3 示。因 写文件和读文件的流程没有很大的差别,在此就不累述了。图 3 读文件流程图 3.3 基于 ESC?P 打印控制语言的打印机驱动设计EPSO 公司的打印机基本上都是基于 ESC?P 打印控制语言的,不同系列的打印机的控制语言 没有太大的差别。因此,我们开发的驱动程序具有比较强的通用性,针对 EPSO 的 C63系列打印机开发的驱动完全适用 C65 系列和 ME1 打

10、印机。各种型号打印机的编程手册可以到 EPSON 勺开发网站上下载。编程手册对各种控 制命令作了详细介绍,如初始化打印机( ESC )、选择图形方式( ESC (C 光 栅图像命令(ESC.c v h m 8943;dk )等。EPSO 打印机提供两种打印方式,一种是用来打印文本文件,用该方式打印英文字母、阿拉伯数字、符合的 时候向打印机发对应的控制命令后,只要直接发打印内容的 ASCII 码即可。另 一种方式是用来打印光栅图形,当需要打印表格、图片和汉字的时候时往往会 用到这种方式。在此,列出几个关键 API 函数并予已说明: print_image_init ( void ) :因为打印机

11、初始化后默认为打印文本模式,所以 要打印光栅图形必须进行相关的初始化。print_image_command(unsignedint horiz_position,unsigned int verti_position, unsigned char rows, unsigned intcolumns, char color) :调用该函数之前必须事先至少调用过一 次 print_image_init (),它的功能是向打印机发打印图片命令。其中,第一 和第二个输入参数是打印图形的横纵坐标,第三和第四个输入参数分别是打印图形的行数和列数(特别值得注意的是,C63 系列和 C65 系列打印机一次最

12、多可打 16 行, 而 EPSON M 一次只能打 15 行), 第五个输入参数 color 是选择 打印颜色。在调用该函数后,直接向打印机发打印的数据就可以实现打印图片 功能了。迎访问无由电子开发网(技术文章 在线阅读 在线商城 由于打印 文本模式和打印图形的操作基本相同,而且更简单,在此就不作说明。3.4 USB 协议的实现这是整个 USB 体系软件的根基,它负责主机和设备之间数据传输。其代码都包含在文件 sl811host.c 中,可供上层驱动调用的 API 函数主要有:EnumUsbDev():该函数主要实现枚举设备的功能。当有USB 设备插上时,系统通过调用到该函数得到设备的标准描述

13、符(接口、配 置、端点)并识别是海量存储设备还是打印机。设置地址( SetAdress ),设置 配置描述符( SetDecriptor ),设置配置值( SetConfiguration ),设置接口(SetInteface )也在该函数里实现。BuckSend():该函数主要实现主机上的数据通过块传输方式发送到设备上;BuckReceive ():块传输接受函数;BuckSend()和 BuckReceive ()两个函数是最调度最平凡的两个函数,因为对海量存储设备的读写,对打印机发送控制命令、打印数据都是 通过块传输通讯的,也就是通过调用这两个函数来实现的。处理器读写SL811HS 单个

14、寄存器或数据存储器的函数如下: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 中的储存器时可以采用以下方式来实现,可以加快读写速度。voidSL811BufWrite(BYTE addr, BYTE s, BYTE c)SL811H_ADDR = addr;while (c-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论