【分享】Ameba 自動烧录工具, 你沒有玩過的全新版本 🥳

簡介

感謝來自Ameba社群成員Joe Hsieh的貢獻,在他的幫助下, Ameba Arduino家族中的RTL8722DM 和 BW16 開發板現已合併加入了自動燒錄的功能。在原始燒錄程式代碼的基礎上,Joe重新編寫了一套可以支援在三大平臺使用的自動燒錄代碼 “amebad_image_tool”(Windows/Linux/MacOS),避免了之前繁瑣的按鍵上傳的操作。
目前,這套Ameba自動燒錄工具已經在Windows 10 64位元作業系統、Linux作業系統以及macOS(Big Sur)分別使用BW16開發板和RTL8722DM EVB通過了測試並已經成功支援。

背景介紹

這裡先簡單介紹一下Joe是如何根據逆向工程弄清楚自動上傳工具的工作原理。首先,“SerialMon”(一個序列埠嗅探工具)被用來讀出圖像工具在上傳圖像時發生的通信。記錄的日誌可以保存為文本格式,以方便分析。修改圖像工具中的一些設置(如上傳速度、快閃記憶體位址)將導致通信以及日誌的改變。通過測試每個設置,記錄通信日誌,並與以前的日誌進行比較,就有可能弄清每個設置是如何對應於發送資料的變化的。然而,並不是所有的變化都可以通過比較日誌來解釋,因此 "IDA反彙編 “工具被用來把二進位檔案翻譯成”.c "代碼,以提取剩餘的缺失資訊。

問題說明

使用Ameba開發板時,如果想進入UART下載模式,需要在LOG_UART_TX(PA7)保持低電平的狀態下按下RESET(CHIP-EN) 按鈕拉低該腳位元後再鬆開。詳細步驟請參考下面流程圖中的流程:
image

通常情況下,使用者需要通按下EVB上的按鈕手動實現燒錄過程。然而,上述程式其實可以通過使用USB-UART適配器(如CH340G、CP2102、FT232)上的DTR和RTS引腳、2個BJT電晶體(如S8050)和2個10kOhm電阻所組成的外接電路來實現自動燒錄。

環境配置

步驟1. 設置開發環境

請根據你所使用的EVB/開發板,參考相應的入門文件。

  • 對於使用BW16的用戶,請參考 Ameba ARDUINO: BW16/RTL8720DN 入門手冊中 "設置開發環境 "一節的詳細說明。
  • 對於使用RTL8722DM的用戶,請參考 Ameba ARDUINO: RTL8722入門手冊中的 "設置開發環境 "一節,瞭解詳細說明。
  • 對於使用RTL8722DM-MINI的用戶,目前RTL8722DM-MINI的支援功能還在測試階段,測試結束後的相關資訊會更新在這裡。

步驟2.對環境進行相應的補丁

由於這個工具完全取代了原廠使用的上傳工具 “amebad_image_tool.exe”(Windows/Linux/MacOS),所以需要對開發環境打一個補丁。
從GitHub下載 "ameba_bw16_autoflash "倉庫裡的所有檔。並根據當前你所使用的系統,替換掉下面路徑中的原廠 "amebad_image_tool"可執行檔:

  • Windows 系統
    下載並替換下列檔路徑中的“upload_image_tool_windows.exe” 文件: C:\Users\xxxxxx\AppData\Local\Arduino15\packages\realtek\tools\ameba_d_tools\1.0.5
  • Linux 系統
    下載並替換下列檔路徑中的“upload_image_tool_linux” 文件:
    ~/.arduino15/packages/realtek/tools/ameba_d_tools/1.0.5
  • MacOS (Big Sur) 系統
    下載並替換下列檔路徑中的“upload_image_tool_macos” 文件:
    ~/Library/Arduino15/packages/realtek/tools/ameba_d_tools/1.0.5

Step 3. 硬體修改

在軟體環境設置完成後,需要在開發板上添加一些額外的硬體元件以實現自動燒錄的功能。

所需元件

  • USB-TTL 串口適配模組(例如,CH340G,CP2102,FT232)
  • 10KOhm 電阻 x2
  • BJT電晶體x2 (例如,S8050)
  • BW16 / RTL8722DM / RTL8722DM-MINI 開發板

電路連接圖 和 邏輯真值表

image
Figure 1 電路連接圖


image
Table 1 電路邏輯判斷真值表

運行原理

CH340是一個USB匯流排轉換晶片,它可以用來將USB轉換為UART序列介面。通常它被配備在沒有原生USB串口的微控制器上,用來提供一個串列USB連接。在串口模式下可以使用如下常見的MODEM聯絡信號:RTS(請求發送)、DTR(資料終端就緒)、DCD(資料載波檢測)、DSR(資料集就緒)和CTS(清除發送)[2]。

image

根據上述代碼,我們可以知道自動燒錄過程如下:

  1. 當上傳過程開始後,程式寫入DTR=1,RTS=0,根據真值表判斷,此時RST=0,晶片進入重定模式
  2. 延時500ms後,程式寫入DTR=0,RTS=1,此時LOG_UART_TX(PA7)=0,模組準備進入下載模式
  3. 延時200ms後,DTR=1,RTS=1,此時RST和LOG_UART_TX引腳均被拉高,此時晶片在下載模式中被重新開機
  4. 使用USB-UART序列埠傳輸所需的image
  5. 傳輸完成後DTR=1,RTS=0,此時RST=0,晶片自動進入重定模式
  6. 延時500ms後,DTR=1,RTS=1,釋放RST引腳,允許晶片在正常模式下重新開機

參考資料

[1] GitHub 資源: ameba_bw16_autoflash
[2] USB串口晶片 CH340

3 Likes

您好,请问 Ameba ZII 的 RTL8720CM 有没有自动烧录的工具和上位机软件?

@Sky 您好,

可以去 ambiot 官方 GitHub 中的 ambz2_sdk repository 的 tools 裏面下載 image tool 進行燒錄,其他支持的上位機工具也可以在這裏找到。

這邊看來應該沒有釋出自動燒錄的工具。建議您可以去這個repository 中提出 Issue 詢問相關開發人員。

謝謝

你好,我想请教一下使用本帖的自动烧写工具和使用官方的工具烧写同样的固件,是不是表现是一样的?会不会出现一些意想不到的BUG?

你好,
這個工具已經合并到AmebaD的Arduino Tools中。

有兩點需要注意:

  1. 開發板上必須帶有自動燒錄電路:即2MOSFET 4R:
    image

  2. 目前支援自動燒錄的amebad開發板會有Auto Upload選項出現在Arduino IDE中。

如果您不放心功能,可以外接1中的電路,勾選自動燒錄并測試

用串口监控助手把通信的信息都抓了下来,Joe Hsieh的工具和Arduino里面集成的自动烧写工具发送的数据完全一样,看来是不存在问题的,谢谢!

1 Like