微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM和μC/OS-Ⅱ的嵌入式USB主机设计与应用

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

时间:02-20 来源:互联网 点击:

ge 的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 #8943;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 结 论

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top