工具 · 廠商限制

你要的工具可能就在桌上

我們卡在一個很具體的問題:只有一台燒錄器,卻有三塊板子想同時借出去。 為了解決它,花了兩天拆一支壞掉的除錯器、量腳位、改韌體。 最後答案是——要的工具一直放在桌上,只是被廠商的軟體擋住了。

問題長什麼樣

要把程式寫進一顆微控制器,需要一台「燒錄器」(也叫除錯探針)。 我們手上只有一台原廠的,而三塊板子要同時出借,就少了兩台。

桌上其實還有兩塊別的開發板,每一塊上面都內建了一台燒錄器 ——那是它們用來燒自己的。問題是:那些燒錄器是另一家廠商做的, 而那家廠商的軟體只認自家的晶片

所以直覺的結論是「那兩台不能用」。我們就是這樣認定的,然後開始繞遠路。

關鍵的分層:誰決定「支援哪些晶片」

整條鏈其實有三層,而大部分人(包括我們)一開始都把它想成一層:

做什麼知道對面是什麼晶片嗎
電腦上的軟體知道「這顆晶片的記憶體怎麼抹、怎麼寫」知道
燒錄器韌體只負責把訊號打出去不知道,也不需要知道
目標晶片被寫入的那一顆

「支援哪些晶片」是第一層決定的,不是燒錄器決定的。 廠商的軟體拒絕非自家晶片,那是一條商業上的規則, 不是硬體上的限制——中間那層根本沒有能力分辨。

換句話說:換掉電腦上的軟體,那台燒錄器就能燒別家的晶片。 而開源的替代軟體本來就存在,也本來就支援我們那顆晶片。

實際要做的只有三件事

一、把燒錄器跟它自己的晶片斷開

那些開發板出廠時,內建燒錄器是接到板子自己的晶片上的。 要拿它去燒別的東西,得先把這個連接拔掉——通常是兩個跳線帽, 拔掉之後燒錄器就會改走板邊的除錯接頭。

這件事一定要查手冊。 我們憑印象給了一次指示, 結果是對的;後來自己懷疑又改口,那次才是錯的。 兩次都可以用同一個動作解決:把手冊打開。

二、換掉電腦上的驅動程式

廠商的驅動只讓自家軟體使用那台燒錄器。換成通用的驅動之後, 開源工具才叫得動它。這一步只改電腦上的設定,不動硬體、不寫任何東西進去,隨時可以還原。

要注意的是:那台燒錄器對電腦來說其實是三個裝置合在一起 (除錯、隨身碟、序列埠)。只換「除錯」那一個,另外兩個維持原狀, 原本的用法就都不會壞。

三、換成開源的燒錄軟體

開源工具靠「晶片描述檔」知道每顆晶片怎麼燒,而那些描述檔是各家原廠自己發布的。 我們那顆晶片的描述檔早就在官方套件裡,而且電腦上已經裝好了

最貴的一課:讀得到,不代表讀的是你以為的東西

接好線之後,第一次讀取成功了,我們當場宣布「瓶頸解除」。 那是假的。

第一步的跳線帽根本沒拔掉(把板上印的編號看錯了一個字), 所以燒錄器還連在它自己的晶片上——我們讀到的是那塊板子自己,不是目標。

而線索早就在讀數裡:讀回來的那個數字,正好是那塊板子記憶體的大小, 跟目標晶片對不上。我們前一天才親手寫下過這個判斷範圍,卻沒拿來檢查自己的讀數。

後來怎麼抓到的

換一個工具連線時,它順口印了一行「偵測到的處理器型號」——而那個型號是錯的。 再補讀兩個晶片自報的身分暫存器,才確定接錯了對象。

問題答案
讀得到東西嗎?讀得到 ✓
讀到的是誰?錯的晶片 ✗

連上之後第一件事,是確認「對面是誰」,不是「讀得到嗎」。 讀得到值只證明有東西在回話。 這條規則的成本,是我們一整個上午。

第二課:工具自己驗不過,不等於寫壞了

同一天遇到兩次,症狀一模一樣,原因完全不同:

看到的錯誤真正的原因
「燒錄程序初始化失敗」A 晶片的燒錄程序去跑在 B 晶片上(就是上面那個接錯)
「寫進去的內容跟檔案不符」寫入其實是對的,是工具把資料從錯誤的位置讀回來比對

第二個的證據很漂亮:比對出來的差異裡,「期望值」和「實際值」分別是兩支不同程式的起始位址 ——一眼就看得出它讀的是另一個區域,不是寫壞了。

兩次都是靠「換一個獨立的工具再驗一次」分辨出來的。 這也是為什麼最後每一項都用原廠工具再驗一遍: 寫的人和驗的人,不要是同一個。

結果

項目之前之後
可用的燒錄器1 台3 台
要花的錢0 元(都是本來就有的)
要動的硬體只有兩個跳線帽

而先前為了解這個問題所做的——拆開一支壞掉的除錯器、解開它的保護、 量出腳位、移植兩套韌體——全部都不需要了

那些工作本身沒有白費(過程與量到的事實都留著), 但它們解的是一個其實不存在的問題

可以帶走的三句話

老實說的限制