黃學(xué)達,楊俊杰,侯志鵬,黃俞霖,章世博
(重慶郵電大學(xué) 自動化學(xué)院,重慶 400065)
傳統(tǒng)USB Mass Storage類的設(shè)備俗稱U盤,是即插即用裝置,使用現(xiàn)有的“標(biāo)準(zhǔn)”設(shè)備驅(qū)動程序,無須安裝任何設(shè)備驅(qū)動即可用于所有系統(tǒng)運行。當(dāng)操作系統(tǒng)檢查到USB裝置插入時,就會自動詢問該裝置相關(guān)參數(shù)以了解其能力和要求,并自動將適合的驅(qū)動程序加載到操作系統(tǒng)中,用戶就可以正常使用該設(shè)備。當(dāng)該設(shè)備從USB接口拔出時,操作系統(tǒng)就會自動停止該設(shè)備的使用并卸載其驅(qū)動程序。USB裝置與其內(nèi)部存儲的軟件(固件)一起銷售,用于控制該裝置(即下位機)的運行,其一般采用通用的標(biāo)準(zhǔn)驅(qū)動程序,只對PC端(上位機)下發(fā)的讀取、寫入、擦除等相關(guān)標(biāo)準(zhǔn)命令作出響應(yīng)。
USB接口在PC及消費電子等領(lǐng)域普及率高,因此該種傳輸方式應(yīng)用范圍很廣泛。但也存在以下缺點:傳統(tǒng)USB Mass Storage類設(shè)備只能滿足簡單的數(shù)據(jù)傳輸需求,不能支持其他擴展命令(如嵌入式調(diào)試設(shè)備常用的調(diào)試命令)傳輸?shù)裙δ?;在?shù)據(jù)傳輸過程中如果出現(xiàn)意外中斷(如U盤意外復(fù)位、斷電等情況),數(shù)據(jù)傳輸命令在U盤重新連接后無法繼續(xù)執(zhí)行。
4G、5G手機和相關(guān)終端模塊以及Cat1、eMTC、NB-IoT等通信終端在出廠前必須要對射頻參數(shù)進行校準(zhǔn)、綜測,射頻參數(shù)的校準(zhǔn)、綜測指標(biāo)主要有APC(自動功率控制)、AGC(自動增益控制)、AFC(自動頻率控制)等,耗時大約2~3 min。通信終端校準(zhǔn)、綜測的硬件接口一般采用USB接口,使用夾具頂針的方式去接觸電路板上的測試點,從而完成信號的連通。在實際的工廠校準(zhǔn)、綜測過程中若存在通信終端設(shè)備異常斷電或者USB松動,就會導(dǎo)致校準(zhǔn)、綜測失敗。為了提高效率,需要在USB接口重新插好后繼續(xù)從上次中斷的地方進行射頻參數(shù)的校準(zhǔn)和綜測。
本文研究的主要目的是:針對下位機在未執(zhí)行上位機命令而掉電的情況,提供一種在下次上電時使其繼續(xù)執(zhí)行未完成操作的方案。
USB Mass Storage設(shè)備采用FLASH進行數(shù)據(jù)存儲,F(xiàn)LASH具有在掉電后數(shù)據(jù)不會丟失的特點。通過上位機在USB Mass Storage設(shè)備中劃分出命令交互區(qū)等,供異常斷電恢復(fù)后去判斷是否需要繼續(xù)執(zhí)行上次未執(zhí)行完的操作。
本方案的主要思想是采用先存儲命令(含命令所需數(shù)據(jù))然后再執(zhí)行命令的方式。具體實施方案由在PC側(cè)運行的上位機軟件部分和與之通過USB口連接且以Mass Storage類枚舉到PC的下位機完成。在U盤中設(shè)置特定的命令和數(shù)據(jù)交互區(qū)(A區(qū)和B區(qū)),如圖1(基本型)和圖2(擴展模式)所示,上位機發(fā)送給下位機的所有命令,包括標(biāo)準(zhǔn)的USB讀寫命令以及擴展命令,都使用標(biāo)準(zhǔn)USB寫命令數(shù)據(jù)包發(fā)送到A區(qū),實際的命令作為數(shù)據(jù)封裝到USB標(biāo)準(zhǔn)數(shù)據(jù)包中;USB設(shè)備將接收到的包含命令的數(shù)據(jù)包寫入A區(qū)指定地址,并定時查詢A區(qū)數(shù)據(jù),如果查詢到A區(qū)中存在命令,解析命令并執(zhí)行,完成后將A區(qū)中的命令改寫為命令響應(yīng)。
圖1 上下位機的命令和數(shù)據(jù)交互區(qū)分布圖(基本型)
圖2 上下位機的命令和數(shù)據(jù)交互區(qū)分布圖(擴展型)
USB設(shè)備上電枚舉成功后,上位機讀取A區(qū)中的數(shù)據(jù),如果是響應(yīng)包,則發(fā)送新命令;如果不是響應(yīng)包,則等待USB設(shè)備執(zhí)行A區(qū)中的命令。將上位機給下位機的命令寫入命令交互區(qū)的格式如圖3所示,而當(dāng)命令執(zhí)行完成后下位機寫入命令交互區(qū)的格式如圖4所示,各個“保留區(qū)間”作為數(shù)據(jù)保護及今后功能擴展使用;數(shù)據(jù)區(qū)格式如圖5所示。根據(jù)上述方式擴展而來的衍生型多個命令/響應(yīng)包組合寫入、響應(yīng)方式如圖6、圖7所示,對應(yīng)多個命令/響應(yīng)包的數(shù)據(jù)區(qū)格式如圖8所示。
圖3 命令交互區(qū)(A區(qū))的命令包格式(基本型)
圖4 命令交互區(qū)(A區(qū))的響應(yīng)包格式(基本型)
圖5 數(shù)據(jù)區(qū)格式(基本型)
圖6 命令交互區(qū)(A區(qū))的命令包格式(擴展型)
圖7 命令交互區(qū)(A區(qū))的響應(yīng)包格式(擴展型)
圖8 數(shù)據(jù)區(qū)格式(擴展型)
完成整個功能時,將用戶下發(fā)的各種操作轉(zhuǎn)換為下位機支持的對應(yīng)命令或命令集,同時對用戶的操作對象(一般是各種數(shù)據(jù))進行拆包、分段等預(yù)處理操作;
(3)命令包、數(shù)據(jù)包打包組裝單元:以規(guī)定方式將命令執(zhí)行碼、命令執(zhí)行起始地址、命令執(zhí)行長度及數(shù)據(jù)文件分別打包成有效的命令包、數(shù)據(jù)包;
(4)響應(yīng)包及響應(yīng)數(shù)據(jù)解析處理單元:將獲取到的響應(yīng)
由于普通的Mass Storage類設(shè)備只能對上位機(PC)的讀取、寫入、擦除等操作命令進行對應(yīng)命令響應(yīng),無法滿足對U盤約定偏移地址的命令交互區(qū)參數(shù)及數(shù)據(jù)交互區(qū)數(shù)據(jù)的讀/寫操作要求,因此下位機需要額外使用本方案的功能支持模塊(軟件或硬件方式)來實現(xiàn)上述功能;同樣上位機需要運行一個額外的軟件或軟/硬件模塊來支持該功能。如圖9所示為添加了上下位機功能支持模塊的結(jié)構(gòu)框圖。新增模塊的內(nèi)部各功能單元結(jié)構(gòu)框圖如圖10所示。
圖9 本方案功能支持模塊的上下位機結(jié)構(gòu)框圖
圖10 上下位機功能支持模塊的內(nèi)部子模塊框圖
1.2.1 上位機功能支持模塊
上位機功能支持模塊的功能如下:
(1)界面顯示、用戶操作響應(yīng)單元:對用戶執(zhí)行的各種操作進行響應(yīng),以及對命令執(zhí)行進度、結(jié)果進行顯示,同時也為各種設(shè)置選項提供輸入接口;
(2)用戶操作命令或命令集轉(zhuǎn)換單元:當(dāng)單個命令無法信息按規(guī)定方式拆包、解析,判斷命令執(zhí)行的響應(yīng)結(jié)果,提取響應(yīng)數(shù)據(jù),并在需要的情況下對響應(yīng)數(shù)據(jù)重新組包、恢復(fù)成超大數(shù)據(jù)包傳回給上位機;
(5)命令數(shù)據(jù)緩存及執(zhí)行結(jié)果記錄單元:記錄當(dāng)前USB設(shè)備的ID號及其在命令執(zhí)行時緩存本條命令的命令包、數(shù)據(jù)包信息,并隨時記錄該命令的執(zhí)行情況,以便當(dāng)本條命令執(zhí)行失敗時,上位機能夠重新下發(fā)該命令或完成上次操作未完成的響應(yīng)數(shù)據(jù)獲取工作;
(6)A/B區(qū)數(shù)據(jù)讀寫單元:完成對指定偏移地址的A/B區(qū)數(shù)據(jù)的讀寫功能;
(7)命令執(zhí)行流程維護單元:對以上單元的功能執(zhí)行情況進行判斷維護,判斷當(dāng)前命令是否執(zhí)行失敗、是否重新執(zhí)行當(dāng)前命令、是否需要提示用戶干預(yù)操作以及通過USB的ID判斷當(dāng)前USB設(shè)備是否有上次未完成的操作等。
1.2.2 下位機功能支持模塊
下位機功能支持模塊的功能如下:
(1)A/B區(qū)數(shù)據(jù)讀寫單元:完成對指定偏移地址的A/B區(qū)數(shù)據(jù)的讀(獲取命令包)/寫(寫入響應(yīng)包)功能,特別是以固定時間間隔輪詢A區(qū)數(shù)據(jù),以便隨時獲取上位機下發(fā)的命令;
(2)命令包、數(shù)據(jù)包解析及有效性判斷單元:以規(guī)定方式將命令包、數(shù)據(jù)包進行解析,并判斷其有效性及是否支持該命令等;
(3)命令執(zhí)行單元:將命令包里的命令執(zhí)行碼轉(zhuǎn)換為對應(yīng)的一系列下位機操作過程,并使用數(shù)據(jù)包里的數(shù)據(jù)來具體執(zhí)行該操作;
(4)響應(yīng)包及響應(yīng)數(shù)據(jù)組裝單元:將由命令執(zhí)行單元執(zhí)行后的結(jié)果以執(zhí)行響應(yīng)碼及響應(yīng)數(shù)據(jù)的方式分別打包成命令執(zhí)行響應(yīng)包及響應(yīng)數(shù)據(jù)包以便向A/B區(qū)寫入。
上位機和下位機的具體實現(xiàn)以基本型命令執(zhí)行過程為例進行詳細描述。
上位機下發(fā)命令執(zhí)行流程如圖11所示,上位機在下發(fā)新命令之前會先通過USB的ID號判斷USB設(shè)備是否有上次未執(zhí)行完的操作,如果沒有,則按照正常流程分別根據(jù)用戶的操作情況生成命令執(zhí)行碼及對應(yīng)數(shù)據(jù),再按照規(guī)定組裝成命令包、數(shù)據(jù)包,并經(jīng)過上位機緩存記錄后分別寫入對應(yīng)的A/B區(qū),即完成本條命令的下發(fā)過程。在命令下發(fā)后,上位機就不停地查詢A區(qū)數(shù)據(jù),以判斷是否有下位機執(zhí)行完成的響應(yīng)包寫回;在規(guī)定時間內(nèi)獲取響應(yīng)包及響應(yīng)數(shù)據(jù)后,上位機就進行解包及命令執(zhí)行結(jié)果判斷等工作。至此本條命令交互流程就完成了,上位機可以進入下一條命令的下發(fā)交互流程。如果以上任意流程執(zhí)行失敗或下位機寫回響應(yīng)包超時,該條命令將會標(biāo)記為執(zhí)行失敗,可以根據(jù)設(shè)置情況重新下發(fā)命令、暫停命令執(zhí)行流程或要求用戶干預(yù)。
圖11 上位機下發(fā)命令執(zhí)行流程
如果當(dāng)前USB設(shè)備的上次命令未執(zhí)行完成,上位機會讀取下位機A區(qū)的數(shù)據(jù),并判斷其是否為上次命令的正常響應(yīng)包,如果是,就將該響應(yīng)包及響應(yīng)數(shù)據(jù)獲取回來,以便完成上次遺留的命令交互過程,然后再進行新命令的下發(fā)操作;如果不是響應(yīng)包而是命令包,說明上次命令的響應(yīng)包還未被下位機寫入,在判斷A/B區(qū)數(shù)據(jù)與緩存數(shù)據(jù)一致的情況下,上位機在等待下位機將該命令執(zhí)行完并寫入響應(yīng)包、響應(yīng)數(shù)據(jù)包后,再獲取響應(yīng)數(shù)據(jù),以便完成上次未完成的命令,然后再發(fā)新命令。如果上位機發(fā)現(xiàn)A/B區(qū)數(shù)據(jù)與緩存數(shù)據(jù)不一致,將重寫A/B區(qū)以便上次的命令能夠正確執(zhí)行,再進行上述操作。
下位機模塊對于本方案的基本型命令執(zhí)行流程如圖12所示。下位機均為以一定時間間隔輪詢A、B區(qū)的信息,以便及時判斷上位機是否有新命令下發(fā)。在獲取到上位機寫入的命令包后,確認命令包及數(shù)據(jù)包有效的情況下就會加載數(shù)據(jù)并執(zhí)行該命令執(zhí)行碼對應(yīng)的操作,再把執(zhí)行結(jié)果(響應(yīng)包及響應(yīng)數(shù)據(jù))寫入指定地址中,從而完成一個命令碼的執(zhí)行過程。
圖12 下位機接收命令并執(zhí)行的流程
如果下位機檢查到A/B區(qū)數(shù)據(jù)不是合法的命令/數(shù)據(jù)包,可能為上次命令執(zhí)行后寫入的正常響應(yīng)包,或被破壞的命令/數(shù)據(jù)包,就不會執(zhí)行任何操作,會等待一定時間再查詢A/B區(qū)數(shù)據(jù),以便讓上位機讀取響應(yīng)數(shù)據(jù)或在上位機重新下發(fā)正確的命令和數(shù)據(jù)包后才繼續(xù)命令執(zhí)行過程。
按照上述方式,即使在下位機出現(xiàn)異常掉電、干擾等復(fù)位情況,也會在上電完成PC的枚舉識別后,先檢查A區(qū)是否存在有效的命令包,如果存在,則說明上次斷電前該命令未執(zhí)行完成,下位機就會重新執(zhí)行該命令,并會用執(zhí)行完成后的響應(yīng)包及數(shù)據(jù)覆蓋寫入到對應(yīng)的A區(qū)、B區(qū),以標(biāo)志該命令執(zhí)行完成。因此,本套機制對于異常掉電后的上電狀態(tài)仍舊適用。
本方案擴展型的命令執(zhí)行過程與基本型的基本原理一致,只不過上位機可以一次性下發(fā)多個命令及對應(yīng)數(shù)據(jù),而下位機則可以依次執(zhí)行對應(yīng)命令并寫回對應(yīng)命令的命令執(zhí)行響應(yīng)包及響應(yīng)數(shù)據(jù)包執(zhí)行結(jié)果。根據(jù)實際使用需求可以每執(zhí)行完成一步就寫回該步的執(zhí)行結(jié)果,或整個命令集執(zhí)行完成后再統(tǒng)一把每步的響應(yīng)寫入對應(yīng)位置,確保了需要多次命令操作才能夠執(zhí)行完成某一功能的命令集合在掉電、異常重啟等情況下的執(zhí)行有效性。
對于標(biāo)準(zhǔn)命令,將其含有命令、數(shù)據(jù)、校驗等信息的整個標(biāo)準(zhǔn)命令包作為數(shù)據(jù)包發(fā)送到B區(qū),然后發(fā)送一條擴展命令到A區(qū),標(biāo)示該B區(qū)的數(shù)據(jù)為標(biāo)準(zhǔn)命令包,USB設(shè)備解析到該擴展命令后,即可從B區(qū)完整地取出該標(biāo)準(zhǔn)命令包,再按原有的標(biāo)準(zhǔn)命令執(zhí)行功能執(zhí)行該命令。
本文實現(xiàn)了一種確保下位機在未執(zhí)行上位機命令而掉電后,仍舊能夠在下次上電繼續(xù)執(zhí)行未完成操作的方案。設(shè)計方案覆蓋了基本型和擴展型兩種操作方式,對命令包格式和響應(yīng)包格式進行了相應(yīng)的描述。本方案可以確保Mass Storage類下位機對各類命令執(zhí)行的可靠性,即使在掉電或受異常干擾中斷命令執(zhí)行后也能夠在下次上電繼續(xù)執(zhí)行未完成命令,特別適合數(shù)據(jù)操作要求高、傳輸量大、USB連接不可靠的場合。
在國內(nèi)某手機芯片廠家的Cat1模塊實際生產(chǎn)射頻參數(shù)的校準(zhǔn)、綜測中,采用了本文的技術(shù)方案后,因夾具或者工人操作導(dǎo)致的USB Mass Storage類設(shè)備異常斷電并重新上電后,可以繼續(xù)在上次中斷的地方進行校準(zhǔn)、綜測,而不用重新開始,大大節(jié)約了繼續(xù)校準(zhǔn)、綜測的時間,提高工作效率。
本文的技術(shù)方案不但可以用于通信終端的射頻參數(shù)校準(zhǔn)、綜測環(huán)節(jié),還可以運用于任何有如下要求的Mass Storage類設(shè)備:當(dāng)遇到異常斷電并重新上電后需要繼續(xù)執(zhí)行上次中斷地方的程序。