91学术服务平台

您好,欢迎来到91学术官网!业务合作:91xueshu@sina.com,站长邮箱:91xszz@sina.com

发布论文

论文咨询

基于MC9S12UF32的USB接口研究

  2020-12-30    125  上传者:管理员

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

  • 关键词:
  • MC9S12UF32
  • SCSI命令集
  • 传输协议
  • 单片机
  • 设备枚举
  • 加入收藏

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位单片机,它是一款低价位、高性能的单片机,片内资源丰富,FLASHEEPROM空间32KBytes,RAM空间3.5KBytes,QRAM队列1.5KBytes,集成高速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所示。

图1USB2.0模块图

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

端点数据是通过IPFIFO总线保存于集成队列控制器模块,然后片内模块才能与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所示。

图2USB2.0设备接口IP核固件的功能层次结构

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

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

3.1.1固件流程

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

图3固件工程流程

3.1.2设备枚举

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

图4枚举过程图

3.1.3Bulk-Only传输控制

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

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

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

(3)设备执行SCSI命令;

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

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

3.1.4SCSI命令解析

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

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

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

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

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

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

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

3.2.2Bulk-Only传输协议

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

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

3.3.1MCU方软件

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

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

函数框架

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

3.3.2PC方软件

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

程序模块

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

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

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

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

(1)子函数名:Data_Tx(muint16*pBuffer,muint8Len),功能:将长度为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数据到QUE1FIFO缓冲区;

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

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


4、结语


本文对基于MC9S12UF32MCU的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).


徐建林,聂章龙.基于MC9S12UF32的USB接口设计[J].科技风,2021(01):91-93+96.

分享:

91学术论文范文

相关论文

推荐期刊

网友评论

加载更多

我要评论

单片机与嵌入式系统应用

期刊名称:单片机与嵌入式系统应用

期刊人气:1284

期刊详情

主管单位:工业和信息化部

主办单位:北京航空航天大学

出版地方:北京

专业分类:科技

国际刊号:1009-623X

国内刊号:11-4530/V

邮发代号:2-765

创刊时间:2001年

发行周期:月刊

期刊开本:大16开

见刊时间:10-12个月

论文导航

查看更多

热门论文

【91学术】(www.91xueshu.com)属于综合性学术交流平台,信息来自源互联网共享,如有版权协议请告知删除,ICP备案:冀ICP备19018493号

400-069-1609

微信咨询

返回顶部

发布论文

上传文件

发布论文

上传文件

发布论文

您的论文已提交,我们会尽快联系您,请耐心等待!

知 道 了

登录

点击换一张
点击换一张
已经有账号?立即登录
已经有账号?立即登录

找回密码

找回密码

你的密码已发送到您的邮箱,请查看!

确 定