《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于CPLD/FPGA的USB讀寫(xiě)控制器
基于CPLD/FPGA的USB讀寫(xiě)控制器
單片機(jī)與嵌入式系統(tǒng)
肖小康,張 東,賈慧強(qiáng) 武漢大學(xué)
摘要: 本文針對(duì)信息安全系統(tǒng)設(shè)計(jì)了一種對(duì)USB存儲(chǔ)設(shè)備的讀寫(xiě)控制器。該控制器包括一個(gè)與主機(jī)連接的上游端口,以及安全存儲(chǔ)設(shè)備專用和普通存儲(chǔ)設(shè)備通用兩種下游端口。對(duì)安全存儲(chǔ)設(shè)備使用的硬件接口進(jìn)行異化,以防止普通存儲(chǔ)設(shè)備通過(guò)該口接入;普通存儲(chǔ)設(shè)備采用普通的USB A型口連接??刂破鞑桓深A(yù)主機(jī)和安全存儲(chǔ)設(shè)備的數(shù)據(jù)交換,能夠破壞PC機(jī)寫(xiě)入普通存儲(chǔ)設(shè)備上的數(shù)據(jù)包,從而防止了PC機(jī)上的數(shù)據(jù)通過(guò)普通存儲(chǔ)設(shè)備外泄
關(guān)鍵詞: FPGA USB讀寫(xiě)控制器 CPLD
Abstract:
Key words :

引言
    隨著計(jì)算機(jī)科技的發(fā)展,無(wú)紙辦公日益成為各單位日常辦公的主要形式。而隨著USB存儲(chǔ)設(shè)備日益廣泛的使用,數(shù)據(jù)泄漏的危害也越來(lái)越嚴(yán)重。因此在單位內(nèi)部對(duì)USB存儲(chǔ)設(shè)備的操作權(quán)限進(jìn)行控制是很有必要的。
    本設(shè)計(jì)可將不同的USB存儲(chǔ)設(shè)備(包括安全存儲(chǔ)設(shè)備和普通存儲(chǔ)設(shè)備)通過(guò)不同的接口接入到主機(jī)上,同時(shí)對(duì)主機(jī)和設(shè)備問(wèn)傳輸?shù)臄?shù)據(jù)進(jìn)行提取,分析和攔截。其應(yīng)用范圍比較廣泛,為了方便介紹,本文將其作為USB存儲(chǔ)設(shè)備管理系統(tǒng)的一部分,根據(jù)具體的應(yīng)用來(lái)介紹控制器的設(shè)計(jì)原理。讀寫(xiě)控制器可應(yīng)用在對(duì)PC機(jī)與安全存儲(chǔ)設(shè)備和普通存儲(chǔ)設(shè)備的數(shù)據(jù)共享管理上。其中,PC機(jī)的數(shù)據(jù)要求被保護(hù),安全設(shè)備的使用權(quán)限被嚴(yán)格控制,不會(huì)泄漏數(shù)據(jù);而普通設(shè)備則沒(méi)有采取任何安全措施,很有可能向外泄漏數(shù)據(jù),比如通用的U盤(pán)。
    控制器的主要功能是通過(guò)不同的接口把兩種USB存儲(chǔ)設(shè)備區(qū)分開(kāi)來(lái),實(shí)時(shí)監(jiān)測(cè)PC機(jī)和普通設(shè)備間的數(shù)據(jù),當(dāng)檢測(cè)到PC機(jī)向普通設(shè)備寫(xiě)入數(shù)據(jù)包時(shí),對(duì)其強(qiáng)行破壞,防止數(shù)據(jù)泄漏。

1 硬件原理
    系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。集線器芯片將上游一路USB總線分為兩路:一路直接通過(guò)專用的USB接口與安全存儲(chǔ)設(shè)備連接,另一路通過(guò)讀寫(xiě)控制器和普通存儲(chǔ)設(shè)備連接。讀寫(xiě)控制器采用CPLD、USB轉(zhuǎn)發(fā)器以及外圍電路實(shí)現(xiàn)集線器和普通存儲(chǔ)設(shè)備的連接。在CPLD中設(shè)計(jì)邏輯電路實(shí)現(xiàn)對(duì)USB轉(zhuǎn)發(fā)器傳輸方向的控制,并對(duì)數(shù)據(jù)進(jìn)行分析和攔截,以破壞從PC機(jī)向普通USB存儲(chǔ)設(shè)備傳輸?shù)臄?shù)據(jù),防止泄漏。

b.JPG


    集線器采用的是帶有4個(gè)下游端口的GL850G。其端口傳輸?shù)氖荱SB總線的差分信號(hào),故將其上游端口直接接PC機(jī),下游端口接安全USB存儲(chǔ)設(shè)備或讀寫(xiě)控制器。
    讀寫(xiě)控制器是由1片CPLD和2片USB轉(zhuǎn)發(fā)器及其外圍電路組成。CPLD采用的是Altera公司的EPM3512。它具有10000個(gè)可用的門(mén)、512個(gè)宏單元、208個(gè)可用的I/O引腳,調(diào)試和升級(jí)簡(jiǎn)便,開(kāi)發(fā)十分靈活。市場(chǎng)上關(guān)于USB轉(zhuǎn)接的芯片很多,本文設(shè)計(jì)的讀寫(xiě)控制器要求功能簡(jiǎn)單、性能穩(wěn)定,因此USB轉(zhuǎn)發(fā)器采用TI公司的TUSB1106,既滿足設(shè)計(jì)的要求,也不存在資源浪費(fèi)。該芯片的詳細(xì)介紹見(jiàn)參考文獻(xiàn)。其中VP0、VM0引腳由CPLD驅(qū)動(dòng)。VP、VM和RCV輸人到CPLD中。TUSB1106和CPLD的接口電路如圖2所示。

c.JPG



2 CPLD中的讀寫(xiě)控制電路
    CPLD中的讀寫(xiě)控制電路包括時(shí)鐘提取、包識(shí)別、不歸零解碼、狀態(tài)控制、CBW包識(shí)別和數(shù)據(jù)流控制等模塊,如圖3所示。時(shí)鐘提取部分見(jiàn)參考文獻(xiàn),包識(shí)別和不歸零解碼部分見(jiàn)參考文獻(xiàn)。下面詳細(xì)介紹狀態(tài)控制、CBW包識(shí)別和數(shù)據(jù)流控制3個(gè)模塊。

e.jpg


2.1 狀態(tài)控制模塊
    因?yàn)镮JSB總線是半雙工的,所以CPLD要控制總線數(shù)據(jù)的方向,即通過(guò)OE信號(hào)來(lái)控制TUSB1106是接收總線數(shù)據(jù)還是驅(qū)動(dòng)總線??偩€上所有的傳輸事務(wù)都始于令牌包。令牌包由主機(jī)發(fā)送,指明本次事務(wù)處理過(guò)程的含義,包括數(shù)據(jù)的傳輸方向、設(shè)備的地址及端點(diǎn)號(hào)等信息。
     在本模塊中,通過(guò)對(duì)PID的檢測(cè)可得到每個(gè)包的種類,控制狀態(tài)機(jī)在初始狀態(tài)、主機(jī)發(fā)送數(shù)據(jù)、設(shè)備發(fā)送數(shù)據(jù)、主機(jī)發(fā)送握手包和設(shè)備發(fā)送握手包等幾個(gè)狀態(tài)間跳轉(zhuǎn),從而控制其他模塊的狀態(tài)。下面為狀態(tài)機(jī)的部分代碼:
    f.jpg
    可以看出,當(dāng)令牌包是OUT包(PID為8'hE1)或SETUP包(PID為8'h2D)時(shí),數(shù)據(jù)包由主機(jī)發(fā)往設(shè)備,握手包由設(shè)備返回給主機(jī);如果令牌包是IN包(PID為8'h69)時(shí),則數(shù)據(jù)包由設(shè)備發(fā)給主機(jī),握手包由主機(jī)返回給設(shè)備。在全速模式下,只可能有4種令牌包,除了這3種包外就只可能是SOF包,而該包沒(méi)有后續(xù)的數(shù)據(jù)包和握手包,因此狀態(tài)機(jī)仍為初始狀態(tài)。如果一次傳輸事務(wù)出錯(cuò),沒(méi)有數(shù)據(jù)包或握手包,則主機(jī)和設(shè)備會(huì)通過(guò)超時(shí)來(lái)判斷是否出錯(cuò),而不會(huì)持續(xù)等待。在CPLD中,超時(shí)信號(hào)和系統(tǒng)復(fù)位信號(hào)相與之后作為本模塊的復(fù)位信號(hào)。
2.2 CBW包識(shí)別和數(shù)據(jù)流控制模塊
    USB Mass Storage Device在完成枚舉之后就進(jìn)入到僅批量傳輸模式。在僅批量傳輸協(xié)議中數(shù)據(jù)傳輸分為命令、數(shù)據(jù)和狀態(tài)3個(gè)階段。主機(jī)發(fā)送的命令被封裝成CBW(Command Block Wrapper)包在命令階段發(fā)送,以定義要操作的命令以及要傳輸?shù)臄?shù)據(jù)方向和長(zhǎng)度。CBW的前4個(gè)字節(jié)是標(biāo)志位,第15個(gè)字節(jié)是操作代碼。
    在本設(shè)計(jì)中,借助序列識(shí)別的思想識(shí)別出寫(xiě)命令的CBW,并在接下來(lái)的數(shù)據(jù)階段將標(biāo)志位CBW_flag置位為0,使數(shù)據(jù)流控制模塊截?cái)鄰闹鳈C(jī)發(fā)往設(shè)備的數(shù)據(jù)包。下面為狀態(tài)機(jī)的部分代碼:
    g.jpg
   
    可以看出,只有在檢測(cè)到CBW包中的寫(xiě)命令(操作代碼是8h2A和8hAA)時(shí)才將CBW_flg置0,其余狀態(tài)都為1。
    數(shù)據(jù)流控制模塊完成的工作比較簡(jiǎn)單,主要有3個(gè):
    ①在系統(tǒng)復(fù)位有效或失效時(shí)控制轉(zhuǎn)發(fā)器模擬拔下或插入的過(guò)程;
    ②根據(jù)當(dāng)前的傳輸方向提取總線數(shù)據(jù)以供分析;
    ③cbw_flg無(wú)效時(shí),將上游端口的VP和VM直接賦值給下游端口的VP0
和VM0,同樣將下游端口的VP和VM賦給上游端口的VP0和VM0,否則將上游端口的VM強(qiáng)制置0,使傳輸過(guò)程失敗以阻止數(shù)據(jù)從主機(jī)向普通存儲(chǔ)設(shè)備傳送數(shù)據(jù)。

3 實(shí)驗(yàn)結(jié)果
    控制器完全不干涉主機(jī)和安全USB存儲(chǔ)設(shè)備間的數(shù)據(jù)傳輸。而將普通USB存儲(chǔ)設(shè)備通過(guò)控制器接到PC機(jī)上時(shí),能正常完成除寫(xiě)之外的所有操作。當(dāng)向USB存儲(chǔ)設(shè)備中寫(xiě)入數(shù)據(jù)(包括新建、粘貼、刪除、寫(xiě)入和修改文件)時(shí),系統(tǒng)彈出圖4所示的對(duì)話框,操作無(wú)法完成。

a.JPG



結(jié)語(yǔ)
    本文針對(duì)信息安全系統(tǒng)設(shè)計(jì)了一種對(duì)USB存儲(chǔ)設(shè)備的讀寫(xiě)控制器。該控制器包括一個(gè)與主機(jī)連接的上游端口,以及安全存儲(chǔ)設(shè)備專用和普通存儲(chǔ)設(shè)備通用兩種下游端口。
    對(duì)安全存儲(chǔ)設(shè)備使用的硬件接口進(jìn)行異化,以防止普通存儲(chǔ)設(shè)備通過(guò)該口接入;普通存儲(chǔ)設(shè)備采用普通的USB A型口連接。
    控制器不干預(yù)主機(jī)和安全存儲(chǔ)設(shè)備的數(shù)據(jù)交換,能夠破壞PC機(jī)寫(xiě)入普通存儲(chǔ)設(shè)備上的數(shù)據(jù)包,從而防止了PC機(jī)上的數(shù)據(jù)通過(guò)普通存儲(chǔ)設(shè)備外泄。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。