基于串口的USB设备扩展及实现
2012-11-20蔡亮明
蔡亮明
(福州大学至诚学院,福建 福州 350002)
基于串口的USB设备扩展及实现
蔡亮明
(福州大学至诚学院,福建 福州 350002)
采用CH376 U盘读写模块来读取连接在USB接口上的U盘,通过串行接口和PC来进行数据上的交互,从而解决嵌入式产品中没有USB接口而无法连接USB设备的问题。使用CH376模块进行操作,具有成本低、通用性强、可靠性高等特点,可方便地集成到各种系统中。
CH376;串口;USB设备
随着嵌入式产品的迅速发展,越来越多的厂家在生产的汽车中加入车载导航系统。不过系统自带的地图在一段时间后可能由于道路改变或红绿灯增减等问题而出现不一致。USB设备是现在比较流行的数据交互的方式,但并不是所有的产品中都集成有USB接口,要解决这个问题,必须在系统中设置一个可与USB进行数据转换的功能,其中一个解决方法便是在车载系统中加入一个U盘读写模块用于和U盘进行数据上的交互,从而实时更新地图等文件。
1 CH376芯片
CH376[1]是由南京沁恒电子有限公司生产的文件管理控制芯片,用于单片机系统读写U盘或者SD卡中的文件。CH376支持USB设备方式和USB主机方式[2],并且内置了USB通讯协议的基本固件、处理Mass-Storage海量存储设备的专用通讯协议的固件、SD卡的通讯接口固件、FAT16和FAT32以及FAT12文件系统的管理固件,支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB读卡器)和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。
CH376支持3种通讯接口:8位并口、SPI接口和异步串口[3],单片机/DSP/MCU/MPU等控制器可以通过上述任何一种通讯接口控制CH376芯片,存取U盘或者SD卡中的文件或者与计算机通讯。
2 系统硬件设计
图1 系统硬件框架
2.1 系统硬件框架
系统硬件框架如图1所示,其中本地端控制器为PC(计算机),通过串行接口连接CH376模块,将要读取的USB设备连接到CH376模块上,利用CH376的USB文件传输协议对USB设备上的文件进行读取,再将USB接口接受的数据转换为串口可接受的数据类型,经由串行通信接口将数据发送到本地端控制器上。
2.2 串行接口设计
串行接口(见图2)用来连接CH376模块和计算机,是进行数据通信的通道。芯片MAX232需要用标准RS232电平与TTL电平进行转换,即标准RS232电平很高,达正负15V;而常用的TTL电平最高5V。通常用的单片机是TTL电平(正负5V),RS232接口的信号电平与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
图2 串行接口电路表
图3 CH376操作流程图
图4 集成CH376芯片的PCB板
MAX232的10脚T2IN接单片机的TXD端P3.1,TTL电平从单片机的TXD端发出,经过MAX232转换为RS232电平后从MAX232的9脚T1OUT发出,再经过交叉串口线连接到计算机RXD端,计算机接收数据。PC机发送数据时从PC机串口的TXD端发出数据,再逆向流向单片机的RXD端P3.0接收数据。
3 软件设计
CH376操作流程图如图3所示。通过VC++6.0上带有的MSComm控件可以很方便的来进行串口通信,首先要设定好串口通信的参数和串行接口号,接着打开串口,正式和CH376模块建立连接,不过要让CH376芯片开始工作,首先还要先对CH376芯片进行初始化,即对其工作方式和模式进行选择。初始化芯片和U盘完成后,就可以对U盘上的文件进行操作,可以选择是在U盘上新建文件或者是打开U盘上已存在的文件,将数据返回给上位机并显示,由于没有中文字库的原因,所操作的文件名称只能是大写英文字母。
4 USB外设扩展的实现
4.1 硬件电路的安装
1)CH376模块的安装 CH376 PCB板是用来安装CH376芯片和辅助元器件的,不含单片机,对外预留了8位并口、SPI接口、异步串口以及电源端口等,用于连接其他单片机主板或上位机,并由单片机主板或上位机控制CH376进行功能操作。将CH376芯片集成到PCB板上,完成后如图4所示。
2)各模块的集成 将集成CH376芯片的PCB板和电源模块和串行接口模块焊接起来,其中电源模块和5V、GND 2个引脚焊接在一起,实现5V的电源供电。P4端和串行接口模块相连接,其中P4端是USB端,既可以应用在USB-HOST模式,也可以工作在USB-DEVICE模式。连接串行接口模块后通过串行接口模块中的MAX3232电路将信号转化为RS232电平,从而可以通过串行接口来与上位机上的串行接口进行通信。
使用该USB外设扩展设备时,需将一个5V直流电源连接在电源接口上并通电,再将串行接口与计算机的串行接口相连接,将所要操作的U盘连接到CH376模块上。至此硬件平台的安装就算完成了。
4.2 软件界面的实现
在VisualC++6.0里新建一个MFCAppWizard工程,这时会出来一个基本的对话框如图5所示。将软件流程图上的各功能做成按钮放置在对话框里,如图6所示。到这里,软件的基本界面已经出来,接下来所要做的就是将各个按钮所要实现的功能集成在按钮所对应的函数里。在DIALOG目录下插入一个新的Dialog作为设置参数的二级对话框,作为设置串口通信参数的对话框,完成后如图7所示。
图5 初始对话框 图6 进阶对话框
图7 设置参数对话框 图8 实际设置参数对话框
4.3 软件功能的实现
1)串口通信功能控件 串口通信功能控件是整个软件最为核心的部分,VC++6.0里自带的MSComm控件是个功能比较强大的串口通信控件,将其添加到软件里就能自动生成一系列用于串口通信的函数。
选择Project菜单下AddToProject子菜单中的ComponentsandControls…选项,在弹出的对话框中双击RegisteredActiveXControls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择MicrosoftCommunicationsControl,Version6.0,单击Insert按钮将它插入到Project中来,接受缺省的选项(如果在控件列表中看不到MicrosoftCommunicationsControl,Version6.0,那可能是在安装VC++6.0时没有把ActiveX一项选上,重新安装VC++6.0,选上ActiveX就可以了)。这时在ClassView视窗中就可以看到CMSComm类了(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标,现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
CMSComm类是由MSComm控件导出的一系列接口函数构成的,利用它将可以访问MSComm控件的属性和方法。
2)初始化串口 初始化串口要完成的主要任务是设定所要工作的串口号和设定串口通信的参数,参数的数据格式为“BBBB,P,D,S”。其中BBBB为数据传输率,P为奇偶校验,D为数据位数,S为停止位数。这4个属性的缺省值是“9600,n,8,1”。由于后3位一般只有一种情况,故该功能所要实现的只是设定所要操作的串行接口号和数据传输率。
点击设定参数按钮,跳出设定参数的对话框,在对话框的串口号和波特率里输入所要操作的串行接口号和所要设定的波特率(如图8所示)。
3)打开串口 在设置好串口通信的串口号和波特率后,就可以打开串口来建立和CH376模块的连接,打开串口的同时还要设定一系列有关于串口通信的参数,如接收缓冲区大小、发送缓冲区大小、数据传送类型等等。
4)初始化芯片和U盘 初始化芯片和U盘所要完成的工作是设定好芯片的工作方式和读写U盘的模式,将CH376芯片设定在USB-HOST工作模式和异步串口通信方式,对U盘进行初始化,即检查U盘是否连接和是否准备就绪。
5)选择文件 在已打开U盘的基础上,实现在U盘上新建一个指定名称的文件并将文件打开,如果文件已存在则直接将文件删除。如果不新建文件而是在已有的文件上进行操作,则直接打开指定名称的文件。
6)文件操作 部分文件操作部分完成3个功能,在已选定文件的情况下,对文件进行读取、写入和删除,最后关闭。读取文件实现的是将指定文件的内容读取并显示在软件视图中间的文本框中;写入文件是将发送内容里的文件写入到所选择的文件中;删除文件即将当前所打开的文件从U盘上删除;关闭文件即将当前所选择的文件取消选择。
5 结 语
车载系统采用的无线模块SM5100B-D只有一个串行通信接口,因此要实现对USB外设的读写操作,就要实现将数据从USB接口到串行通信接口的转换,从而保证数据文件的正常读写。笔者设计的系统采用CH376 U盘文件管理模块,在VC++6.0编程环境下实现通过串行接口对USB设备进行数据读写操作,从而实现嵌入式系统中USB设备扩展的功能。
[1]南京沁恒有限公司.U盘和SD卡文件管理控制芯片CH376手册[EB/OL].http://wch.cn,2010-03-17.
[2][美]MindShare.USB系统体系[M].孟文译.北京:中国电力出版社,2003.
[3]薛园园.USB应用开发实例详解[M].北京:人民邮电出版社,2009.
[编辑] 洪云飞
10.3969/j.issn.1673-1409(N).2012.10.037
TP334.7
A
1673-1409(2012)10-N119-04