APP下载

基于MC9S12UF32的USB接口设计

2021-06-30徐建林聂章龙

科技风 2021年1期
关键词:存储设备端点海量

徐建林 聂章龙

摘要:为了实现对Freescale MC9S12UF32芯片的USB2.0模块的开发,首先,阐述了MC9S12UF32单片机专门作为高速USB存储设备接口设计芯片的优势和特点;然后提出了海量存储设备的USB2.0接口设计方案,在软、硬件架构上实现访问MC9S12UF32芯片USB2.0接口,设计方案加速了USB2.0设备开发,促进了USB2.0设备接口的应用,具有较好的理论和应用价值。

关键词:MC9S12UF32;USB2.0;设备枚举;Bulk-Only传输协议;SCSI命令集

Design of USB interface Based on MC9S12UF32 Chip

Xu Jianlin1 Nie Zhanglong2

1.Bergstrom Company JiangsuChangzhou 213135;

2.Changzhou College of Information Technology JiangsuChangzhou 213164

Abstract:In order to implement development of USB2.0 module of MC9S12UF32 chip,firstly,describing the advantages and characteristics of MC9S12UF32 which is integrated high-speed USB storage device interface.Then,proposing the design scheme of USB2.0 mass storage device interface,the scheme realizes the access to USB2.0 interface of MC9S12UF32 in software and hardware architecture.This scheme not only effectively improves development of USB devices,It can also be widely used in the practical application design of USB2.0 equipment interface,and has good theoretical and application value

Key words:MC9S12UF32;USB2.0;device enumeration;bulk only transport protocol;SCSI command set

1 緒论

USB已成为微机和众多电子设备的重要标准接口,USB1.1规范的推出已得到了广泛应用,但随着电子技术的飞速发展,USB1.1规范已不能满足电子消费产品的性能要求,特别在传输速度和存储容量方面。因而,很快推出USB2.0规范,快速催生了USB2.0接口的消费电子产品。国外推出了大量集成USB2.0接口的芯片,国内公司对拥有USB2.0接口芯片还在初步研发阶段。本文基于16位单片机MC9S12UF32,提出了一种USB2.0设备接口的设计与实现。

2 USB接口类MC9S12UF32芯片特性

MC9S12UF32是恩智浦(源飞思卡尔)公司的HC/S12系列中的16位单片机,它是一款低价位、高性能的单片机,片内资源丰富,FLASH EEPROM空间32K Bytes,RAM空间3.5K Bytes,QRAM队列1.5K Bytes,集成高速USB2.0接口、集成队列控制器(IQUE)、SCI接口,通过一条专用内部总线,IQUE模块可以实现从存储接口到USB模块进行高速数据传输,最快达到60MB/S。

MC9S12UF32单片机是高速USB存储设备接口设计的首先,支持高速、全速USB传输[1]。构成该款芯片的主要模块为IQUE模块、USB2.0接口和存储控制器接口。CPU是控制与处理的核心,但真正的数据传输是通过中介IQUE完成,它与CPU是并行工作,互不干扰。

IQUE模块的组成:队列控制器(QUE)、队列控制器集成模块(QIM)和QRAM队列(1.5KB)。集成队列模块IQUE数据传输是以FIFO的方式写入或传出QRAM。

由USB物理层接口(UPHY)和USB设备控制器(UDC20)构成USB2.0模块,配合IP总线及USB全速和高速协议,实现数据传输。模块的结构框图如图1所示。

USB设备控制器模块通过IP总线与S12内核进行交互。交互的通道为6个独立的端点。共有5个64字节的端点缓冲区,其中两个分配给物理端点1,另外三个分配给了物理端点2、3和6。

端点数据是通过IP FIFO总线保存于集成队列控制器模块,然后片内模块才能与USB2.0模块进行连续的数据通信。

综上所述,USB接口与存储器接口间的高速数据通道是由IQUE模块、USB2.0模块和存储设备接口构成的,其中IQUE模块起到了桥梁的作用。

3 USB2.0设备接口的设计

USB2.0设备接口设计主要由硬件设计和固件设计[2],USB2.0协议中的链路层功能是由硬件完成;USB2.0协议及设备子类协议是由固件来完成。基于硬件架构,增强型MCHS12UF32核的USB2.0接口设计应包括以下几个模块。

(1)USB传输处理模块。底层硬件送来的各种信号需要USB传输处理模块进行分析处理,Endpoint中接收到的主机命令/数据需要由该模块上传到主机命令解析模块,并返回命令处理结果。

(2)主机命令解析模块。分析处理USB传输处理模块送来的主机命令,并返回分析处理结。

(3)设备应用处理模块。外部应用系统接收到具体的操作命令执行,并返回外部器件相关状态。固件的功能可分为设备枚举、传输控制、命令解析、外部应用操作等几个过程,如图2所示。

3.1 USB海量存储设备固件的设计

IP核固件主要元素为Bulk-Only传输协议和SCSI命令集[3]。

3.1.1 固件流程

图3是大容量USB存储设备固件工作流程。工程流程中主要是4类中断处理,即Bulk-In端点中断、Bulk-Out端点中断和Command端点0的In中断及Out中断。Command端点是实现设备枚举过程中主机与设备间的交互,Bulk端点是实现枚举成功后主机与设备间的交互。

3.1.2 设备枚举

USB設备在接入USB电缆后需要一个枚举过程,为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等,用户首先需要将枚举过程中所需要的各种描述符表设置好后存放于指定存储单元。枚举过程如图4所示。

3.1.3 Bulk-Only传输控制

USB设备枚举成功后,就可以通过Bulk端点进行数据传输了,Bulk-Only传输控制过程如下:

(1)主机通过Bulk-Out端点发送CBW命令包;

(2)设备接收拆分CBW包,解析SCSI命令;

(3)设备执行SCSI命令;

(4)设备通过Bulk-In端点,向主机返回命令状态包CSW;

(5)设备等待主机的下一个CBW命令包。

3.1.4 SCSI命令解析

特定的海量存储设备可以过滤无意义的SCSI命令,当设备确认接收到是有效的SCSI命令后,它将根据命令类型和要求,做好数据的发送或接收的准备。

3.2 USB海量存储设备接收和发送过程设计

传输由OUT、IN、SETUP等事务构成,传输分为同步传输、控制传输、中断传输和批量传输,批量转输和中断传输结构相同,同步传输结构简单,而控制传输结构复杂。

3.2.1 USB海量存储设备的Bulk_Only传输类

批量传输是USB海量存储应用的一种[4],另外有巨量中断传输方式,还有其他的传输方式等。传输中存在三种类型的命令块数据包:第一种主机发送数据到设备,第二种是不带数据传输的命令块数据包,第三种是主机要从设备接收数据的命令。

(1)端点0配置。USB设备接入主机时,主机通过默认地址0与默认端口0进行通信。在此期间,主机发出相关描述符请求,并得获取所需的设备描述符,从而了解设备的情况,再通过Set Address指令设置一个唯一的设备地址,然后,主机就通过该地址与设备通信,不再使用默认地址0,端点0的配置过程也是类似的。

(2)其他端点数据通信。在配置阶段,主机获取到设备端点的使用情况后,现在可以通过这些端点进行特定数据通信。海量存储设备有BULK ONLY和CBI两种传输方式,使用Bulk Only较为常见,主要是使用特定的Bulk端点,由于Bulk端点的没有特定的数据格式,所以需要使用某种命令集来约定其传输格式,一般配备使用UFI或SCSI命令集。

3.2.2 Bulk-Only传输协议

当设备插入到USB后,完成枚举过程,主机便可识别出为海量存储设备类型,随后USB接口与设备间通过Bulk-In和Bulk-Out进行数据传输。可传输的数据类型有:CBW、CSW和普通数据[5]。CBW是符合SCSI传输命令集格式的一种命包,由主机发送给设备。当USB设备解析出CBW包中的SCSI命令并执行后,还需要向主机返回命令执行状态包CSW,最后,主机根据命令状态包决定是否继续发送下一个CBW或数据。

3.3 USB2.0海量存储设备接口的软件设计

3.3.1 MCU方软件

USB模块化编程,主要包括初始化、主函数和中断处理函数三部分,主要是实现主机获取设备描述符,进行端点数据传输[6]。初始化函数主要包括UF32单片机和外围电路接口初始化;中断处理函数主要是进行各种中断的处理;主函数主要是完成设备特定要求的流程处理;

利用MCHS12UF32核中的USB端口5进行批量输入,端口4进行批量输出,函数框架如下:

voidBulkOnly_Init(void)//USB2.0初始化

{ … }

voidStartUP(void)//设备运行时启动函数,系统的基本设置

{ … }

IsrProcess(void)/中断处理函数,,包括对解析SETUP包的处理函数USB_DecodeSETUP

{ … }

CBWProcessor(void)//该函数主要是对各种包(CBW、CSW等)的处理

{ … }

主函数根据MCHS12UF32核的USB设备上电或复位后,首先对所有内部变量初始化,现调用BulkOnly_Init()函数,打开中断检测控制端口0是否收到SETUP包,如果收到,则调用函数IsrProcess()。后续一直往复这个过程,直到枚举成功,即找到海量存储设备(Mass Storage Device),并安装好驱动程序,之后就是主机发CBW包,执行Bulk_Only传输协议,通过CBWProcessor()函数不断检测主机是否发来CBW包,并做相应处理。

3.3.2 PC方软件

PC方软件包括USB的驱动程序和主机应用程序两部分。USB驱程序是一种标准的WDM驱动程序,支持即插即用,提供控制传输、中断传输和批传输等标准接口函数。主机应用程序是实现与操作系统的交互,操作系统监测到新设备时,自动调用相应的设备驱动程序。为了实现操作的方便性和可视性,利用VC++进行了UI界面设计,通过CreateFile获得USB句柄,用DeviceIoControl向设备驱动程序发送请求,完成基于MC9S12UF32单片机的USB2.0接口的批量数据传输。上位机的主要程序模块如下:

//获取设备ezusb0的句柄

DeviceHandle=CreateFile(\\\\.\\ezusb0,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

//设备初始化

(1)子函数名:IQUE_Module_Init(void),功能:IQUE模块初始化_使能IQUE模块;

(2)子函数名:USB_ModuleInit(void),功能:USB模块初始化-使能USB模块;

(3)子函数名:USB_InitBulkOnlyTransport(void),功能:USB批量传输初始化-配置1x64字节BULK in和1x64字节BULK out;

//数据接收与发送子函数

(1)子函数名:Data_Tx(muint16*pBuffer,muint8 Len),功能:将长度为Len的数据移到pBuffer缓冲区;

(2)子函數名:Data_Rx(muint16*pBuffer),功能:将PC方发来的数据移到pBuffe缓冲区;

(3)子函数名:USB_Move2LocalBuffer(*FR_ptr,*TO_ptr,Len),功能:从指针FR_ptr所指向的位置移动长度为len数据到TO_ptr指针所指;

(4)子函数名:USB_Move2QUE3(FR_ptr,Len),功能:从指针FR_pt处移动长度为len数据到QUE1 FIFO缓冲区;

(5)子函数名:SCSIList28(),功能:Read指令集处理PC方向设备方索取数据;

(6)子函数名:SCSIList2A(),功能:Write指令集处理,PC方向设备方发数据。

4 结语

本文对基于MC9S12UF32 MCU的USB2.0接口的一般开发方法和技术特点、设备端软件和主机端软件的设计进行了讨论,并给出了海量存储设备的USB2.0接口设计方案和软件设计的过程和实现方式,重点对设计枚举过程和Bulk_Only传输进行了较详细的阐述和研究,希望能对UF32芯片的设计和开发者起到一定的借鉴和抛砖引玉的作用。

参考文献:

[1]邵贝贝.单片机嵌入式应用的在线开发方法[M].清华大学出版社,2004

[2]闰波,田茂,李广军.一种基于层次模型的USB2.0接口芯片核固件的设计与实现[J].半导体技术,29(3)

[3]张宇,程秀玲.基于OpenVPX的高速集成处理器USB接口设计[J].无线互联科技,2020(04)

[4]陈玉辉,钟洪声,李廷军.基于CY7C68013a的USB2.0接口设计[J].大众科技,2010(10)

[5]孙瑜,张悦,陈劲操.基于USB接口的多路温度采集系统设计[J].电力与能源,2017(02)

[6]陈旭辉,杨红云.USB接口的虚拟多串口通信设备设计[J].单片机与嵌入式系统应用,2020(04)

[7]USB Mass Storage Class-UFI Command Specification[EB/OL]

作者简介:徐建林(1987— ),男,安徽阜阳人,大专,助理工程师,研究方向:机械设计、非标自动化;聂章龙(1974— ),男,江苏常州人,硕士,教授/高级工程师,研究方向:嵌入式系统、智能控制。

猜你喜欢

存储设备端点海量
例谈求解“端点取等”不等式恒成立问题的方法
不等式求解过程中端点的确定
电筒的灯光是线段
一个图形所蕴含的“海量”巧题
从教材中突围,走课内海量阅读之路
浅析计算机硬件发展史
浅析铁路视频监控存储设备设计
Hadoop构建的银行海量数据存储系统研究
吃饭谁买单
防止USB接口泄密