---
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)