,,,,,
(1.北京智芯微電子科技有限公司 國(guó)家電網(wǎng)公司重點(diǎn)實(shí)驗(yàn)室 電力芯片設(shè)計(jì)分析實(shí)驗(yàn)室,北京 100192;2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計(jì)工程技術(shù)研究中心)
在芯片驗(yàn)證中,一般針對(duì)芯片內(nèi)每一個(gè)模塊都會(huì)做相應(yīng)的功能驗(yàn)證和性能驗(yàn)證。其中功能驗(yàn)證是最基本的驗(yàn)證內(nèi)容,只有在功能驗(yàn)證的基礎(chǔ)上才可開(kāi)展性能驗(yàn)證。本文研究的一款MCU中包含了USB模塊,在嵌入式MCU中,USB協(xié)議相對(duì)于其他一些基本的傳輸協(xié)議較為復(fù)雜,USB模塊驗(yàn)證工作自然也是重點(diǎn)和難點(diǎn)。本文即對(duì)USB的基本協(xié)議內(nèi)容和部分驗(yàn)證方法做了闡述。
USB規(guī)范中定義了USB主機(jī)和USB設(shè)備。主機(jī)作為通信的發(fā)起方,在整個(gè)通信中占有主導(dǎo)地位。下面就USB通信的數(shù)據(jù)流、主機(jī)與設(shè)備之間的識(shí)別來(lái)概括介紹一下這些基本概念。同時(shí)為了方便介紹后面的測(cè)試方法,這里還對(duì)FAT32進(jìn)行簡(jiǎn)單介紹。
USB—通用串行總線,顧名思義其傳輸?shù)臄?shù)據(jù)是由一位一位的串行二進(jìn)制構(gòu)成的。若干位二進(jìn)制構(gòu)成了USB域,若干個(gè)域組合構(gòu)成USB包,兩個(gè)或三個(gè)包組合構(gòu)成事務(wù),一個(gè)或多個(gè)事務(wù)組成傳輸,在應(yīng)用層面還把實(shí)現(xiàn)不同功能的USB設(shè)備類(lèi)型歸為不同的USB類(lèi)。下面分別介紹USB的域、包、事務(wù)、傳輸和類(lèi)。圖1是USB通信單元的關(guān)系分層圖。
圖1 USB通信單元分層圖
① 域是USB的最小單位,由若干位組成,可分為7種類(lèi)型:同步域、標(biāo)識(shí)域、地址域、端點(diǎn)域、幀號(hào)域、數(shù)據(jù)域、校驗(yàn)域。
② 包由若干域構(gòu)成,分為4種類(lèi)型,分別是令牌包、數(shù)據(jù)包、握手包和特殊包,不同類(lèi)的包又分成幾種具體的包(見(jiàn)圖1)。
③ USB事務(wù)是指向端點(diǎn)傳遞的服務(wù),通常是由令牌包、可選的數(shù)據(jù)包和可選的握手包組成。
④ USB傳輸是在客戶(hù)軟件程序及其功能設(shè)備之間移動(dòng)信息的一個(gè)或多個(gè)USB事務(wù),分為控制傳輸、中斷傳輸、同步(等時(shí))傳輸、批量傳輸4種傳輸類(lèi)型。這里說(shuō)一下批量傳輸,批量傳輸可通過(guò)錯(cuò)誤檢測(cè)和重試的方法保證數(shù)據(jù)在主機(jī)和設(shè)備之間無(wú)錯(cuò)誤的傳輸。批量傳輸包括了三個(gè)階段:令牌、數(shù)據(jù)和握手。圖2所示是批量傳輸事務(wù)流程的示意圖(PING和NYET包只能在高速操作的設(shè)備中使用)。
圖2 批量傳輸事務(wù)流程的示意圖
圖4 FAT32文件系統(tǒng)結(jié)構(gòu)
⑤ 類(lèi)不屬于通信單元,是在應(yīng)用的層面把USB加以區(qū)分,USB類(lèi)的數(shù)據(jù)通信由一種或幾種傳輸完成,比如常用的U盤(pán)設(shè)備是大容量存儲(chǔ)類(lèi)(Mass Storage Class,MSC),鍵盤(pán)/鼠標(biāo)設(shè)備是人機(jī)接口類(lèi)(Human Interface Devices,HID)。
USB總線由VBUS、D-、D+、GND四根線構(gòu)成,USB的數(shù)據(jù)傳送依靠D+、D-這對(duì)差分信號(hào)線。在USB設(shè)備接入U(xiǎn)SB主機(jī)時(shí),主機(jī)通過(guò)D+或D-上的電平變化來(lái)檢測(cè)設(shè)備的接入;識(shí)別到有USB設(shè)備后,USB主機(jī)采用USB標(biāo)準(zhǔn)請(qǐng)求獲取USB設(shè)備的相關(guān)信息并作相應(yīng)的設(shè)置,配置完成USB的枚舉過(guò)程。圖3是USB枚舉過(guò)程流程圖。
圖3 USB枚舉過(guò)程
① USB主機(jī)復(fù)位,USB總線獲得一個(gè)確定的總線狀態(tài);
② USB主機(jī)通過(guò)默認(rèn)0地址獲取USB設(shè)備的設(shè)備描述符(前8字節(jié),從而知道端點(diǎn)0的最大包長(zhǎng));
③ USB主機(jī)再次復(fù)位USB總線;
④ USB主機(jī)給USB設(shè)備分配一個(gè)地址;
⑤ USB主機(jī)通過(guò)分配的地址獲取USB設(shè)備的設(shè)備描述符(全部);
⑥ USB主機(jī)獲取USB設(shè)備的配置描述符(前8字節(jié));
⑦ USB主機(jī)獲取USB設(shè)備的配置描述符集合(配置描述符、接口描述符、類(lèi)特殊描述符、端點(diǎn)描述符);
⑧ USB主機(jī)獲取USB設(shè)備的字符串描述符和語(yǔ)言描述符;
⑨ USB主機(jī)設(shè)置USB設(shè)備的配置(因?yàn)榕渲每赡懿恢挂粋€(gè),由主機(jī)控制使用哪個(gè)配置)。
FAT32文件系統(tǒng)是一種比較常見(jiàn)的文件系統(tǒng),其內(nèi)部結(jié)構(gòu)組成如圖4所示,包括保留區(qū)、FAT區(qū)和數(shù)據(jù)區(qū)。
保留區(qū)中包含了DBR(系統(tǒng)引導(dǎo)扇區(qū))和FSINFO,DBR在文件系統(tǒng)的0扇區(qū)處,其包含了文件系統(tǒng)的各種配置信息(文件系統(tǒng)大小、FAT區(qū)起始地址、FAT區(qū)大小、數(shù)據(jù)起始地址等)。FSINFO記錄文件系統(tǒng)剩余簇的數(shù)量及下一個(gè)可用簇的簇號(hào)信息。
FAT區(qū)的大小和起始地址可通過(guò)DBR中的相關(guān)信息確定。FAT區(qū)包括了兩個(gè)完全相同的FAT表,F(xiàn)AT表中按4字節(jié)一個(gè)表項(xiàng)劃分。通過(guò)FAT表項(xiàng)可以描述簇的狀態(tài)及表明文件或目錄的下一簇的簇號(hào)。
數(shù)據(jù)區(qū)是真正用于數(shù)據(jù)存儲(chǔ)的區(qū)域。數(shù)據(jù)區(qū)下包含了目錄和文件,文件系統(tǒng)的第一個(gè)目錄被稱(chēng)為根目錄。目錄下包含了一條條的目錄項(xiàng),記錄著此目錄下文件的以下信息:文件大小、文件創(chuàng)建時(shí)間、文件修改時(shí)間、文件的起始地址等。
文件系統(tǒng)在被PC識(shí)別時(shí)首先獲取DBR信息,解析DBR計(jì)算出FAT區(qū)和數(shù)據(jù)區(qū)的地址和大小,并定位根目錄起始地址。通過(guò)目錄中的目錄項(xiàng)獲取文件的起始位置,若文件大于一個(gè)簇,PC會(huì)通過(guò)FAT表找到存儲(chǔ)文件的下一個(gè)簇的地址。至此,PC即可訪問(wèn)整個(gè)文件系統(tǒng)的文件。
測(cè)試MCU的USB模塊是依照上述介紹的內(nèi)容將MCU實(shí)現(xiàn)成為了一個(gè)虛擬的U盤(pán),虛擬U盤(pán)的文件系統(tǒng)采用FAT32。通過(guò)測(cè)試虛擬U盤(pán)來(lái)測(cè)試USB模塊的功能。
U盤(pán)是一個(gè)大容量存儲(chǔ)的USB設(shè)備,使用的是批量傳輸,其指令采用了SCSI指令集。在按照上述內(nèi)容實(shí)現(xiàn)了USB的枚舉和讀寫(xiě)的同時(shí),還需要實(shí)現(xiàn)SCSI指令集的處理,其處理過(guò)程如圖5所示。下面是相應(yīng)的指令解釋。
① Test Unit Ready:用于監(jiān)測(cè)U盤(pán)是否處于準(zhǔn)備好的狀態(tài),對(duì)于可移除磁盤(pán),PC會(huì)每秒發(fā)送一次此指令。
② Inquiry:獲取U盤(pán)設(shè)備的一些基本信息,如是否為可移除磁盤(pán)、ISO版本號(hào)、ANSI版本號(hào)等內(nèi)容。
③ Read Format Capacity:獲取U盤(pán)格式化容量信息。
④ Read Capacity:獲取U盤(pán)容量信息。
⑤ Read10:讀取U盤(pán)內(nèi)容的指令,可根據(jù)指定地址讀取相應(yīng)存儲(chǔ)空間的信息。
⑥ Write10:寫(xiě)U盤(pán)指令,可以向指定的地址空間寫(xiě)入相應(yīng)的數(shù)據(jù)。
圖5 U盤(pán)SCSI指令處理流程圖
本次目標(biāo)是驗(yàn)證USB的批量傳輸,并不需要涉及到存儲(chǔ)的操作,所以這里的U盤(pán)文件系統(tǒng)被枚舉掛載的是虛擬U盤(pán)。U盤(pán)掛載到PC之后,PC對(duì)U盤(pán)的數(shù)據(jù)讀取操作是從MCU固定RAM地址讀取固定數(shù)據(jù),PC對(duì)U盤(pán)的數(shù)據(jù)寫(xiě)入操作直接被MCU丟棄。虛擬U盤(pán)文件系統(tǒng)之所以能在PC上顯示出已格式化的磁盤(pán)設(shè)備,是因?yàn)槠湓赑C讀取對(duì)應(yīng)的FAT32文件系統(tǒng)保留區(qū)、FAT區(qū)、數(shù)據(jù)區(qū)地址內(nèi)容時(shí)返回了相應(yīng)的文件系統(tǒng)數(shù)據(jù)。圖6是PC識(shí)別U盤(pán)FAT32文件系統(tǒng)的流程圖。
圖6 PC識(shí)別U盤(pán)FAT32文件系統(tǒng)流程圖
虛擬U盤(pán)的文件系統(tǒng)掛載是為了測(cè)試USB模塊的批量傳輸,不必要具體參與DBR、FAT、數(shù)據(jù)區(qū)內(nèi)容的編輯。本驗(yàn)證通過(guò)格式化一個(gè)普通U盤(pán),使用WinHex軟件獲取相應(yīng)文件系統(tǒng)區(qū)域的內(nèi)容和對(duì)應(yīng)地址。圖7是通過(guò)WinHex軟件獲取文件系統(tǒng)關(guān)鍵區(qū)域的方法,按照此方法依次獲取DBR、FAT區(qū)和數(shù)據(jù)區(qū)的地址和內(nèi)容,將獲取的數(shù)據(jù)應(yīng)用在圖6所示的流程圖對(duì)應(yīng)的程序段中。
圖7 U盤(pán)DBR獲取方法示意圖
首先,可以通過(guò)上述方式實(shí)現(xiàn)U盤(pán)功能,能夠枚舉并且掛載磁盤(pán),已經(jīng)可以說(shuō)明USB通路的通信是能正常運(yùn)行的。
其次,在U盤(pán)正常枚舉之后可以通過(guò)U盤(pán)測(cè)試軟件測(cè)試其速度性能。圖8是MCU USB作為U盤(pán)時(shí)的讀寫(xiě)性能測(cè)試結(jié)果(寫(xiě)為20.1 MB/s,讀為23.7 MB/s)。
最后,可通過(guò)PC軟件長(zhǎng)時(shí)間不間斷地對(duì)U盤(pán)進(jìn)行讀寫(xiě),測(cè)試USB通信功能的穩(wěn)定性。
圖8 虛擬U盤(pán)速度測(cè)試結(jié)果