陳景郁 朱洪雷


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