BW16 上手手冊

中文版 | English Version

目錄


簡介

這裡是提供一份基於RTL8720DN(BW16)模組遇到的各種問題解決方法。請通過在這篇文章下的評論提供任何反饋,使得更多人可以受益。這篇文章的最終版本可以在Amebad Read The Doc官方往站上找到。

此文件是基於原廠工程師翻譯的中文版本,正確性請依照該文章為主。


如何更新軔體

事前準備

  • USB 轉串列
  • BW16模組

連接

2-1

BW16 USB轉串列模組
LOG_RX (PA8) TX
LOG_TX (PA7) RX
3V3 3V3
GND GND

如何讓BW16模組Reset

將EN 接腳 連接到地(GND) 這樣就可以讓BW16 Reset

如何進入BW16 軔體下載模式

  1. 將LOG_TX (PA7) 接至 GND.
  2. 將 EN 腳接至 GND, 等待一下之後然後將EN腳再接到VCC
  3. 將LOG_TX (PA7) 連接到USB轉串列模組的RX腳上
  4. 現在BW16已經在下載模式

#更新軔體方法

BW16是由安泰信(B&T)公司所推出模組,其中已經預先燒錄好AI-Thinker 的AT 指令集,其畫面如下所示

2-2

此時將會造成,雖然透過Ardunio下載顯示成功,但是只要Reset 還是恢復到預設程式如上圖所示

更新解決方法

方法1–使用OTA清除Flash

B&T預設軔體可以通過Realtek的Image Tool提供的OTA方式進行更新,使用者可以通過AT 命令更新軔體。 OTA方法的詳細描述和常用AT命令的定義在B&T《RTL8720D AT命令用戶手冊》附錄6.1中進行了描述,可以在下面的參考部分找到。

步驟1 - 事先準備

ambiot GitHub 的鏈接下載 ambd_sdk。 Realtek 的 Image Tool 可以在以下文件路徑下找到:

“ambd_sdk\tools\AmbaD\Image_tool\image_tool.exe”

###步驟2– 使用AT 命令連接到WiFi熱點

打開任意串列工具如,Tera Termcutecom等。
2-3

使用AT命列連接到無線分享器

“#ATPN=your-SSID,your-password”

等待回應

“#ATPN OK” 

(詳情請參考B&T《RTL8720D AT指令用戶手冊》3.2節).

請注意,PC 和 BW16必須再同一個網段內。

步驟3 – 產生OTA 燒錄檔案

使用步驟 1 中下載的 ambd_sdk 中的鏈接中的 Ameba Image Tools 生成可上傳到BW16的 OTA.bin

“ambd_sdk\tools\AmbaD\Image_tool\image_tool.exe”

點轚“Generate”籤頁,在“Generate Target”部分中選擇“OTA_All”。 然後,勾選Bin 3`右側的複選框,可以在下面的路徑中找到Arduino產生的燒錄檔案:

C:%USER%\AppData\Local\Arduino15\packages\realtek\tools\ameba_d_tools\1.0.5\km0_km4_image2.bin”

2-5

然後點擊 Generate, 然後儲存 OTA.bin 在以下路徑

“ambd_sdk\tools\DownloadServer”

2-6

步驟4 – 進行OTA流程

  • 打開Windows命令提示字元,並且切換到以下路徑
    “ambd_sdk\tools\DownloadServer”.

  • 點選start.bat並等待顯示的TCP Port,預設的Port為 “ 8082 ”.
    2-6

  • 然後在命令提示字元中輸入ipconfig來獲取本機的IP位址
    2-8

  • 獲得IP位址與 Port之後執行DownloadServer…exe
    .\DownlaoadServer.exe YOUR-PORT-NUMBER ota.bin
    正確設置DownloadServer…exe後,命令提示字元將顯示以下訊息
    2-9

*因為之前我們已經在步驟 2 中將 BW16 模塊(OTA 客戶端)連接到與 PC(OTA 服務器相同的網路. 現在我們使用OTA 更新命令 “#ATSO=IP-address,port-number” 連接到OTA伺服器 (更多資訊請參考 B&T《RTL8720D AT 命令用戶手冊》第 2.9 節).
輸入命令之後,請等待命令提示字元出現 ”Erase is ongoing……”
2-10
可以看到目前OTA狀態,等待整個上傳過程完成。 OTA 完成後,再次按下Reset按鈕。

步驟5 -通過UART下載Arduino程序

Ardunio 透過UART下載程式

現在我們可以在Ardunio中通過UART下載程序,但是由於RTLDuino USB芯片連接到LP_UART而不是LOG_UART。 LOG_UART_TX (GPIOA_7) 和LOG_UART_RX (GPIOA_8) 引腳用於程序上傳。 但是,板載USB轉UART模塊連接LP_UART_TX(GPIOB_1)和LP_UART_RX(GPIOB_2),不能直接用於程序上傳。

2-11

您可以選擇使用連接到 GPIOA_7 和 GPIOA_8 的外部 USB 轉 UART 模組,或者您可以將這兩個腳按照下圖接法以使用板載 USB 進行程序上傳:

  • PA8 ––– PB1
  • PA7 ––– PB2

如果要進入UART下載程序,先按住BURN和RESRT鈕,然後先放開RESET最後再放開BURN鈕。

方法2–使用AmbeaD_SDK_Image_tool清除Flash

如果因爲網絡限制,無法使用透過連接Wi-Fi後上傳程序到BW16這種方式(OTA)。 另一種方法是使用 Image Tool 從寄存器地址0x8000_0000開始清除flash内部的所有資料,直到2MB的image結束位置。這個步驟完成後,可以使用Arduino IDE 重新將Realtek Arduino SDK燒錄回開發板中。

2-12

按照 方法 1 步驟 1 下載 ambd_sdk 並在繼續使用此方法之前進行必要的設置準備。

步驟一 打開 Image Tool

將波特率設置為“115200”,然後從 Memory Address 0x0800 6000 中選擇 Flash Erase 範圍,具體地址為 2024 KB。 將BW16進入下載模式,然後單擊“Erase”按鈕。

image

當完成清除步驟之後按下RESET按鈕, 如下圖所示 “#calibration” 信息將不會出現在serior monitor 中:

image

2-13

步驟二 使用Arduino IDE 重新燒錄 Image

按照 方法1 步驟 5 的引導燒錄任意一個Arduino示例到開發板后, 按下RESET按鈕,此時將重新在 Serial Monitor 中看到 Ameba Arduino SDK Image 的信息.

特別感謝@minexo79 用繁體中文列出了此方法的文檔,可在此鏈接中找到:


方法3–使用Image_tool清除Flash

由於 Realtek 的 Amebad Image Tool 是專為 Windows 系統設計的。 對於使用其他操作系統的用戶,請參考@Alphi_Jiang 在此鏈接中提供的方法:

https://www.facebook.com/groups/accomdemy/permalink/1671250719731393/

這是方法二的簡化版。他建議使用內建的image_tool 進行Flash的清除和下載,而不是執行“amebad_image_tool.exe”。
我還沒有測試過這種方法,任何嘗試過這種方法的人都可以在下面的評論中分享他/她的經驗。

步驟1- 建立一個資料夾,裏面包含下面檔案

2-14

步驟2 - 產生大小為2024KB,檔名為km0_km4_image2.bin 取代原來ardunio 產生的檔案

範例:
$ambed_image_tools /dev/ttyUSB0

@Alphi_Jiang 提供一個簡單的python 檔案方便產生km0_km4_image2.bin

========================== gen_bin.py ===========================================

# -*- coding: UTF-8 -*-
import sys
import os
def main():
    if len(sys.argv) < 4 :
        print('gen.py <file> <size> <pat>')
        print('example: gen.py km0_km4_image2.bin 1FA000 ff')
        sys.exit(1)
    else:
        target_name = sys.argv[1]
        target_size = int(sys.argv[2],base=16)
        target_pat  = int(sys.argv[3],base=16)
        
        print('name: {0} size: {1} pat: {2}'.format(target_name,target_size,target_pat))
        with open(sys.argv[1],"wb") as file:
            buff = [target_pat]*target_size 
            target_context = bytearray(buff)   
            file.write(target_context)
            file.close()
    
if __name__ == '__main__':
    main()

步驟 4 – 執行 “image_tool.exe COM_PORT”

請先按照方法1步驟1進入UART下載模式,然後執行以下動作
2-15


參考

  1. Introduction of RTL8720DN on Instructable:
    https://www.instructables.com/RTL8720DN/
  2. Load Arduino image into BW16:
    How to load BW16 program with Arduino - #13 by Alphi_Jiang
  3. RTL8720DN (BW16) IMG2 SIGN Invalid Solution:
    RTL8720DN(BW16) IMG2 SIGN Invalid Solution
  4. B&T “RTL8720D AT Command User Manual”:
    https://docs.ai-thinker.com/_media/rtl8710/docs/rtl8720d-at指令手册v2.4.1-20190814.pdf
  5. FTDI Driver Download from here:
    https://ftdichip.com/wp-content/uploads/2021/02/CDM21228_Setup.zip
2 Likes

感謝 Alphi 大大幫忙把原文翻譯成繁體中文 :pray:
您提到原文中出錯的部分我會去修改~ :rofl: