何晉紅潘桃于婷馬義德.蘭州大學(xué)信息科學(xué)與工程學(xué)院 .蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院
?
基于STM32的通用高速編程器的設(shè)計(jì)與實(shí)現(xiàn)
何晉紅1潘桃2于婷1馬義德1
1.蘭州大學(xué)信息科學(xué)與工程學(xué)院 2.蘭州資源環(huán)境職業(yè)技術(shù)學(xué)院
文章設(shè)計(jì)并實(shí)現(xiàn)了一種針對(duì)FLASH、EEROM等存儲(chǔ)器進(jìn)行數(shù)據(jù)更新的高速通用編程器。該編程器是一個(gè)以STM32為核心,能對(duì)24、25等系列的存儲(chǔ)器完成數(shù)據(jù)寫入、讀出等操作的嵌入式系統(tǒng)。系統(tǒng)具備USB連接PC機(jī)的聯(lián)機(jī)操作模式和基于UCGUI的脫機(jī)操作模式。它可以控制接口電壓以適用更多的芯片,與當(dāng)前常見編程器進(jìn)行性能比較,其具有更好的兼容性、更快的操作速度和更高的數(shù)據(jù)正確率。
編程器 STM32 嵌入式系統(tǒng) UCGUI
隨著信息時(shí)代的快速前進(jìn),物聯(lián)網(wǎng)、汽車電子等都有了前所未有的發(fā)展,智能家居、可穿戴設(shè)備也應(yīng)運(yùn)而生。這些數(shù)字化、智能化的產(chǎn)品與我們的日常生活已密不可分。而它們的固件升級(jí),程序更新和量產(chǎn)都需要相關(guān)人員對(duì)其存儲(chǔ)器內(nèi)的數(shù)據(jù)進(jìn)行讀寫操作。然而目前所見存儲(chǔ)器種類繁多,編程接口和時(shí)序也不盡相同,這就要求我們?cè)O(shè)計(jì)一個(gè)能夠操作常見存儲(chǔ)器的多功能、通用編程器,它不僅要有足夠快的寫入速度,而且需要保證寫入數(shù)據(jù)的正確性。目前市面上有一些類似的產(chǎn)品,如XTW100、 TL866CS等,然而它們一般都針對(duì)某一特定系列的存儲(chǔ)芯片并且讀寫速度比較慢?;谶@樣的現(xiàn)狀,這里設(shè)計(jì)了一個(gè)基于ST(意法半導(dǎo)體)公司的STM32F207單片機(jī)的編程器。憑借其120MHz的工作頻率、400Kb/S的I2C接口,30Mb/S的SPI接口以及 硬件SD卡接口,該編程器擁有了非常優(yōu)越的性能。
本文所設(shè)計(jì)的編程器主要完成24,、25、26、45、95系列存儲(chǔ)芯片的讀寫、擦除等,同時(shí)可以用作SD卡讀卡器。它由硬件和軟件兩部分組成。其中硬件部 分以STM32為核心,軟件包括PC機(jī)應(yīng)用程序、USB 驅(qū)動(dòng)程序以及編程器固件。固件程序運(yùn)行于硬件平臺(tái)之上構(gòu)成 整個(gè)系統(tǒng)的核心。它接受來自PC機(jī)的數(shù)據(jù)和指令,并根據(jù)指令對(duì)連接其上的存儲(chǔ)芯片進(jìn)行操作。編程器與PC機(jī)通信使用USB2.0協(xié)議標(biāo)準(zhǔn)。該系統(tǒng)還使用觸摸屏進(jìn)行人機(jī)交互來完成脫機(jī)操作。
1.1編程器硬件平臺(tái)
硬件平臺(tái)是系統(tǒng)重要組成部分,采用STM32F207 Contex-M3[2]芯片作為控制器,含有 供電系統(tǒng)、觸摸屏、SD卡以及電平轉(zhuǎn)換電路的編程器平臺(tái)。
系統(tǒng)電源含兩部分:3.3伏固定電壓與程序可調(diào)電源。其中3.3伏為MCU,觸摸屏,SD卡等供電, 而可調(diào)電源的輸出電壓受MCU控制。在MCU與 存儲(chǔ)芯片之間接有電平轉(zhuǎn)換接口芯片SN74LVC8T245,該芯片分A、B兩個(gè)端口,A、B 兩端的數(shù)字電平可以獨(dú)立進(jìn)行設(shè)置。同時(shí)這里還使 用了TCA9517,它是I2C接口專用電平轉(zhuǎn)換芯片。
SD卡上存放編程器的配置數(shù)據(jù)、脫機(jī)操作文件、 脫機(jī)讀取的芯片內(nèi)數(shù)據(jù)和脫機(jī)芯片參數(shù)庫。它通過SD卡接口與STM32連接,MCU上移植了嵌入式文件系統(tǒng)FatFs以對(duì)SD卡進(jìn)行基于文件的讀寫操作。
在SD卡根目錄下有data子目錄用來存放脫機(jī)操作的數(shù)據(jù)。名為Chipinfo的文件存放芯片參數(shù)庫。Dat文件存放文件命名編號(hào)信息。執(zhí)行讀取操作時(shí),讀出來的數(shù)據(jù)保存在命名為被操作芯片型號(hào)-文件編號(hào).bin的文件內(nèi)。每次讀取完成后文件編號(hào)增一并保存到Dat里面。例如連續(xù)讀取兩次EN25Q80芯片就會(huì)創(chuàng)建兩個(gè)文件,分別為EN25Q80-00006. bin和 EN25Q80-00007.bin。在SD卡根目錄下還有一個(gè)文件LCD_CONFIG,它存儲(chǔ)了LCD觸摸屏的配置參數(shù)。
系統(tǒng)采用240*320分辨率的LCD作顯示,電阻式觸摸屏作觸控感應(yīng)。觸摸控制芯片使用 XTP2046。它將模擬電壓值進(jìn)行數(shù)字采樣量化并通過SPI接口將數(shù)據(jù)傳輸給MCU。LCD界面的開發(fā)使用了UCGUI。編程器啟動(dòng)時(shí)會(huì)判斷LCD_ CONFIG 文件是否存在,不存在時(shí)將會(huì)調(diào)用校準(zhǔn)代碼進(jìn)行觸摸屏校準(zhǔn)并生成該文件。編程器上有一個(gè)32Pin的鎖緊座。編程器與待編程存儲(chǔ)器的連接會(huì)根據(jù)具體芯片選擇使用SPI或I2C接口。
1.2編程器固件程序
固件程序主要完成PC機(jī)控制指令的解析和執(zhí)行, 同時(shí)響應(yīng)觸摸輸入。固件程序解析執(zhí)行PC機(jī)指令然后返回執(zhí)行結(jié)果 和數(shù)據(jù)。PC機(jī)應(yīng)用通過USB接口連接編程器并結(jié)合固件程序?qū)Υ鎯?chǔ)芯片進(jìn)行操作,同時(shí)操作SD卡上的編程數(shù)據(jù)和脫機(jī)芯片庫等。固件程序含有大量的代碼,編程器會(huì)根據(jù)待操作芯片進(jìn)行適配選擇。固件程序還提供了脫機(jī)操作的功能。在脫機(jī)的情況下固件程序會(huì)通過用戶的交互輸入執(zhí)行操作,并將結(jié)果反饋顯示給用戶。脫機(jī)操作的實(shí)現(xiàn)依賴于觸摸屏交互和SD卡上的芯片庫以及文件系統(tǒng)。
1.3PC機(jī)軟件系統(tǒng)
PC機(jī)程序開發(fā)使用MFC類庫。借助PC機(jī)優(yōu)越的運(yùn)算性能,聯(lián)機(jī)的情況下比脫機(jī)操作具有更快的速度,而且在聯(lián)機(jī)的情況下還可以對(duì)編程文件進(jìn)行可視化編輯。PC機(jī)軟件提供的操作包括:文件加載、芯片選擇、芯片自動(dòng)識(shí)別、編程、擦除、讀取、向數(shù)據(jù)庫中添加芯片以及對(duì)SD卡的操作。在程序中動(dòng)態(tài)地建立ODBC數(shù)據(jù)源,并將芯片信息存儲(chǔ)進(jìn)ACCESS數(shù)據(jù)庫中。數(shù)據(jù)庫里記錄了常用的24,25,26,45,95等系列的芯片,對(duì)于一些未收錄的,用戶可以自己將芯片信息添加進(jìn)數(shù)據(jù)庫,編程器會(huì)根據(jù)芯片的特性自動(dòng)選擇合適的讀寫時(shí)序嘗試操作。PC程序根據(jù)待編程的芯片從數(shù)據(jù)庫中讀取芯片參數(shù)。從PC文件系統(tǒng)中讀取Hex或Bin格式文件并進(jìn)行解碼,然后將指令包和數(shù)據(jù)傳送給編程器。從存儲(chǔ)芯片讀取數(shù)據(jù)的時(shí),首先將讀到的數(shù)據(jù)使用 CListCt r l控件顯示給用戶,用戶可以將該數(shù)據(jù)保存在PC上指定的位置。PC也通過USB訪問編程器上的SD卡。由于使用了USB接口進(jìn)行通信,所以這里還需要為編程器開發(fā)USB驅(qū)動(dòng)[7]來負(fù)責(zé)應(yīng)用層和USB 總線層的數(shù)據(jù)傳遞。驅(qū)動(dòng)程序還進(jìn)行數(shù)字簽名,以便自動(dòng)安裝。
2.1編程器電源系統(tǒng)及接口電壓轉(zhuǎn)換
本系統(tǒng)需要兩種電壓。一個(gè)3.3V和一個(gè)編程可調(diào) 的電源。它們都通過對(duì)5V輸入電壓進(jìn)行降壓得到。采用LM1117-3.3穩(wěn)壓芯片產(chǎn)生3.3V電壓。在其輸入和輸出端分別接入兩個(gè)濾波電容,一個(gè)容值較大,濾去電源的低頻成分,而另外一個(gè)容值較小,對(duì)高頻成分呈現(xiàn)較低的阻抗,主要濾除由負(fù)載電流變化而引起的高頻成分。
可調(diào)電壓用STM32的一路DAC和LM1117-ADJ可調(diào)三端穩(wěn)壓芯片產(chǎn)生。使用DAC的輸出來抬高 ADJ端的電壓,調(diào)節(jié)DAC的輸出就可以達(dá)到調(diào)節(jié)輸 出電壓的目的。
從DAC到LM1117的ADJ端使用運(yùn)放LM358做了電壓跟隨。因?yàn)長M1117工作的時(shí)候ADJ端會(huì)有微弱的電流流出,而DAC輸出阻抗較大,該電流如果直接流經(jīng)DAC的輸出端,對(duì)ADJ端的電勢會(huì)有影響。
設(shè)計(jì)中還將兩個(gè)110歐姆串聯(lián),然后接到其輸出端,從兩個(gè)電阻的中間取得電壓接至STM32的ADC上面,STM32對(duì)此電壓進(jìn)行實(shí)時(shí)監(jiān)測,防止電壓設(shè)置不當(dāng)造成器件損壞。
2.2控制指令格式
由于數(shù)據(jù)較大,本編程器使用USB批量傳輸方式。編程器配置了兩個(gè)USB端點(diǎn),一個(gè)控制端點(diǎn),用來進(jìn)行USB的枚舉等,另外一個(gè)批量端點(diǎn),用來批量傳輸數(shù)據(jù)。
2.2.1命令包結(jié)構(gòu)
在USB枚舉完成以后,PC機(jī)會(huì)根據(jù)用戶所選擇 的操作構(gòu)建一個(gè)命令塊包,然后發(fā)給編程器。命令塊包的結(jié)構(gòu)總共有30個(gè)字節(jié)。
dSignature字段是控制命令包標(biāo)志,為字符串 USBC。
dTag是命令包標(biāo)簽,由PC機(jī)程序隨機(jī)生成。當(dāng)編程器完成該命令返回狀態(tài)的時(shí)候,需要在狀態(tài)包的dTag字段中填入對(duì)應(yīng)命令的dTag。
dDataLength指定在數(shù)據(jù)階段需要傳輸?shù)臄?shù)據(jù)長度。
fVol是待操作芯片電壓信息,是一個(gè)浮點(diǎn)數(shù)。編程器根據(jù)fVol設(shè)置接口電壓。部分指令的fVol域無效。
bFlags最高位(D7)表示數(shù)據(jù)方向,0表示輸出,1表示輸入。
bCBLength表示后面CB的長度。
CB是需要執(zhí)行的命令和命令對(duì)應(yīng)的參數(shù)。12字節(jié)數(shù)據(jù)不一定完全使用,有效長度由bCBLength指定。
2.2.2狀態(tài)包結(jié)構(gòu)
編程器執(zhí)行完操作后會(huì)返回執(zhí)行結(jié)果給PC。dSignature為狀態(tài)包標(biāo)志。字符串USBS。dTag為狀態(tài)包標(biāo)簽,其值為命令封包中的dTag。
bStatue標(biāo)識(shí)命令執(zhí)行結(jié)果,0x00表示成功, 0x01表示失敗。
2.2.3編程器命令結(jié)構(gòu)
命令包含存儲(chǔ)芯片操作命令和SD卡操作命令。接口類型分為兩類:0x01表示SPI,0x02表示 I2C;芯片類型使用24、25等作為區(qū)分。接口速率占 一個(gè)字節(jié),I2C以K為單位,SPI以Mb/s為單位。
2.3芯片參數(shù)庫設(shè)計(jì)
為支持多種芯片,設(shè)計(jì)了芯片參數(shù)庫。在芯片操作時(shí)需要獲取數(shù)據(jù)庫中的芯片信息。下面給出數(shù)據(jù)表中所有字段及說明。
Chip Index:芯片的索引編號(hào)。
ManuID:廠商ID,主要用來芯片的自動(dòng)識(shí)別。Chip ID:芯片ID號(hào)。用來芯片的自動(dòng)識(shí)別。RomSize:芯片的存儲(chǔ)容量,以字節(jié)為單位。PageSize:存儲(chǔ)器的頁大小。芯片編程采用頁編程方式,有利于編程速度的提高。
VectorName:芯片廠商名稱簡稱,方便用戶選 擇芯片。
InterFace:芯片的編程接口類型。
Vol:編程接口電壓信息。
Speed:芯片編程接口支持的最大讀寫速率。 設(shè)置正確的讀寫速率,才能保證讀寫的正確率。 Type:芯片類型。24、25系列等。
在進(jìn)行操作之前一般會(huì)自動(dòng)識(shí)別或者手動(dòng)選擇 芯片。選定芯片后應(yīng)用程序會(huì)從數(shù)據(jù)庫獲取芯片的 信息,然后構(gòu)建命令塊包并發(fā)送給編程器。
在此將對(duì)該編程器的性能參數(shù)做一些測試。這里將抽取不同系列、不同廠商的不同容量存儲(chǔ)器進(jìn)行測試。測試相關(guān)數(shù)據(jù),包括對(duì)編程器來講至關(guān)重要的一項(xiàng)指標(biāo):寫入數(shù)據(jù)的正確率。分析結(jié)果可以發(fā)現(xiàn),不同的芯片操作速度相差較大,尤其是寫入和擦除的速度。這主要是受芯片自身性能和芯片容量的影響。同時(shí),這里還跟其他的編程器,如XTW100、TL866CS等做了性能對(duì)比,發(fā)現(xiàn)該編程器跟其他相比速度平均提升了1.5倍左右,而這主要得益于我們MCU良好的處理性能、高效的通信協(xié)議以及我們優(yōu)異的編程算法。而前面所提兩 款編程器只支持24、25系列的部分存儲(chǔ)器,且不具備脫機(jī)操作的功能。另外值得一提的是本編程器數(shù)據(jù)寫入的正確率。由于采用了可靠的通信協(xié)議,使得對(duì)所有支持的存儲(chǔ)器都達(dá)到了百分之百正確寫入的效果。
[1] USB Imp lementer’s Forum. USB Speci f ication Rev2.0. http://www.usb.org,2000.
[2] 喻金錢,喻斌.STM32F系列ARMCor tex-M3核微控制器開發(fā)與應(yīng)用[M].北京:清華大學(xué)出版社, 2011.
[3] 王蘭英.基于STM32嵌入式系統(tǒng)的uCGUI移植與實(shí)現(xiàn).四川理工學(xué)院學(xué)報(bào)(自然科學(xué)版). 2012年01期.
[4] 動(dòng)態(tài)注冊(cè)O(shè)DBC數(shù)據(jù)源的方法[OL]. ht tp://wenku. baidu.com,2013.
[5] (美)帕羅賽斯.MFC Windows程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.
[6] 亓蘭武,周曉.OBJ文件和HEX文件相互轉(zhuǎn)換原理與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用.1996年07期.
[7] 劉榮.圈圈教你玩USB[M].北京:北京航空航天大學(xué)出版社,2009.