陳景郁 朱洪雷
摘要:STM32系列單片機(jī)性能好、性價(jià)比高,因而廣泛應(yīng)用于嵌入式設(shè)備。嵌入式設(shè)備種類繁多,芯片固件也變化多樣,在生產(chǎn)制造過程中,繁雜多樣的芯片固件導(dǎo)致了芯片生產(chǎn)燒錄瓶頸問題。鑒于此,在改造產(chǎn)線生產(chǎn)工具過程中,嘗試了一種基于ST-Link工具實(shí)現(xiàn)的多路固件燒錄方法,可以簡(jiǎn)化工人操作,實(shí)現(xiàn)固件燒錄多樣化,提高生產(chǎn)效率之余,也增強(qiáng)了生產(chǎn)安全性。
關(guān)鍵詞:STM32單片機(jī);ST-Link;固件燒錄
0 ? ?引言
STM32系列單片機(jī)由于性能好,性價(jià)比高,功耗低,逐漸成為嵌入式設(shè)備中的主流控制器;可穿戴設(shè)備、醫(yī)療設(shè)備、智能交通和智能家居等嵌入式設(shè)備都有采用STM32系列單片機(jī)作為主控制器的案例[1-3]。STM32系列單片機(jī)是ST公司推出的基于ARM Cort內(nèi)核的控制器,資源豐富、種類繁多,可以適用于多種場(chǎng)景的產(chǎn)品。
在使用STM32系列單片機(jī)的過程中,產(chǎn)品制造遇到了相關(guān)的生產(chǎn)燒錄瓶頸問題。傳統(tǒng)的生產(chǎn)方式,STM32系列單片機(jī)固件的燒錄方法分為在線燒錄和線外燒錄兩種。市面上提供的燒錄設(shè)備,無論是在線還是線外燒錄,一般都只能同時(shí)燒錄同一個(gè)固件,不能實(shí)現(xiàn)多路同時(shí)燒錄多個(gè)不同的固件。由于IOT設(shè)備的多樣化,產(chǎn)品固件也呈現(xiàn)出多元化的趨勢(shì)。本文介紹了一種基于ST-Link改造的多路差異化燒錄方法,可以提供多元化產(chǎn)線生產(chǎn),提高產(chǎn)線生產(chǎn)效率。
1 ? ?ST-Link介紹
ST-Link是ST公司專門為STM系列單片機(jī)開發(fā)的調(diào)試工具。ST-Link結(jié)構(gòu)簡(jiǎn)單、使用方便,可用于研發(fā)調(diào)試,也可用于產(chǎn)品生產(chǎn),以大大降低用戶開發(fā)和使用成本。
ST-Link工具對(duì)STM32單片機(jī)提供豐富的功能,包括:整個(gè)芯片擦除、按sector擦除、固件刷寫、按字節(jié)改寫數(shù)據(jù)、刷寫數(shù)據(jù)校驗(yàn)、存儲(chǔ)內(nèi)容校驗(yàn)、option bytes讀寫以及寄存器讀寫等。option bytes是STM32系列單片機(jī)中,留給用戶配置系統(tǒng)功能的特殊字節(jié),option bytes是可編程的、非易失性的配置存儲(chǔ)器。
另外,ST-Link工具支持同時(shí)多個(gè)連接使用。每個(gè)ST-Link都有一個(gè)唯一碼,連接電腦后,可以通過其唯一碼識(shí)別ST-
Link,并對(duì)其進(jìn)行操作,從而實(shí)現(xiàn)多路ST-Link獨(dú)立并行工作。本文介紹的方法也是利用其設(shè)備唯一碼來區(qū)分多路ST-Link工具,并實(shí)現(xiàn)多路刷寫功能同時(shí)工作的。
ST公司開發(fā)的STM32 ST-Link Utility工具,可以支持基于ST-Link開發(fā)調(diào)試及量產(chǎn)[4]。由于ST公司并沒有提供詳細(xì)的公司接口說明,也沒有開源此工具的代碼,開發(fā)調(diào)試難度比較高。但STM32系列單片機(jī)的應(yīng)用非常廣泛,市面上也有很多ST-Link工具的開發(fā)包,例如:
(1)stlink,一款Linux下的ST-Link開源工具,https://github.com/texane/stlink。
(2)QSTLink2,一款基于QT的跨平臺(tái)ST-Link開源工具,https://github.com/fpoussin/QStlink2。
(3)pystlink,一款基于python實(shí)現(xiàn)的ST-Link開源工具,https://github.com/pavelrevak/pystlink。
考慮到python通用性更高、清晰簡(jiǎn)單易用,也可以實(shí)現(xiàn)跨平臺(tái)運(yùn)行,所以選擇了基于python實(shí)現(xiàn)我們的燒錄工具的上位機(jī),利用pystlink工具提供的接口操作ST-Link。
2 ? ?方案設(shè)計(jì)說明
設(shè)計(jì)一個(gè)可以將多路ST-Link同時(shí)接入的燒錄裝置,燒錄上位機(jī)能識(shí)別并區(qū)分各路ST-Link。在燒錄裝置中,ST-Link通過SWD(Serial Wire Debug,串行調(diào)試)總線連接到芯片座;燒錄的時(shí)候,芯片座安放待燒錄芯片;每個(gè)ST-Link對(duì)應(yīng)連接一個(gè)芯片座。
燒錄裝置有多個(gè)芯片座用于安放芯片,芯片座可以更換,以便適配不同型號(hào)和封裝的芯片。燒錄裝置上有獨(dú)立的控制器,可以控制芯片及ST-Link的電源、指示燈和按鍵。
電腦上位機(jī)通過USB連接燒錄裝置,通過ST-Link的唯一碼,區(qū)分并識(shí)別各路ST-Link。上位機(jī)獨(dú)立控制每一路ST-Link,加載固件文件,識(shí)別芯片,并完成燒錄時(shí)序邏輯,實(shí)現(xiàn)芯片線外燒錄功能。
電腦上位機(jī)可以實(shí)現(xiàn)聯(lián)網(wǎng)監(jiān)控等功能,可實(shí)時(shí)監(jiān)控產(chǎn)線生產(chǎn)情況,也具備固件安全控制、無縫對(duì)接升級(jí)等功能,能夠提升產(chǎn)線安全性與效率。
3 ? ?燒錄裝置設(shè)計(jì)
設(shè)計(jì)一種燒錄裝置,安裝多路芯片底座,芯片座可以根據(jù)不同型號(hào)芯片封裝更換,芯片座與ST-Link通過SWD總線(VDD、GND、SWDIO、SWCLK)連接在一起。然后,所有ST-Link接到USB總線上,可以通過USB總線連接到電腦上位機(jī)。
燒錄裝置中有燒錄控制器,可以控制燒錄裝置中芯片座的電源,監(jiān)控ST-Link的連接情況,控制每個(gè)芯片座的狀態(tài)指示燈;同時(shí)接收燒錄裝置上的按鍵事件,控制芯片燒錄操作和流程。
燒錄裝置系統(tǒng)示意圖如圖1所示。
考慮到供電和信號(hào)總線驅(qū)動(dòng)能力的實(shí)際情況,示例的燒錄裝置只安裝了4個(gè)芯片座。在具體實(shí)施過程中,可以根據(jù)不同需求配置更多路的芯片座和ST-Link工具。
燒錄裝置通過USB接口連接到電腦上位機(jī),上位機(jī)可以控制各個(gè)ST-Link,也可以與燒錄裝置控制器進(jìn)行通信,控制燒錄裝置的電源、指示燈以及處理按鍵事件。指示燈表示燒錄狀態(tài):紅燈表示錯(cuò)誤,藍(lán)燈表示燒錄中,綠燈表示燒錄完成;按鍵分別為開始、停止、復(fù)位等操作。
4 ? ?燒錄軟件設(shè)計(jì)
這里選擇pystlink工具包開發(fā)改造我們的燒錄裝置上位機(jī)軟件。pystlink提供了一個(gè)可以獲取ST-Link唯一序列號(hào)的接口[5]:
def _get_serial(self):
try:
serial = usb.util.get_string(self._dev, 255, self._dev.iSerialNumber)
except (usb.core.USBError, ValueError):
serial = usb.util.get_string(self._dev, self._dev.iSerialNumber)
if serial != None:
if re.search("[0-9a-fA-f]+", serial).span()[1] != 24:
serial = ''.join(["%.2x" % ord(c) for c in list(serial)])
return serial
可以通過此API進(jìn)行判斷并區(qū)分,同時(shí)加載多路ST-Link進(jìn)行芯片的刷寫燒錄。如圖2所示的UI設(shè)計(jì),軟件可以支持同時(shí)加載4個(gè)不同的固件,分別對(duì)應(yīng)不同的4路ST-Link燒錄芯片座。
各個(gè)通路下的ST-Link可以進(jìn)行獨(dú)立的操作,也可以同時(shí)進(jìn)行統(tǒng)一的操作,可以根據(jù)生產(chǎn)的需求進(jìn)行配置。同時(shí)操作4路芯片的刷寫燒錄,可以滿足生產(chǎn)產(chǎn)線多元化的需求,也能解決生產(chǎn)效率的瓶頸問題。
5 ? ?結(jié)語
STM32系列單片機(jī)廣泛應(yīng)用于嵌入式設(shè)備領(lǐng)域,其產(chǎn)線生產(chǎn)也呈現(xiàn)多元化的趨勢(shì)。本文介紹了一種基于ST-Link工具解決產(chǎn)線生產(chǎn)多樣化與效率問題的方案。本方案設(shè)計(jì)一個(gè)可以同時(shí)接入多個(gè)ST-Link的燒錄裝置,通過識(shí)別不同ST-Link的唯一碼,支持多路芯片的刷寫,實(shí)現(xiàn)多通路多固件差異化的刷寫燒錄。本方案在工廠產(chǎn)線上使用后,減少了操作步驟,降低了操作失誤率;多路差異化的設(shè)計(jì),可以適用于多種不同的產(chǎn)品線,也能解決生產(chǎn)效率的瓶頸問題。
[參考文獻(xiàn)]
[1] 林玩杰,李水峰,毛立夫,等.基于STM32智能家居控制系統(tǒng)的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2019,27(24):176-180.
[2] 夏勝利,殷鳴.基于STM32單片機(jī)的智能公交設(shè)計(jì)[J].物聯(lián)網(wǎng)技術(shù),2019,9(8):53-54.
[3] 褚夢(mèng)秋,佀國(guó)寧,李根生,等.下肢康復(fù)機(jī)器人控制系統(tǒng)研究進(jìn)展[J].北京生物醫(yī)學(xué)工程,2018,37(6):643-649.
[4] 李坊玉.STM32 ST-LINK Utility應(yīng)用功能及使用方法(一)[N].電子報(bào),2019-09-01(007).
[5] PYSTLINK[EB/OL].[2020-02-13].ttps://github.com/pavelrevak/pystlink.
收稿日期:2020-02-17
作者簡(jiǎn)介:陳景郁(1982—),男,廣東韶關(guān)人,嵌入式開發(fā)工程師,主要從事嵌入式設(shè)備、移動(dòng)設(shè)備驅(qū)動(dòng)開發(fā)工作。