蔡亮明
(福州大學(xué)至誠(chéng)學(xué)院,福建 福州 350002)
基于串口的USB設(shè)備擴(kuò)展及實(shí)現(xiàn)
蔡亮明
(福州大學(xué)至誠(chéng)學(xué)院,福建 福州 350002)
采用CH376 U盤讀寫模塊來(lái)讀取連接在USB接口上的U盤,通過(guò)串行接口和PC來(lái)進(jìn)行數(shù)據(jù)上的交互,從而解決嵌入式產(chǎn)品中沒(méi)有USB接口而無(wú)法連接USB設(shè)備的問(wèn)題。使用CH376模塊進(jìn)行操作,具有成本低、通用性強(qiáng)、可靠性高等特點(diǎn),可方便地集成到各種系統(tǒng)中。
CH376;串口;USB設(shè)備
隨著嵌入式產(chǎn)品的迅速發(fā)展,越來(lái)越多的廠家在生產(chǎn)的汽車中加入車載導(dǎo)航系統(tǒng)。不過(guò)系統(tǒng)自帶的地圖在一段時(shí)間后可能由于道路改變或紅綠燈增減等問(wèn)題而出現(xiàn)不一致。USB設(shè)備是現(xiàn)在比較流行的數(shù)據(jù)交互的方式,但并不是所有的產(chǎn)品中都集成有USB接口,要解決這個(gè)問(wèn)題,必須在系統(tǒng)中設(shè)置一個(gè)可與USB進(jìn)行數(shù)據(jù)轉(zhuǎn)換的功能,其中一個(gè)解決方法便是在車載系統(tǒng)中加入一個(gè)U盤讀寫模塊用于和U盤進(jìn)行數(shù)據(jù)上的交互,從而實(shí)時(shí)更新地圖等文件。
CH376[1]是由南京沁恒電子有限公司生產(chǎn)的文件管理控制芯片,用于單片機(jī)系統(tǒng)讀寫U盤或者SD卡中的文件。CH376支持USB設(shè)備方式和USB主機(jī)方式[2],并且內(nèi)置了USB通訊協(xié)議的基本固件、處理Mass-Storage海量存儲(chǔ)設(shè)備的專用通訊協(xié)議的固件、SD卡的通訊接口固件、FAT16和FAT32以及FAT12文件系統(tǒng)的管理固件,支持常用的USB存儲(chǔ)設(shè)備(包括U盤/USB硬盤/USB閃存盤/USB讀卡器)和SD卡(包括標(biāo)準(zhǔn)容量SD卡和高容量HC-SD卡以及協(xié)議兼容的MMC卡和TF卡)。
CH376支持3種通訊接口:8位并口、SPI接口和異步串口[3],單片機(jī)/DSP/MCU/MPU等控制器可以通過(guò)上述任何一種通訊接口控制CH376芯片,存取U盤或者SD卡中的文件或者與計(jì)算機(jī)通訊。

圖1 系統(tǒng)硬件框架
系統(tǒng)硬件框架如圖1所示,其中本地端控制器為PC(計(jì)算機(jī)),通過(guò)串行接口連接CH376模塊,將要讀取的USB設(shè)備連接到CH376模塊上,利用CH376的USB文件傳輸協(xié)議對(duì)USB設(shè)備上的文件進(jìn)行讀取,再將USB接口接受的數(shù)據(jù)轉(zhuǎn)換為串口可接受的數(shù)據(jù)類型,經(jīng)由串行通信接口將數(shù)據(jù)發(fā)送到本地端控制器上。
串行接口(見(jiàn)圖2)用來(lái)連接CH376模塊和計(jì)算機(jī),是進(jìn)行數(shù)據(jù)通信的通道。芯片MAX232需要用標(biāo)準(zhǔn)RS232電平與TTL電平進(jìn)行轉(zhuǎn)換,即標(biāo)準(zhǔn)RS232電平很高,達(dá)正負(fù)15V;而常用的TTL電平最高5V。通常用的單片機(jī)是TTL電平(正負(fù)5V),RS232接口的信號(hào)電平與TTL電平不兼容故需使用電平轉(zhuǎn)換電路方能與TTL電路連接。

圖2 串行接口電路表

圖3 CH376操作流程圖

圖4 集成CH376芯片的PCB板
MAX232的10腳T2IN接單片機(jī)的TXD端P3.1,TTL電平從單片機(jī)的TXD端發(fā)出,經(jīng)過(guò)MAX232轉(zhuǎn)換為RS232電平后從MAX232的9腳T1OUT發(fā)出,再經(jīng)過(guò)交叉串口線連接到計(jì)算機(jī)RXD端,計(jì)算機(jī)接收數(shù)據(jù)。PC機(jī)發(fā)送數(shù)據(jù)時(shí)從PC機(jī)串口的TXD端發(fā)出數(shù)據(jù),再逆向流向單片機(jī)的RXD端P3.0接收數(shù)據(jù)。
CH376操作流程圖如圖3所示。通過(guò)VC++6.0上帶有的MSComm控件可以很方便的來(lái)進(jìn)行串口通信,首先要設(shè)定好串口通信的參數(shù)和串行接口號(hào),接著打開(kāi)串口,正式和CH376模塊建立連接,不過(guò)要讓CH376芯片開(kāi)始工作,首先還要先對(duì)CH376芯片進(jìn)行初始化,即對(duì)其工作方式和模式進(jìn)行選擇。初始化芯片和U盤完成后,就可以對(duì)U盤上的文件進(jìn)行操作,可以選擇是在U盤上新建文件或者是打開(kāi)U盤上已存在的文件,將數(shù)據(jù)返回給上位機(jī)并顯示,由于沒(méi)有中文字庫(kù)的原因,所操作的文件名稱只能是大寫英文字母。
1)CH376模塊的安裝 CH376 PCB板是用來(lái)安裝CH376芯片和輔助元器件的,不含單片機(jī),對(duì)外預(yù)留了8位并口、SPI接口、異步串口以及電源端口等,用于連接其他單片機(jī)主板或上位機(jī),并由單片機(jī)主板或上位機(jī)控制CH376進(jìn)行功能操作。將CH376芯片集成到PCB板上,完成后如圖4所示。
2)各模塊的集成 將集成CH376芯片的PCB板和電源模塊和串行接口模塊焊接起來(lái),其中電源模塊和5V、GND 2個(gè)引腳焊接在一起,實(shí)現(xiàn)5V的電源供電。P4端和串行接口模塊相連接,其中P4端是USB端,既可以應(yīng)用在USB-HOST模式,也可以工作在USB-DEVICE模式。連接串行接口模塊后通過(guò)串行接口模塊中的MAX3232電路將信號(hào)轉(zhuǎn)化為RS232電平,從而可以通過(guò)串行接口來(lái)與上位機(jī)上的串行接口進(jìn)行通信。
使用該USB外設(shè)擴(kuò)展設(shè)備時(shí),需將一個(gè)5V直流電源連接在電源接口上并通電,再將串行接口與計(jì)算機(jī)的串行接口相連接,將所要操作的U盤連接到CH376模塊上。至此硬件平臺(tái)的安裝就算完成了。
在VisualC++6.0里新建一個(gè)MFCAppWizard工程,這時(shí)會(huì)出來(lái)一個(gè)基本的對(duì)話框如圖5所示。將軟件流程圖上的各功能做成按鈕放置在對(duì)話框里,如圖6所示。到這里,軟件的基本界面已經(jīng)出來(lái),接下來(lái)所要做的就是將各個(gè)按鈕所要實(shí)現(xiàn)的功能集成在按鈕所對(duì)應(yīng)的函數(shù)里。在DIALOG目錄下插入一個(gè)新的Dialog作為設(shè)置參數(shù)的二級(jí)對(duì)話框,作為設(shè)置串口通信參數(shù)的對(duì)話框,完成后如圖7所示。

圖5 初始對(duì)話框 圖6 進(jìn)階對(duì)話框

圖7 設(shè)置參數(shù)對(duì)話框 圖8 實(shí)際設(shè)置參數(shù)對(duì)話框
1)串口通信功能控件 串口通信功能控件是整個(gè)軟件最為核心的部分,VC++6.0里自帶的MSComm控件是個(gè)功能比較強(qiáng)大的串口通信控件,將其添加到軟件里就能自動(dòng)生成一系列用于串口通信的函數(shù)。
選擇Project菜單下AddToProject子菜單中的ComponentsandControls…選項(xiàng),在彈出的對(duì)話框中雙擊RegisteredActiveXControls項(xiàng)(稍等一會(huì),這個(gè)過(guò)程較慢),則所有注冊(cè)過(guò)的ActiveX控件出現(xiàn)在列表框中。選擇MicrosoftCommunicationsControl,Version6.0,單擊Insert按鈕將它插入到Project中來(lái),接受缺省的選項(xiàng)(如果在控件列表中看不到MicrosoftCommunicationsControl,Version6.0,那可能是在安裝VC++6.0時(shí)沒(méi)有把ActiveX一項(xiàng)選上,重新安裝VC++6.0,選上ActiveX就可以了)。這時(shí)在ClassView視窗中就可以看到CMSComm類了(注意:此類在ClassWizard中看不到,重構(gòu)clw文件也一樣),并且在控件工具欄Controls中出現(xiàn)了電話圖標(biāo),現(xiàn)在要做的是用鼠標(biāo)將此圖標(biāo)拖到對(duì)話框中,程序運(yùn)行后,這個(gè)圖標(biāo)是看不到的。
CMSComm類是由MSComm控件導(dǎo)出的一系列接口函數(shù)構(gòu)成的,利用它將可以訪問(wèn)MSComm控件的屬性和方法。
2)初始化串口 初始化串口要完成的主要任務(wù)是設(shè)定所要工作的串口號(hào)和設(shè)定串口通信的參數(shù),參數(shù)的數(shù)據(jù)格式為“BBBB,P,D,S”。其中BBBB為數(shù)據(jù)傳輸率,P為奇偶校驗(yàn),D為數(shù)據(jù)位數(shù),S為停止位數(shù)。這4個(gè)屬性的缺省值是“9600,n,8,1”。由于后3位一般只有一種情況,故該功能所要實(shí)現(xiàn)的只是設(shè)定所要操作的串行接口號(hào)和數(shù)據(jù)傳輸率。
點(diǎn)擊設(shè)定參數(shù)按鈕,跳出設(shè)定參數(shù)的對(duì)話框,在對(duì)話框的串口號(hào)和波特率里輸入所要操作的串行接口號(hào)和所要設(shè)定的波特率(如圖8所示)。
3)打開(kāi)串口 在設(shè)置好串口通信的串口號(hào)和波特率后,就可以打開(kāi)串口來(lái)建立和CH376模塊的連接,打開(kāi)串口的同時(shí)還要設(shè)定一系列有關(guān)于串口通信的參數(shù),如接收緩沖區(qū)大小、發(fā)送緩沖區(qū)大小、數(shù)據(jù)傳送類型等等。
4)初始化芯片和U盤 初始化芯片和U盤所要完成的工作是設(shè)定好芯片的工作方式和讀寫U盤的模式,將CH376芯片設(shè)定在USB-HOST工作模式和異步串口通信方式,對(duì)U盤進(jìn)行初始化,即檢查U盤是否連接和是否準(zhǔn)備就緒。
5)選擇文件 在已打開(kāi)U盤的基礎(chǔ)上,實(shí)現(xiàn)在U盤上新建一個(gè)指定名稱的文件并將文件打開(kāi),如果文件已存在則直接將文件刪除。如果不新建文件而是在已有的文件上進(jìn)行操作,則直接打開(kāi)指定名稱的文件。
6)文件操作 部分文件操作部分完成3個(gè)功能,在已選定文件的情況下,對(duì)文件進(jìn)行讀取、寫入和刪除,最后關(guān)閉。讀取文件實(shí)現(xiàn)的是將指定文件的內(nèi)容讀取并顯示在軟件視圖中間的文本框中;寫入文件是將發(fā)送內(nèi)容里的文件寫入到所選擇的文件中;刪除文件即將當(dāng)前所打開(kāi)的文件從U盤上刪除;關(guān)閉文件即將當(dāng)前所選擇的文件取消選擇。
車載系統(tǒng)采用的無(wú)線模塊SM5100B-D只有一個(gè)串行通信接口,因此要實(shí)現(xiàn)對(duì)USB外設(shè)的讀寫操作,就要實(shí)現(xiàn)將數(shù)據(jù)從USB接口到串行通信接口的轉(zhuǎn)換,從而保證數(shù)據(jù)文件的正常讀寫。筆者設(shè)計(jì)的系統(tǒng)采用CH376 U盤文件管理模塊,在VC++6.0編程環(huán)境下實(shí)現(xiàn)通過(guò)串行接口對(duì)USB設(shè)備進(jìn)行數(shù)據(jù)讀寫操作,從而實(shí)現(xiàn)嵌入式系統(tǒng)中USB設(shè)備擴(kuò)展的功能。
[1]南京沁恒有限公司.U盤和SD卡文件管理控制芯片CH376手冊(cè)[EB/OL].http://wch.cn,2010-03-17.
[2][美]MindShare.USB系統(tǒng)體系[M].孟文譯.北京:中國(guó)電力出版社,2003.
[3]薛園園.USB應(yīng)用開(kāi)發(fā)實(shí)例詳解[M].北京:人民郵電出版社,2009.
[編輯] 洪云飛
10.3969/j.issn.1673-1409(N).2012.10.037
TP334.7
A
1673-1409(2012)10-N119-04