--- tags: Develop, MCU --- # RTL8720DN(BW16) IMG2 SIGN Invalid Solution :::success > [name=黑貓] [time=Mon, Jul 12, 2021 4:22 PM] 哈囉,如果你有看到這篇文章,有一部分可能是你的BW16模組/開發板無法正常運作,可能你跟我遇到的情況一樣。 這裡我會紀錄BW16模組/開發板從無法運行到解決問題的過程及原因,希望透過這篇文章可以幫助到更多想玩BW16模組/開發板的夥伴,以上! ::: ## [前言](https://www.facebook.com/groups/arduinotaipei/permalink/4663235950370486/) 前幾天從友人收到這一塊神奇的Ameba開發板,但當燒錄Blink程式進去之後發現無法正常運行(連燈都沒亮),當時確定程式確定有燒錄成功,將Blink程式加入幾行Serial單元的程式碼之後再次燒入,打開Serial Terminal之後也無法正常顯示出來,但當按下RST按鈕之後會出現一條錯誤訊息: ``` #[MODULE_BOOT-LEVEL_ERROR]: IMG2 SIGN Invalid ``` 本人有試著用Google查詢過,但礙於BW16超級野生,以及本人功力不夠,所以當時沒馬上找到解決辦法。 附上當時測試的程式碼: ```html 原本的Blink的程式:https://pastebin.com/74bCVW5t 將Blink加入Serial後的程式:https://pastebin.com/JmpY9K09 ``` ## 過程 > [time=Fri, Jul 9, 2021] 在當天晚上伴伴學的分享之後,提出了這塊BW16無法燒錄的問題,由於Zhu Qi有事不在現場,當時還在線上的Maker以及學友幫忙本人做了初步的排除(包括量測腳位電壓,板子燒錄正確與否...等),但依舊無法找出確切問題點,但同時也發現了目前時間的Arduino IDE 2.0.0 beta版存在許多的問題。 > [time=Sun, Jul 11, 2021] 參閱過Realtek Ameba相關資料,以及安信可的BW16 Module Datasheet後,本人重新安裝Arduino IDE,並試著使用Realtek Ameba Image Tools清除BW16的Flash(所有數值皆不變,以預設值操作),重新燒錄Code過後,一樣無法正常運作。 經過Maggie及Honki的建議,將這個問題發文到Arduino Taipei社團,以及聯絡Zhu Qi尋求解決辦法(在此感謝Honki將貼文幫忙分享到Ameba開發社團),有幾位大神提出了各種的問題方向,整理如下: - 用了錯誤的編譯器 - 晶片型號指定錯誤 - **指定的燒錄位址錯誤** - **原本存在Flash內的原廠韌體沒清乾淨** > [time=Sun, Jul 12, 2021] 早上與Zhu Qi邊參照Realtek Application Note,試著理解RTL8720DN的內部Flash構造,以及認識Image Tool的讀取功能,同時Zhu Qi正試著聯絡各路Ameba大神們,想辦法幫忙本人解決問題,到中午之前我與Zhu Qi試過下方幾個參數,但依舊無解: - `Addr: 0x08000000, Erase Size: 4K` - `Addr: 0x08006000, Erase Size: 4K` - `Addr: 0x08006000, Erase Size: 1024K` 到了下午,各路Ameba大神們模擬了我的問題,並且實驗過後,終於傳來解決的方法,**將需要擦除的記憶體大小更改成2024KB**。經本人嘗試之後也成功解決無法成功運作的錯誤訊息。並重新燒錄Blink程式之後,成功讓BW16得以正常運作。 **在此感謝Zhu Qi的同事,還有幫助過我的大神們。** ## 解決步驟 1. 將`BW16`的`LOG TX`, `LOG RX`和`GND`與`UART Dongle`連接,並且將`BW16`通電。 2. 3. 打開`Ameba Image Tool`。 4. 點選`Chip Select`,將晶片設置為`Ameba D(8721D)`,`Baudrate`根據USB-TTL晶片的情況設定,預設是`115200`。(通常`Baudrate`越高,燒錄/清除的速度就會越快) 5. 將`Flash Erase`區塊的參數照下方圖片設定: ![](https://i.imgur.com/SJe0gLL.png) 6. 將`BW16`進入`UART`下載模式。 7. 按下`Erase`,清除`Flash`內容。 ![](https://i.imgur.com/fkABtHo.png) 8. 當看到`Flash image done.`時,代表已經成功清除掉`Flash Memory`的程式了。 ![](https://i.imgur.com/29kAr9o.jpg) 9. 打開`Arduino IDE`,選擇`Blink`範例。`(File -> Examples -> 01.Basic -> Blink)` ![](https://i.imgur.com/8JxOEGG.png) 10. 選擇開發板為`RTL8720DN(BW16)`以及與BW16溝通的`COM Port`。 ![](https://i.imgur.com/JnAS8ZF.png) ![](https://i.imgur.com/Khc7MXd.png) 11. 確保沒有任何的序列埠溝通程式正在與BW16通訊。(包含`Arduino IDE`的 **序列埠監控視窗**) 12. 將`BW16`再次進入UART下載模式。`(UART Download Mode)` 13. 按下`Ardino IDE`上方的`Upload (上傳)`。 ![](https://i.imgur.com/RjmSxut.png) 14. 確認燒錄完畢,且下方視窗有出現`All images are sent successfully!`等字樣。 ![](https://i.imgur.com/jQO18IH.jpg) 15. 重新連接`BW16`。(開發版按下`RST`按鈕) 16. 當你看到`LED`綠燈開始閃爍,恭喜你成功拉!! ## 運作原理 > 節錄自[朱琪 Zhu Qi - BW16 Troubleshooting Guide](https://forum.amebaiot.com/t/resources-bw16-troubleshooting-guide/678/3) ### 使用Image_tool清除Flash 從下圖中我們可以看到,0x8000-6000 到 0x8020-0000- 位址範圍包括:“KM0 IMG2 OTA1”、“KM4 IMG2 OTA1”、“KM4 IMG2 OTA1”、“KM4 IMG3 OTA1”、“使用資料” ”、“KM0 IMG2 OTA2”、“KM4 IMG2 OTA2”、“KM4 IMG3 OTA2”。 之所以選擇這個範圍,是為了徹底清除flash內部的所有資料。 ![](https://aws1.discourse-cdn.com/standard11/uploads/ameba/original/1X/f7928ee2b75f66fd1720584d25ccd453bf2846a0.png) 按照方法 1 步驟 1 下載 ambd_sdk 並在繼續使用此方法之前進行必要的設置準備。 ### 打開 Image Tool 將波特率設置為“115200”,然後從 Memory Address 0x80006000 中選擇 Flash Erase 範圍,具體地址為 2024 KB。 將BW16進入下載模式,然後單擊“Erase”按鈕。 之所以使用2024 KB,是因為我們需要防止“KM0 Boot (8KB)”、“Backup (4KB)”、“System Data (4KB)”、“KM4 Boot (8KB)”中存儲的flash 資料被意外 抹去。 因此,我們可以從下面的簡單數學計算中得到數字 2024: 2MB = 2048KB,2048 -8 -4 -4 -8 =2024 KB。 ![](https://aws1.discourse-cdn.com/standard11/uploads/ameba/original/1X/12d33bfd7ff181c5bbbfb5261e2254e276cdf0e1.png) 當完成清除步驟之後,就可以按照正常Arduino下載程序步驟執行 ***Step 9***. ## 致謝名單 - [Ameba IoT 開發社群](https://www.facebook.com/groups/AmebaIoT) - [Arduino Taipei](https://www.facebook.com/groups/arduinotaipei) - [伴伴學 Accomdemy](https://www.facebook.com/groups/accomdemy) - 朱琪 Zhu Qi - 鄭鴻旗 Honki - Maggie Zhuang - 馬嘉宏 馬爸 - Ghosty Guo - David Chen - 各路無名的大神 ## 參考資料 - 燒錄BW16的方式參考以下文章: - https://hackmd.io/xyMnu03HSzG5Sdph2vddBQ - https://www.instructables.com/RTL8720DN/ - [Alphi_Jiang - BW16 問題排除手冊](https://forum.amebaiot.com/t/bw16/682) - [朱琪 Zhu Qi - BW16 Troubleshooting Guide](https://forum.amebaiot.com/t/resources-bw16-troubleshooting-guide/678/3)