DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 648|回复: 0
打印 上一主题 下一主题

[接口电路] 基于ARM和μC/OS-Ⅱ的嵌入式USB主机设计与应用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 18:47:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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






  图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;打印功能也完全满足系统要求,性能稳定可靠,使用方便,是一种可行、实用的方案。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-11 05:26 , 耗时 0.082501 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表