一種移動存儲設(shè)備量產(chǎn)工具的開發(fā)
使用Norelsys主控芯片的U盤、移動硬盤等移動存儲設(shè)備在出廠前需要在每個設(shè)備的SPI Flash芯片中燒錄固件程序。使用傳統(tǒng)的SPI Flash燒錄機(jī)燒錄固件程序費(fèi)時費(fèi)力,而且遠(yuǎn)遠(yuǎn)達(dá)不到工業(yè)生產(chǎn)中量產(chǎn)的要求。本文介紹了一種工具軟件,可以高效的燒錄SPI Flash固件程序,同時操作簡單、界面友好,還有很高的安全性。
使用Norelsys主控芯片的 U盤、移動硬盤等移動存儲設(shè)備在出廠前需要在每個設(shè)備的SPI flash芯片中燒錄固件程序。固件程序是U盤、移動硬盤等移動存儲設(shè)備的核心控制程序,用于和主機(jī)建立連接,控制設(shè)備的各種行為等。
使用傳統(tǒng)燒錄方法,如果想要更新移動存儲設(shè)備中的固件程序,需要使用SPI Flash燒錄機(jī)。在燒錄前需要先將移動設(shè)備上的SPI Flash芯片焊下來,放入SPI Flash燒錄機(jī)的卡槽中,然后在燒錄機(jī)的軟件上進(jìn)行SPI Flash芯片型號的選擇,并且選擇要燒錄的固件程序,開始燒錄,結(jié)束后將SPI Flash芯片取出重新焊接到設(shè)備上,整個操作完成。這種方法操作步驟十分繁瑣,而且每次只能針對單獨(dú)的一個設(shè)備進(jìn)行固件更新,效率低下,不能滿足工廠中大量生產(chǎn)的需要。
為了提高工廠中的生產(chǎn)效率,并使工作人員可以簡單、快捷的操作,設(shè)計開發(fā)用于量產(chǎn)的工具軟件就成為必然。該工具軟件基于Windows平臺,適用于Windows XP及以上各種版本的Windows系統(tǒng),可以適應(yīng)于產(chǎn)線上的各種機(jī)器配置和系統(tǒng)版本。該量產(chǎn)工具界面簡潔,使用簡單、方便,執(zhí)行效率高,可以同時給最多16個設(shè)備進(jìn)行固件更新等操作,并且結(jié)果鮮明,每個設(shè)備都有單獨(dú)的條目顯示,一目了然,方便產(chǎn)線工人剔出不良產(chǎn)品。
系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。
模塊UIInterface用于顯示友好界面,配置操作選項,接收用戶操作指令,顯示當(dāng)前執(zhí)行狀態(tài)和最終執(zhí)行結(jié)果。
模塊SecurityCheck是在運(yùn)行UIInterface界面之前進(jìn)行的安全認(rèn)證檢查,只有輸入正確密碼的管理員才能更改UIInterface界面的配置選項,如:是否選擇更新固件,指定用于燒錄的固件程序,是否進(jìn)行分區(qū)、格式化操作,是否進(jìn)行讀寫測試操作,選擇并行的線程數(shù)量,設(shè)備列表如何排序等選項。而對于沒有密碼的普通操作工人,界面選項是固定的,不可以更改,只能進(jìn)行執(zhí)行、中斷、移除等操作。
模塊DeviceManager是整個程序的核心部分,管理所有連接的移動存儲設(shè)備。執(zhí)行操作的時候,DeviceManager為各個設(shè)備分配可用的線程,調(diào)度各個設(shè)備獨(dú)立的完成各自的操作。
每個USBDevice對象代表一個連接到主機(jī)上的移動存儲設(shè)備,可以通過設(shè)備ID區(qū)分不同的USBDevice。執(zhí)行操作的時候,每個USBDevice會在DeviceManager安排的線程環(huán)境中順序完成自己的任務(wù),包括更新固件、對磁盤進(jìn)行分區(qū)格式化、對磁盤進(jìn)行讀寫測試等操作。
每個SPIFlash對象代表USBDevice中的SPI Flash芯片,它會完成SPI Flash的各種操作,包括擦除flash,寫入固件到flash,驗(yàn)證flash等。
圖1 量產(chǎn)工具的總體結(jié)構(gòu)圖
數(shù)據(jù)庫FlashDataBase存儲了所有的SPI Flash型號和每種Flash對應(yīng)的各種參數(shù)。每連接一個新的移動存儲設(shè)備,DeviceManager會生產(chǎn)一個USBDevice對象,并驅(qū)動這個USBDevice中的SPIFlash對象自動到FlashDataBase數(shù)據(jù)庫中匹配對應(yīng)的SPI Flash型號,找到相應(yīng)的型號才能設(shè)置這個設(shè)備的SPI Flash的各種參數(shù),為更新固件做準(zhǔn)備。
安全性設(shè)計
為了讓產(chǎn)線上所有的移動存儲設(shè)備有統(tǒng)一的配置參數(shù)和一致的操作流程,量產(chǎn)工具增加了認(rèn)證機(jī)制。只有管理員擁有可以更改配置的權(quán)限,其他人員只能執(zhí)行管理員設(shè)置好的配置,不能隨意更改。量產(chǎn)工具在啟動時會要求輸入管理員密碼,密碼存儲在一個加密的本地文件中。如果密碼驗(yàn)證正確就開放管理員權(quán)限,打開界面上的配置選項,包括更新固件、指定用于燒錄的固件程序、分區(qū)、格式化、讀寫測試、線程數(shù)量、設(shè)備顯示順序等;如果密碼不正確,就開放普通權(quán)限,界面上的選項變?yōu)椴豢蛇x。
數(shù)據(jù)庫設(shè)計
由于SPI Flash型號眾多,而不同的廠家會給移動存儲設(shè)備配備不同的SPI Flash型號,所以需要量產(chǎn)工具對所有的SPI Flash型號都能識別并支持燒錄功能。數(shù)據(jù)庫FlashDataBase主要有兩張表,F(xiàn)LASH_TYPE和FLASH_PARAMETERS。表FLASH_TYPE用于通過獲得的SPI Flash的ID號,找到flash型號。表FLASH_PARAMETERS用于通過flash型號找到這種SPI Flash對應(yīng)的各個參數(shù)。
設(shè)備的添加和刪除
圖2顯示了DeviceManager,USBDevice和SPIFlash幾個主要模塊之間的關(guān)系。移動存儲設(shè)備在主機(jī)上插入和拔出都會觸發(fā)系統(tǒng)事件,量產(chǎn)工具中由模塊DeviceManager來獲得并處理這些系統(tǒng)事件。每當(dāng)獲得插入事件,DeviceManager就會調(diào)用AddDevice生成一個USBDevice對象并初始化。USBDevice對象在初始化中會生成一個SPIFlash對象,然后SPIFlash對象會通過FlashDataBase數(shù)據(jù)庫找到匹配的Flash型號和對應(yīng)的各種參數(shù)。DeviceManager將完成初始化的USBDevice對象放入設(shè)備列表deviceList中,等待后續(xù)操作。
拔出或安全移除一個移動存儲設(shè)備時,DeviceManager會收到系統(tǒng)設(shè)備移除事件的通知,然后在設(shè)備列表中通過設(shè)備ID找到這個設(shè)備,釋放它所占用的所有資源并調(diào)用RemoveDevice刪除這個設(shè)備。
多線程處理
為了讓所有連接主機(jī)的設(shè)備可以高效率的進(jìn)行操作,最理想的方法是讓所有設(shè)備同時工作即并行處理,而不是一個設(shè)備等待上一個設(shè)備完成才能開始工作的串行處理。并行處理需要使用到多線程機(jī)制,線程的數(shù)量是由DeviceManger決定的。如果線程過多,會造成系統(tǒng)資源負(fù)載過重,不但不會提高效率,反而會降低效率;如果線程太少,并行處理不明顯,又退化成串行處理,也會降低效率。所以DeviceManager會根據(jù)當(dāng)前實(shí)際設(shè)備數(shù)和管理員設(shè)置的最大線程數(shù)計算出最佳的線程數(shù)量,然后啟動這些數(shù)量的線程開始工作。為了避免同一個設(shè)備被多個線程重復(fù)執(zhí)行,造成執(zhí)行混亂,每個線程會排隊依次從設(shè)備等待列表中選擇等待執(zhí)行的設(shè)備進(jìn)行指定的操作,被選擇的設(shè)備會從等待列表中移除,如圖3所示。當(dāng)一個設(shè)備執(zhí)行完成后,完成任務(wù)的線程會再次排隊到等待列表中選擇還未執(zhí)行的設(shè)備,直到?jīng)]有未執(zhí)行的設(shè)備可以選擇,線程自動結(jié)束。等到所有線程都結(jié)束了,全部操作完成。
圖2 設(shè)備關(guān)系類圖
圖3 多線程排隊選取設(shè)備示意圖
固件更新
固件更新操作是量產(chǎn)工具最重要的功能。不需要像SPI Flash燒錄機(jī)那樣手動焊接芯片再燒錄,直接選擇界面上的更新固件選項,點(diǎn)擊執(zhí)行按鈕即可自動實(shí)現(xiàn)固件程序的更新。在連接一個移動存儲設(shè)備時,DeviceManager會在USBDevice對象的初始化時就進(jìn)行SPI Flash匹配。執(zhí)行更新固件的操作時,直接使用匹配的flash參數(shù)先對flash進(jìn)行擦除,擦除成功后將指定的固件程序?qū)懭雈lash的對應(yīng)地址中,最后做flash的校驗(yàn),檢查是否寫入成功。
界面顯示
顯示界面分為三部分,最上面部分是管理員才能操作的配置選項,包括更新固件、選擇固件程序、分區(qū)、格式化、讀寫測試、線程數(shù)量、設(shè)備顯示順序等。只有選上的項目才能被執(zhí)行,未選擇的項目不會被執(zhí)行。中間部分是設(shè)備列表,顯示所有連接的移動存儲設(shè)備,每個設(shè)備占一行,設(shè)備的排序是按照管理員選擇的方式列出的。每一列顯示設(shè)備的各個屬性,包括廠商ID、產(chǎn)品ID、序列號、版本號、容量、等待執(zhí)行的操作等信息。最下面部分是普通工作人員需要用到的按鈕,有三個:執(zhí)行、中斷和安全移除。
為了減少工作人員的操作,設(shè)備的所有工作(包括更新固件、分區(qū)、格式化、讀寫測試)都集中在一個執(zhí)行按鈕中。工作人員只需要連接移動存儲設(shè)備,然后按下一個執(zhí)行按鈕,即可在中間列表中看到各個設(shè)備實(shí)時的執(zhí)行狀態(tài)和工作進(jìn)度。每完成一個設(shè)備,該設(shè)備所在的行會突出顯示完成結(jié)果,正確的顯示為綠色Pass,失敗的顯示為紅色Fail,一目了然。如果有突發(fā)事件,工作人員可以點(diǎn)擊中斷按鈕中斷操作。當(dāng)所有設(shè)備都完成操作時,點(diǎn)擊安全移除按鈕,所有設(shè)備都會安全移除,然后再拔出設(shè)備不會對設(shè)備造成任何損傷。
與傳統(tǒng)SPI Flash的固件燒錄方法相比,量產(chǎn)工具更加安全可靠,它的應(yīng)用極大的提高了生產(chǎn)效率,平均每生產(chǎn)一個移動存儲設(shè)備只需要幾秒鐘時間,比燒錄機(jī)方便快捷很多。量產(chǎn)工具不但可以燒錄固件程序,還可以同時完成磁盤的分區(qū)、格式化、讀寫測試等操作,為移動存儲設(shè)備的出廠減少了很多生產(chǎn)步驟。同時它的操作簡單,界面友好,方便工廠產(chǎn)線工人在短時間內(nèi)學(xué)會使用,在很多工廠都有著廣泛的應(yīng)用。
10.3969/j.issn.1001- 8972.2016.21.029