🤖
LinkIt 7697 BlocklyDuino 使用指南
  • LinkIt 7697 BlocklyDuino 使用指南
    • 認識 LinkIt 7697
    • 認識 BlocklyDuino
    • BlocklyDuino v2 & v3 比較
    • 安裝開發環境 (v2)
      • 安裝 Arduino 編輯器
      • 安裝驅動並連接開發板
      • 安裝 BlocklyDuino 編輯器
      • 連結兩個編輯器並上傳程式
    • 安裝開發環境 (v3)
    • BlocklyDuino 基礎操作
    • 實作範例教學
      • A01. 內建 LED 閃爍
      • A02. 外接 LED 閃爍
      • A03. 外接 LED 呼吸燈
      • A04. RGB LED 顏色變化
      • A05. 外部按鈕控制開關
      • A06. 蜂鳴器播放聲音
      • A07 .可變電阻控制電壓輸出
      • A08. 伺服馬達控制
      • A21. DHT: 溫濕度感應器
      • A22. HTU21D: 溫溼度感應器
      • A23. PMSX003: PM2.5 感測器
      • A24. HC-SR04P: 超音波測距
      • A25. ADXL345: 加速規(動態)
      • A26. ADXL345: 加速規(手勢)
      • A27. 1602/2004: 液晶顯示模組
      • A28. WS2812: RGB 彩色燈條
      • A29. MFRC522: RFID
      • B00. Grove 相關基礎知識
      • B01. Grove 光感應器
      • B02. Grove 超音波測距感應器
      • B03. Grove 溫溼度感應器
      • B04. Grove 繼電器
      • B05. Grove LED 燈條
      • B06. Grove OLED 顯示器
      • C01. 雲端控制 LED 開關
      • C02. 上傳溫溼度到雲端
      • D01. 手機透過 BLE 讀寫裝置資料
      • E01. 遙控器: 按鈕控制 LED
    • 資源鏈結
  • LinkIt 7697 - Arduino IDE 開發指南
    • 環境設定
      • 設定 Arduino IDE
      • 將 LinkIt 7697 連接到電腦
        • 在 Windows 上安裝 CP2102N 驅動程式
        • 在 macOS 上安裝 CP2102N 驅動程式
      • 執行第一個程式
    • 開發指南
      • GPIO
      • UART
      • ADC
      • EINT (外部中斷 / External Interrupt)
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (索引式儲存空間)
      • RTC (Real-Time Clock)
      • Software Serial
      • 使用 Wi-Fi 函式庫
      • 使用 MCS 函式庫
        • 連接到 MCS
        • 連接到 MCSLite
          • 建立可透過 MCS Lite 控制的 Beacon
        • MCS 函式庫 API 使用手冊
          • MCSDevice
          • MCSLiteDeviceMCSLiteDevice
          • MCSDataChannel 相關類別
      • 使用 BLE 低功耗藍牙
        • 藍牙信標
        • 主控裝置
        • 周邊裝置
        • 已知限制
        • LBLE API 指南
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • 使用 LinkIt Remote
        • LRemote API
        • LRemote 控制元件 API
      • LinkIt 7697 腳位的初始狀態
      • LinkIt 7697 供電說明
      • 更新 Bootloader 與韌體
      • Flash 燒錄工具
      • FOTA 更新
      • LinkIt 7697 的功能限制
      • 自行編譯 Arduino Package
      • 回報問題
    • 週邊元件連接教學
      • SMD 按鈕
      • RGB 三色 LED
      • 可變電阻
      • 九軸感應器 (MPU-9250)
      • 溫度與濕度感應器 (AM2302)
      • 超音波距離感應器
      • 光感應器 (LM358)
      • 0.96 吋 OLED 顯示模組 (SSD1308Z)
      • 長條型 LED 顯示模組 (MY9221)
      • 繼電器
      • 伺服馬達 (EMAX 9g ES08A Servo)
      • 使用 74HC595 驅動七段顯示器
      • 使用 MAX7219 驅動七段顯示器
      • 使用 MAX7219 驅動 8x8 矩陣式顯示器
      • 使用 OLED 模組 (如 SH1106 / SSD1306... 等模組)
      • 使用 PCF8574 / PCF8574A 驅動 1602 LCD
    • 開發套件與擴充板
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • 下載
    • 資源連結
    • BSP 版本更新資訊
  • LinkIt 7697 - Development Guide for Arduino IDE
    • Environment Setup
      • Setup Arduino IDE
      • Connecting LinkIt 7697 to Computer
        • Install CP2102N Driver on Windows
        • Install CP2102N Driver on macOS
      • Run Your First Sketch
    • Developer Guide
      • GPIO
      • UART
      • ADC
      • External Interrupt
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (Key-Pair Storage)
      • RTC (Real-Time Clock)
      • Software Serial
      • Using the Wi-Fi Library
      • Using MCS Library
        • Connecting to MCS
        • Connecting to MCSLite
          • Build a Beacon controlled by MCS Lite
        • MCS Library API Reference
          • MCSDevice
          • MCSLiteDevice
          • MCSDataChannel Classes
      • Using Bluetooth
        • Beacons
        • Central Devices
        • Peripheral Devices
        • Limitations of LBLE library
        • LBLE Library API Guide
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • Using LinkIt Remote
        • LRemote
        • LRemote Control Classes
      • Initial Pin State of LinkIt 7697
      • Powering the LinkIt 7697
      • Update Bootloader and Firmware
      • Flash Uploading Tool
      • FOTA Update
      • Limitations of LinkIt 7697
      • Source Code of Arduino Package
      • Issue Report
    • Tutorial
      • SMD Buttons
      • RGB LED
      • Potentiometer
      • IMU 9DOF v2.0 (MPU-9250)
      • Temperature and Humidity Sensor Pro (AM2302)
      • Grove Ultrasonic Ranger
      • Light Sensor (LM358)
      • Grove OLED Display 0.96" (SSD1308Z)
      • LED Bar v2.0 (MY9221)
      • Relay
      • Mini Servo (EMAX 9g ES08A Servo)
      • Driving 7-segment Displays with 74HC595
      • Driving 7-segment Displays with MAX7219
      • Driving 8x8 Dot Matrices with MAX7219
      • Using OLED module (SH1106 / SSD1306... etc.)
      • Driving 1602 LCD with PCF8574 / PCF8574A
    • Kits and Shields
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • Download
    • Resources
    • BSP Release Notes
Powered by GitBook
On this page
  • 基本功能
  • 指令參數
  • 範例
  • 工作原理
  1. LinkIt 7697 - Arduino IDE 開發指南
  2. 開發指南

Flash 燒錄工具

Previous更新 Bootloader 與韌體NextFOTA 更新

Last updated 3 years ago

此工具為基於 Python 所開發的 LinkIt 7697 flash 燒錄工具,可同時適用於 CM4 以及 N9 的韌體燒錄。專案的 GitHub 頁面為:。

基本功能

  • 支援 Windows、macOS、以及 Linux (基於 Python 2.7)

  • 可燒錄區間為 bootloader、CM4 韌體 (應用程式執行檔)、以及 N9 韌體 (無線通訊系統)。

指令參數

-c COM_PORT      指定 COM port,例如 COM1、COM2、...、COMx 等。
-f BIN_FILE      欲燒錄的 bin 檔路徑。
-n DA_FILE       欲使用的 DA 檔案路徑。mt7697 預設使用的檔案為 da97.bin,而 mt7687 預設使用的檔案為 da87.bin。 
-p PLATFORM_NAME 欲燒錄的平台 (mt7687 | mt7697)。預設的燒錄平台為 mt7697。 
-t FLASH_TARGET  欲燒錄的區間 (cm4 | ldr | n9)。預設的燒錄區間為 cm4。

範例

Windows

使用下列指令透過 COM24 燒錄韌體 sample.bin:

upload.exe -c COM24 -f sample.bin

Linux 與 macOS

透過 Serial 裝置 /dev/cu.SLAB_USBtoUART 燒錄韌體 sample.bin:

python ./upload.py -c /dev/cu.SLAB_USBtoUART -f sample.bin

藉由搭配其他指令參數 (-n / -p / -t),可自行指定不同的 download agent、燒錄平台、燒錄區間等選項進行燒錄。

燒錄由 LinkIt SDK 產生的執行檔

若開發者使用 LinkIt SDK 4.x 進行開發,那麼應用程式編譯完會在工作目錄得到如下輸出:

.
├── flash_download.ini
├── your_application.bin
├── mt7697_bootloader.bin
└── WIFI_RAM_CODE_MT76X7_in_flash.bin

此時可藉由下列指令進行 bootloader (mt7697_bootloader.bin)、N9 韌體 (WIFI_RAM_CODE_MT76X7_in_flash.bin) 以及應用程式執行檔 (your_application.bin) 的燒錄:

註:此範例假設 upload.py 與 bin 檔位於相同的工作目錄,否則須在 -f 參數中指定完整的 bin 檔檔案路徑。

python upload.py -c /dev/cu.SLAB_USBtoUART -t ldr -f mt7697_bootloader.bin
python upload.py -c /dev/cu.SLAB_USBtoUART -t n9 -f WIFI_RAM_CODE_MT76X7_in_flash.bin
python upload.py -c /dev/cu.SLAB_USBtoUART -t cm4 -f your_application.bin

工作原理

MT7697 的 Flash 存取模式

MT7697 有兩種 flash 存取模式:一般開機時的 normal mode 與燒錄時的 Flash Recovery Mode。模式的切換是由 GPIO37 在平台上電當下的電位狀態而定。下表為 MT7697 datasheet 的描述,高電位時為 Recovery mode、低電位時為 normal mode:

可參考 LinkIt 7697 開發板腳位圖,GPIO37 對應到 HDK 上的 P6 腳位:

在 LinkIt 7697 上切換 Flash 存取模式

為了改善 7687 HDK "需經由手動操作才能切換 GPIO 37 狀態" 所造成的使用不便,在 LinkIt 7697 上設計了使用 CP2102N USB-to-UART 晶片控制 GPIO 37 的機制:藉由連接 GPIO37 (以及 SYS_RST_N 腳位) 與 CP2102N 的 flow control 針腳,開發者便能透過燒錄工具直接切換 GPIO37 的狀態與重啓 LinkIt 7697、不需再手動調整 jumper。

該控制邏輯的真值表 (truth table) 如下:

DTR
RTS
GPIO37
SYS_RST_N

0

0

0

1

1

1

0

1

0

1

0

0

1

0

1

1

對應的 Python 程式碼與控制電路邏輯為:

因此,若開發者使用終端機軟體連接 LinkIt 7697 的 Serial 埠,要注意該軟體相關的 flow control 設定必須關閉,否則將會影響到 LinkIt 7697 的開機流程進而無法正常運作。以 PuTTY 為例,在 Flow Control 的欄位需指定為 None:

或是以 eagleCom 為例,在 Lines 標籤頁裡的 DTR/RTS 設定需為低電位:

Flash 區間定義

LinkIt 7697 的 flash 區間劃分如下:

其中有三個區間可經由燒錄更新:

  • Bootloader。

  • N9 韌體 (Wi-Fi 和 Bluetooth 的通訊系統)。

  • CM4 韌體 (應用程式的執行檔 - 此為開發過程中最常被燒錄更新的部分)。

剩下的兩個區間為保留供 LinkIt SDK 內部使用:

  • FOTA:使用 OTA (Over-The-Air) 韌體更新時所需保留的空間。

  • NVDM:保留給非揮發性資料儲存用的空間。

燒錄流程

RAM 和 Flash 的初始狀態如下:

Python 程式會先重置開發板並將系統切換進 Flash Recovery mode。在此模式下,MT7697 晶片的 Boot ROM (BROM) 會從 UART0 接收資料並將之載入 RAM 以供執行,此透過 BROM 載入執行的程式稱為 Download Agent (DA)。

當執行權從 BROM 轉至 DA 後,DA 會透過 XModem 協定與電腦端的 Python 程式繼續進行資料傳輸,並接收欲燒錄的新韌體,然後將之寫入到指定的 flash 區間:

完成新韌體的寫入後,Python 程式會重啟開發板並將 flash 模式設定為正常開機模式 (normal mode),至此結束整個 flash 燒錄的流程。

https://github.com/MediaTek-Labs/mt76x7-uploader