關於這個工具
四種容器,裝的都是「帶位址的位元組」
Intel HEX、Motorola S-record 和 UF2 講的其實是同一句話:*這些位元組要放在這個位址*。純 .bin 只有前半句,位址被丟掉了,所以光看一個 BIN 沒有人知道它該去哪裡。這四種丟進來都行,格式是從檔案內容本身判斷的:開頭四個位元組是不是 UF2 加一個換行、行首是不是 :、S 後面接的是不是數字。副檔名一概不看,因為有人把 S-record 取名叫 .hex,也有人叫 .s19、.s28、.srec、.mot。萬一判斷錯了——標頭被截掉、第一行被砍掉——你可以逐檔手動指定,頁面也會告訴你它原本以為那是什麼。
檢查碼對不上時,要看的是兩個數字
會讀 Intel HEX 的工具都會說「這行壞了」,但很少有工具告訴你是*怎麼*壞的。這裡會把兩個位元組並排:行上寫的那個檢查碼,和用這筆記錄的內容重算出來的那個。差一個位元,通常是傳輸過程翻了一位;差的剛好是位元組數,通常是有人手改過檔案卻忘了重算。壞掉的一行也不會吃掉後面的行——第 5 行掛掉跟第 6 行完全無關,所以二十萬行的映像檔裡壞一筆記錄,你損失的就只有那一筆。其他結構性的問題也一樣都會點名:EOF 記錄後面還有資料、長度不對的位址記錄、沒人定義過的記錄型別。
段落、空隙,還有兩個檔案搶同一批位元組
記錄讀完之後會收攏成段落,也就是有起始位址和長度的連續區塊,中間的洞則列成空隙並標出各自大小。燒錄前你要看的就是這張圖:0x0000 是開機載入程式、0x8000 是應用程式,中間 30 KB 什麼都沒有,而攤平成 BIN 就得拿東西把它填滿。同一個檔案自己重複寫到同一個位元組時,那段範圍會被列出來,不會被安靜地和稀泥。換成*兩個*檔案搶同一段,整批合併會直接被拒絕,每個撞到的區間都連兩個檔名一起列出來——因為另一個選項是讓後載入的那個贏,而那正是開機載入程式無聲消失、直到板子不會開機才有人發現的走法。
再寫回檔案
任何輸入格式都能轉成任何輸出格式。Intel HEX 可以設定每行幾個位元組,也能選要不要寫 type-04 擴充線性位址記錄。S-record 可以釘死位址寬度(16 位元用 S1/S9、24 位元用 S2/S8、32 位元用 S3/S7),不指定就挑「裝得下實際最高那個位元組」的最窄形式。UF2 要填 payload 大小和 family id,id 會去對公開的 family 表,所以打錯會變成「未知的 id」跳出來,而不是變成板子默默無視你拖進去的檔案。攤平成 BIN 則要指定空隙的填充位元組,預設 0xFF,因為抹乾淨的快閃記憶體讀起來就是這個值。整套都跑在這個分頁的 Web Worker 裡,什麼都不會上傳。