1. 程式人生 > >如何解決微控制器下載程式失敗的問題

如何解決微控制器下載程式失敗的問題

        作為一個微控制器開發人員,每天跟我們打交道的工具無非兩種,一種是PC機上的開發環境,比如Keil MDK、IAR Embedded Workbench等等;而另外一種呢,無非就是集程式下載、除錯功能於一體的程式設計器、這個叫法比較混亂、也可以叫程式設計器、下載器、模擬器(但我認為不叫燒錄器,燒錄器一般值批量燒錄階段所用的那種可以快速完成晶片批量燒錄的玩意)。後文統稱程式設計器。

        常見的程式設計器有以下幾種:

        1、自然是老牌Jlink了;

其實拆開市面上常見的jlink,可以看到各種各樣的板子:

這都是從某寶上買的,標註著正版、永不掉韌體的jlink,這樣的東西在我手裡壞了2個,一開始我還有耐心去找個XP系統刷一下韌體,但是刷了沒幾天就又壞了,而且身邊的XP是越來越少了,想著再買一個也才幾十塊,完全沒必要浪費這個時間去刷了。當然很多人喜歡動手挑戰一下,但是當你的專案忙的不可開交,而這個時候你的程式設計器韌體掉了,你還要跑去找個XP給他刷韌體,想想都不爽。

有朋友告訴我,自己經常要去其他城市出差,除錯自己的板子,SEGGER的原版太貴,只好從某寶買幾十塊的用,而且買一個又擔心壞了耽誤事,所以每次出差至少都帶兩個,然而這個碩大的體積是在讓人不爽,出差的時候要在極其寶貴的行李空間裡放兩個jlink,也是夠了。

也有人抱怨,jlink的介面太不方便了,雖然大多數時候除錯的時候,只用了四五根杜邦線截出來,然而他的介面卻保留了20腳,其中有一整排除了一個腳全是GND了。做個板子,入股只留幾個排針,那樣不好插線除錯,如果想留一個和jlink一樣的介面,又覺得會顯得板子笨重,而且在一些對尺寸有嚴格要求的產品裡,壓根沒有空間放下這個20腳的介面。

這時候有人提出瞭解決方案,也就是下文的第二種程式設計器:

2、ST-LINK

可是仔細看看這個並沒有解決JLINK的一些缺點,介面還是笨,體積還是不小。那麼萬能的某寶上還有一種解決方案;

各種各樣的顏色,而且價格比較便宜,十五塊左右就能搞到,嚐鮮買個試試,發現挺好用。和優盤一樣大小的身板,出差帶著也方便。但是某一天它突然不工作了,插上之後電腦沒有人任何反應,我經過一系列的診斷,最後懷著沉重的心情給它下了死亡通知書。

然後再去買下載器,我又不想買太貴的,又想買個小體積的,想來想去,最終一次買了三四個這種小的STLINK,我知道他會壞,但是一次買好幾個就不怕他壞了,而且好幾個的價格也就是一個某版的jlink價格。

接下來無意發現了淘寶上有一款叫做elink的玩意:

3、elink32-pro

這個東西看起來很棒,因為它集成了串列埠除錯,而且貌似速度很快,正好我和合泰半導體這個公司有業務往來,就請合泰的相關負責人寄我一個樣品試用,試用效果很棒,唯二的缺點就是體積太大(和jlink差不多)、價格太貴。

那麼有沒有可能和合泰達成一個協議,共同作出一款符合以下需求的程式設計器(下載器、模擬器、偵錯程式)呢?

a、能支援幾乎所有32位ARM-CortexM核心微控制器

b、小巧便攜

c、不掉韌體

d、去掉多餘介面,只保留swd

e、增加虛擬串列埠功能

f、可對外供電、電流過大自動切斷

g、低成本,大多數人買得起

h、無需驅動,即插即用

於是我和合泰的相關人員進行溝通(這個溝通大概是16年10月開始的)。

經過多次溝通,最終確定:以elink32-pro為原型,去掉一些無用的東西、增加相關功能、由合泰半導體提供韌體,我提供硬體及生產。

溝通中爭議最多的一個問題是RST引腳是否保留。由於我們使用stlink,jlink等時經常會發生以下問題:

這個問題可以通過一下方式解決:

但是還有很多問題是通過開發環境配置修改所不能解決的,這時候就需要保留RST,然後把RST接在開發板上,就能完成下載,這個功能主要是涉及以下幾種使用場景:

1、swd引腳複用(例如STM32F103的PA13和PA14在程式中被設定為其他功能),這時候需要程式設計器能對開發板進行硬體復位。

2、晶片工作狀態為低功耗或者睡眠模式,這時候需要程式設計器能對開發板進行硬體復位。

所以最終討論結果是按照合泰半導體廠商提供的方案來,畢竟他們是半導體廠商,考慮問題很嚴謹、完善。

方案定稿之後,簽訂了軟體使用合同與保密合同,接下來是合泰提供帶韌體的晶片,我來做整體設計並完成PCB設計、焊接除錯等具體的工作。經過一個月的時間、出了幾個樣品,經過測試發現使用不順手,等各種問題。比如第一次構思的是直接在板子上加一個usb公頭,然後就可以插在電腦上了,但是後續使用發現,這樣不是很方便,因為這樣的話就會導致目標板距離電腦只有杜邦線長度的距離,如果杜邦線太短,移動不太方便,甚至現在有些電腦的USB口在後面,這樣不方便使用者下載程式後觀察現象。而杜邦線太長則會不穩定,很多情況下,程式無法下載是與杜邦線連線不穩定有關係的(在使用優盤狀的STLINK時,經常因為杜邦線太長或者接觸不良導致下載失敗,後來換成航空線直接焊接上去就可以下載,說明這種stlink的io口驅動能力欠佳)。

考慮以上的缺點,我決定使用現在最常見的micro-USB線來連線e-Link32和PC機。於是經過改版,e-Link32變成了下面這樣(手工焊接除錯版):

其中白色的SH1.0端子和右側的5P彎針都是SWD介面。為啥要增加一個SH1.0端子呢,因為在有些電路里,保留2.54 的插針都是對空間的浪費,而且插針是要佔用PCB的雙面,對其他佈線造成了影響。所以增加了SH1.0端子介面,以後大家做板也可以使用這樣的埠、減小板子面積,方便除錯。

這個版本e-Link32我贈送給五個人進行測試,大概是從16年12月份開始測試的、到17年8月份沒有人任何問題,所以我才批量了1000個。選用的是最可靠的PCB提供商和貼片廠商,做出的板子如下:

一個產品必須有完善的文件。在量產的階段我也進行了相關文件的編寫

具體文件可以在淘寶寶貝詳情下載。大概具體內容如下:

另外清晰的闡述了elink32如何連線開發板和電腦:

以及如何用elink32給帶20腳jtag介面的開發板下載程式:

現在可以說完成了當時提出的這個需求,實現了具有以下功能的偵錯程式:

經測試,可用於但不侷限於以下晶片的除錯:

STM32F0,STM32F1,STM32F2,STM32F3,STM32F4,STM32F7

STM32L0,STM32L4

LPC800XX,LPC1100XXX,LPC1200XXX,LPC1300XXX,LPC1500XXX,LPC1700XXX,LPC1800XXX,LPC4000XXX,LPC4300XXX,LPC5400XXX,

K60

HT32F16XX,HT32F52XXX

NV32F100XXX

EFM32XXX

W7500

列表有待完善。

有人提出了:帶串列埠的東西其實早有了,那麼你可以去看看,網路上也有很多教程教大家做這樣的下載器的,我可以花一兩天時間根據教程完成這麼一個下載器,但我肯定沒有勇氣把他批量了放在市場上給大家用。一款工具性的東西需要經過長期的穩定性測試、還需要對加工工藝進行測試、這些流程都增加了產品的成本,但是卻是保證使用者買到有保證的產品的一個必須的投入。

相容市面上絕大多數ARM Cortex-M 系列微控制器。

500ma3.3v對外供電電流,加自恢復二極體保駕護航。

半導體原廠提供韌體與技術支援。

一個USB口完成下載除錯串列埠通訊,一遍單步一遍檢視串列埠資料,為你的電腦節省一個寶貴的USB口。