用CBI协议的USB软驱读取绣花机花版文件

发布时间:2010-2-26 17:39    发布者:李宽
关键词: CBI , USB , 软驱 , 文件 , 协议
引言

绣花机广泛用于纺织行业,基本原理为读取绣花花版文件到主控设备,进行固定算法的花版解释,控制绣花机机头进行绣花动作,目前广泛利用USB接口读取花版文件。USB协议对所有USB设备进行分类,同类型的设备拥有一些共同的行为特征和传输协议,在此基础之上USB协议又划分了子类设备,进一步区分相同类设备的属性,以利于设计主机与设备的数据传输。对于USB大容量存储设备(mass storage device)设计,普遍采用两种基本传输方式:CBI和BULKONLY。使用较多的是BULKONLY协议,主要应用在U盘存储设备;而CBI协议由于具有中断传输的特性,主要应用在USB硬盘及工业上普遍使用的USB软盘驱动器,目前,在绣花机的使用过程中也需要磁盘读写花版文件,这样的好处是保密性强、可随时更换,可以作为U盘的很好补充。

1 M8SS storage CBI协议介绍

在CBI协议的描述中,必须采用4种传输方式和通道进行主机和设备的数据交换,这4种方式称为端口,按顺序为:O,控制传输;1,块输入 (bulkin);2,块输出(bulk-out);3,中断传输。这与普通U盘设备采用2个传输端口有明显区别。控制端口0主要用来在主机和设备间传送 USB标准命令和对硬盘的控制命令集,批量输入端口1和批量输出端口2用来传输大量块数据,中断端口3用来返回命令的发送状态用于主机产生中断。

1.1 数据传输过程

在对设备进行任何操作前,主机都必须发送mass_storage_ufi协议中定义的相关UFI命令块(USB FloppyInterface Command)。从控制端口0传送到设备,命令块被分为无数据、数据进、数据出3种类型。主机将以指定类请求ADSC开始命令传输,接着在控制传输的数据阶段传输命令块。指定类请求命令包如表1所列。

1.gif

对于CBI设备来说,主机每次发送UFI命令块前都必须由指定类请求ADSC引导,否则设备不识别。以下是发送一组UFI命令响应的过程举例:

2.gif

在主机命令发送得到接收正确响应ACK(确认接收)后,设备会从端口3自动返回2字节状态码,用于主机产生中断(中断不是必须),数据传输状态如下:

3.gif
   
命令发送全过程完毕,当需要数据输入/输出时,设置主机发送IN/OUT PID请求,设备按照请求通过BULK-IN/OUT端口传输数据,每次发送的字节数根据设备描述符所定义的端口最大吞吐量。

1.2 CBI设备描述符及枚举过程

按照USB协议,所有USB设备接入主机后,主机进行设备枚举,识别此设备属于USB范畴的哪一类,以及该类型中的哪一子类;然后对此设备进行配置,直到该设备能进行正确读写。这些枚举信息都已固化在USB设备中,主机只进行提取操作。

CBI协议存储设备支持很多描述符,主要且必须支持下列USB描述符:

    ①设备描述符(device descriptor)
    ②配置描述符(configuration descriptor)
    ③接口描述符(interface descriptor) CBI存储设备至少应支持1个数据接口。
    ④端点描述符(endpoint descriptor) 除用作初始化和命令传输的控制端口Endpoint 0外,CBI存储设备还必须支持批量输入、批量输出、中断3种端点,配置、接口、端口描述符是在主机一次请求时接收的。

当某设备描述符被识别为mass storage device类CBI设备子类后,主机进行第2次枚举,对设备进行相关配置和初始化。具体枚举过程通过第1次枚举所配置的端口,发送相关请求命令,进行初始化的数据输入/输出。具体函数及功能如下:

4.gif

2 USB 软驱主机程序设计

2.1 开发平台介绍

开发平台主要包括:

    ①MCU S3C24IOA(绣花机主芯片)
    ②USB芯片 SL811HS
    ③开发语言 嵌入式C语言
    ④编译环境 CodeWarrior for ARM Developer SuiteVl.2
    ⑤仿真器 Magic-ICE
    ⑥USB软驱类型 SONY MPF82E-U1磁盘驱动器

2.2.1 USB设备的枚举

USB软驱首先要进行设备枚举,主机通过控制端口0向设备发送DeviceRequest命令。DeviceRequest命令主要有 Get_Descriptor,Set_Address,Set_Config,Set_Interface等,而Get_Descriptor描述符又可分为Device_Descriptor、Configuration_Descriptor、Interface_Descrip-tor、 Endpoint_Descriptor,枚举阶段所有的请求都是基于setup ID。根据不同的请求命令,配置相应的协议栈。以下是配置接收描述符的部分参数,以设备描述符为例:

80aba3890e7f94395f20c7d165d.gif

配置请求参数完成以后,利用USB数据传输函数usbXfer()来传输该请求。usbXfer()必须完全遵循USBl.1协议。该函数具体算法流程如图1所示。

6.gif

2.2.2 大容量存储设备的枚举

此阶段任务的中心是对主机发送UFI命令的处理。ADSC请求是UFI命令的前导,通过控制端口0以setup数据包发送,接着仍通过端口0以数据包的形式发送UFI命令包。命令包均为12字节,发送前暂存在ufi[]数组中。以CBI_Read(unsigned long lba,unsigned charlen,unsigned char* pBuffer)函数为例叙述命令发送过程,其他枚举函数实现基本原理相同。CBI_Read()函数读取扇区数据到指定数组,源程序如下:

7.gif

该程序段成功返回标志着所发指令执行正常,且最后读写USB软驱首扇区数据正确。

2.3 绣花机花版文件读取

实现读写磁盘首扇区数据功能,可以结合上层FAT文件系统读取磁盘中的花版文件。FAT文件系统中所有文件都作为链表存在,在文件系统的文件目录项中标明了文件的一些相关信息,如文件名、扩展名、文件属性、修改时间、起始簇号(簇是文件系统中的最小读写单位,一般为32字节),如表2所列。

8.gif                         

由于文件是以簇链的形式存在,所以可以根据起始簇号设计程序来读取磁盘中该文件的所有簇数据,进而抓取所需花版文件。

结语

CBI协议和BULKONLY协议是当今USB大容量存储设备使用最多的传输方式。两种方式各有特点,本文只详细讲解了CBI传输应用到USB软驱上的实现方法和原理。这方面内容属于USB协议中很重要的子协议,可应用到USB通信设计中。开发人员可以借鉴CBI传输模式的诸多优点实施高质量高速率的数据传输。

参考文献

   1. Stevens Curtis E USB Mass Storage Class CBI Transport Specification 1998
   2. 周立功 ARM 嵌入式系统软件开发实例(二) 2006
   3. Compag Computer Corporation Universal Serial Bus Specification:Revision 1.1 1998
   4. 尹勇.王洪成 单片机开发环境μVision2使用指南及USB固件编程与调试 2004
   5. 郭佑民.王杰.孙启国 基于嵌入式微处理器S3C44B0X的USB通信 2008(1-2)

作者:中国地质大学 王子鉴 张莉君 来源:单片机与嵌入式系统应用 2009(5)
本文地址:https://www.eechina.com/thread-8558-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表