【分享】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

1 Like