BLEシリアル通信をWioTerminalとスマホで!

本記事は、WioTerminalとAndroidスマートフォンの間でデータのやり取りをする方法を紹介します。

ネットで検索したときに少しはPlatformIO + Seeedのライブラリ + WioTermianal で無線通信をしている記事がありましたが、
数が少なく心配だったので、成功例を増やして、あとから来る方に安心してトライしてもらう意味で本記事を執筆しました。

用意するもの

手順

  1. WioTerminalの中の無線通信用CPU (RTL8720DN)のファームウェアを、ATSAMD51から更新します
    • ambd_flash_tool (https://github.com/Seeed-Studio/ambd_flash_tool)
    • git cloneするか、圧縮ファイルをダウンロード、解凍します
    • WioTerminal の電源ボタンを二度押し下げ、ファームウェアを書き換えられる状態にします
    • Windowsの場合は、Power Shell を開きambd_flash_toolの中の実行ファイル ambd_flash_tool.exeや ambd_flash_tool.py がある階層へ移動します
    • 次のコマンドで、データをクリアします
ambd_flash_tool.exe erase
    • 次のコマンドで、データを書き込みます
      • はじめに、WioTerminal_USB2Serial_Burn8720.ino.binがATSAMD51用のプログラムとして書き込まれます
      • 次に、firmware配下にある km0_boot_all.bin、km0_km4_image2.bin、 km4_boot_all.bin という名前のファイルを書き込むようになっているようです
ambd_flash_tool.exe flash
      • 実行の様子は、本記事末尾に貼ってあります
  1. VSCodeを起動し、新しいプロジェクトを作成
    • プロジェクト名例 : WioTerminalBLESerial
    • platform : Arduino
  1. platformio.iniを開き、ライブラリを追加します
    • ※ Seeed Arduino rpcBLEは、platform IOのライブラリ検索でヒットしたので、platform IOのライブラリ管理からプロジェクトに追加しました
    • rpcUnifiedとFreeRTOSは、ライブラリ検索でヒットしなかったため、gitリポジトリを指定しています
    • 変に混在させず、すべてgitリポジトリを指定すれば良いと思います
; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:seeed_wio_terminal]
platform = atmelsam
board = seeed_wio_terminal
framework = arduino
lib_deps = seeed-studio/Seeed Arduino rpcBLE@^1.0.0
           https://github.com/Seeed-Studio/Seeed_Arduino_rpcUnified.git
           https://github.com/Seeed-Studio/Seeed_Arduino_FreeRTOS.git
  1. src/main.cppを開き、サンプルコードを貼り付けます
  1. コンパイルが成功することを確認します
  1. WioTerminalに書き込みます
  1. Androidスマートフォンに、SerialBluetoothTerminalをインストールします
  2. SerialBluetoothTerminalを起動します
    • 左上のハンバーガーメニューを押します
    • Devicesを選択します
  3. WioTerminalと接続します
    • 画面上部のタブから、「Bluetooth LE」を選択します
    • 画面上部の「SCAN」をクリックします
    • リストに「UART Service」が表示されます
    • UART Serviceをクリックします
  4. 文字をAndroidスマートフォンからWioTerminalに送ります
    • スマホ画面下部のテキストボックスに文字を入力します
    • テキストボックス右の 送信ボタンを押します
      • hello という文字を送ると、PlatforomIO シリアルモニタに出力された
      • WioTermialからは0x0~0x255のバイナリを送るため、一部文字化けしたデータがAndroidの画面に表示されます
Waiting a client connection to notify...
MyServerCallbacks onConnect 
*********
Received Value: hello

*********
start advertising

ファームウェア書き込みの様子

PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool> .\ambd_flash_tool.exe --help
Usage: ambd_flash_tool.exe [OPTIONS] COMMAND [ARGS]...

  RTL872XD Flash tool

  This tool is used to burn rtl8720d firmware.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  erase
  flash
PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool>
PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool> .\ambd_flash_tool.exe erase
Set binary mode
version()=v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
Connected at 921600 baud
readWord(addr=0)=0x2000d6a0
readWord(addr=0xe000ed00)=0x410fc241
readWord(addr=0x4)=0x56d
readWord(addr=0x41002018)=0x60060001
write(addr=0x20004000,size=0x34)
writeWord(addr=0x20004030,value=0x80)
writeWord(addr=0x20004020,value=0x20008000)
version()=v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
readByte(addr=0x804000)=0xb9
readByte(addr=0x804001)=0x92
readByte(addr=0x804008)=0xff
readByte(addr=0x804009)=0xff
readByte(addr=0x80400a)=0xff
readByte(addr=0x80400b)=0xff
Device       : ATSAMD51x19
Version      : v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
Address      : 0x0
Pages        : 1024
Page Size    : 512 bytes
Total Size   : 512KB
Planes       : 1
Lock Regions : 32
Locked       : none
Security     : false
BOD          : false
BOR          : true
Write 63104 bytes to flash (124 pages)
[                              ] 0% (0/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x4000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x4000, size=0x1000)
[=                             ] 6% (8/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x5000, size=0x1000)
[===                           ] 12% (16/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x6000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x6000, size=0x1000)
[=====                         ] 19% (24/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x7000, size=0x1000)
[=======                       ] 25% (32/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x8000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x8000, size=0x1000)
[=========                     ] 32% (40/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x9000, size=0x1000)
[===========                   ] 38% (48/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xa000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xa000, size=0x1000)
[=============                 ] 45% (56/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xb000, size=0x1000)
[===============               ] 51% (64/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xc000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xc000, size=0x1000)
[=================             ] 58% (72/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xd000, size=0x1000)
[===================           ] 64% (80/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xe000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xe000, size=0x1000)
[=====================         ] 70% (88/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xf000, size=0x1000)
[=======================       ] 77% (96/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x10000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x10000, size=0x1000)
[=========================     ] 83% (104/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x11000, size=0x1000)
[===========================   ] 90% (112/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x12000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x12000, size=0x1000)
[============================= ] 96% (120/124 pages)write(addr=0x20004034,size=0x800)
writeBuffer(scr_addr=0x20004034, dst_addr=0x13000, size=0x800)
[==============================] 100% (124/124 pages)
Done in 1.927 seconds
Verify 63104 bytes of flash
checksumBuffer(start_addr=0x4000, size=0x200) = 3ac3
checksumBuffer(start_addr=0x4200, size=0x200) = a55d
read(addr=0x4200,size=0x200)
checksumBuffer(start_addr=0x4400, size=0x200) = 9a9c
read(addr=0x4400,size=0x200)
checksumBuffer(start_addr=0x4600, size=0x200) = bc03
read(addr=0x4600,size=0x200)
checksumBuffer(start_addr=0x4800, size=0x200) = a7fd
read(addr=0x4800,size=0x200)
[=                             ] 4% (5/124 pages)checksumBuffer(start_addr=0x4a00, size=0x200) = 2e2e
read(addr=0x4a00,size=0x200)
[=                             ] 4% (6/124 pages)checksumBuffer(start_addr=0x4c00, size=0x200) = 2bcb
read(addr=0x4c00,size=0x200)
[=                             ] 5% (7/124 pages)checksumBuffer(start_addr=0x4e00, size=0x200) = ef8e
read(addr=0x4e00,size=0x200)
[=                             ] 6% (8/124 pages)checksumBuffer(start_addr=0x5000, size=0x200) = c037
read(addr=0x5000,size=0x200)
[==                            ] 7% (9/124 pages)checksumBuffer(start_addr=0x5200, size=0x200) = dc20
read(addr=0x5200,size=0x200)
[==                            ] 8% (10/124 pages)checksumBuffer(start_addr=0x5400, size=0x200) = 7109
read(addr=0x5400,size=0x200)
[==                            ] 8% (11/124 pages)checksumBuffer(start_addr=0x5600, size=0x200) = 1a1a
read(addr=0x5600,size=0x200)
[==                            ] 9% (12/124 pages)checksumBuffer(start_addr=0x5800, size=0x200) = 5e68
read(addr=0x5800,size=0x200)
[===                           ] 10% (13/124 pages)checksumBuffer(start_addr=0x5a00, size=0x200) = 2007
read(addr=0x5a00,size=0x200)
[===                           ] 11% (14/124 pages)checksumBuffer(start_addr=0x5c00, size=0x200) = d7b7
read(addr=0x5c00,size=0x200)
[===                           ] 12% (15/124 pages)checksumBuffer(start_addr=0x5e00, size=0x200) = 26a2
read(addr=0x5e00,size=0x200)
[===                           ] 12% (16/124 pages)checksumBuffer(start_addr=0x6000, size=0x200) = 76ba
read(addr=0x6000,size=0x200)
[====                          ] 13% (17/124 pages)checksumBuffer(start_addr=0x6200, size=0x200) = 412
read(addr=0x6200,size=0x200)
[====                          ] 14% (18/124 pages)checksumBuffer(start_addr=0x6400, size=0x200) = d721
read(addr=0x6400,size=0x200)
[====                          ] 15% (19/124 pages)checksumBuffer(start_addr=0x6600, size=0x200) = 5bb5
read(addr=0x6600,size=0x200)
[====                          ] 16% (20/124 pages)checksumBuffer(start_addr=0x6800, size=0x200) = 8b1a
read(addr=0x6800,size=0x200)
[=====                         ] 16% (21/124 pages)checksumBuffer(start_addr=0x6a00, size=0x200) = 953b
read(addr=0x6a00,size=0x200)
[=====                         ] 17% (22/124 pages)checksumBuffer(start_addr=0x6c00, size=0x200) = 7b70
read(addr=0x6c00,size=0x200)
[=====                         ] 18% (23/124 pages)checksumBuffer(start_addr=0x6e00, size=0x200) = 7175
read(addr=0x6e00,size=0x200)
[=====                         ] 19% (24/124 pages)checksumBuffer(start_addr=0x7000, size=0x200) = 97e2
read(addr=0x7000,size=0x200)
[======                        ] 20% (25/124 pages)checksumBuffer(start_addr=0x7200, size=0x200) = 5510
read(addr=0x7200,size=0x200)
[======                        ] 20% (26/124 pages)checksumBuffer(start_addr=0x7400, size=0x200) = cbf8
read(addr=0x7400,size=0x200)
[======                        ] 21% (27/124 pages)checksumBuffer(start_addr=0x7600, size=0x200) = 63d
read(addr=0x7600,size=0x200)
[======                        ] 22% (28/124 pages)checksumBuffer(start_addr=0x7800, size=0x200) = 7b3c
read(addr=0x7800,size=0x200)
[=======                       ] 23% (29/124 pages)checksumBuffer(start_addr=0x7a00, size=0x200) = cd19
read(addr=0x7a00,size=0x200)
[=======                       ] 24% (30/124 pages)checksumBuffer(start_addr=0x7c00, size=0x200) = 1ecf
read(addr=0x7c00,size=0x200)
[=======                       ] 25% (31/124 pages)checksumBuffer(start_addr=0x7e00, size=0x200) = f1b3
read(addr=0x7e00,size=0x200)
[=======                       ] 25% (32/124 pages)checksumBuffer(start_addr=0x8000, size=0x200) = 8069
read(addr=0x8000,size=0x200)
[=======                       ] 26% (33/124 pages)checksumBuffer(start_addr=0x8200, size=0x200) = 657b
read(addr=0x8200,size=0x200)
[========                      ] 27% (34/124 pages)checksumBuffer(start_addr=0x8400, size=0x200) = db3e
read(addr=0x8400,size=0x200)
[========                      ] 28% (35/124 pages)checksumBuffer(start_addr=0x8600, size=0x200) = fb9d
read(addr=0x8600,size=0x200)
[========                      ] 29% (36/124 pages)checksumBuffer(start_addr=0x8800, size=0x200) = e443
read(addr=0x8800,size=0x200)
[========                      ] 29% (37/124 pages)checksumBuffer(start_addr=0x8a00, size=0x200) = 8471
read(addr=0x8a00,size=0x200)
[=========                     ] 30% (38/124 pages)checksumBuffer(start_addr=0x8c00, size=0x200) = 4c89
read(addr=0x8c00,size=0x200)
[=========                     ] 31% (39/124 pages)checksumBuffer(start_addr=0x8e00, size=0x200) = eb03
read(addr=0x8e00,size=0x200)
[=========                     ] 32% (40/124 pages)checksumBuffer(start_addr=0x9000, size=0x200) = b3dc
read(addr=0x9000,size=0x200)
[=========                     ] 33% (41/124 pages)checksumBuffer(start_addr=0x9200, size=0x200) = a9c9
read(addr=0x9200,size=0x200)
[==========                    ] 33% (42/124 pages)checksumBuffer(start_addr=0x9400, size=0x200) = ad31
read(addr=0x9400,size=0x200)
[==========                    ] 34% (43/124 pages)checksumBuffer(start_addr=0x9600, size=0x200) = 1262
read(addr=0x9600,size=0x200)
[==========                    ] 35% (44/124 pages)checksumBuffer(start_addr=0x9800, size=0x200) = 5383
read(addr=0x9800,size=0x200)
[==========                    ] 36% (45/124 pages)checksumBuffer(start_addr=0x9a00, size=0x200) = 41d9
read(addr=0x9a00,size=0x200)
[===========                   ] 37% (46/124 pages)checksumBuffer(start_addr=0x9c00, size=0x200) = 8748
read(addr=0x9c00,size=0x200)
[===========                   ] 37% (47/124 pages)checksumBuffer(start_addr=0x9e00, size=0x200) = a9f9
read(addr=0x9e00,size=0x200)
[===========                   ] 38% (48/124 pages)checksumBuffer(start_addr=0xa000, size=0x200) = 4766
read(addr=0xa000,size=0x200)
[===========                   ] 39% (49/124 pages)checksumBuffer(start_addr=0xa200, size=0x200) = da8f
read(addr=0xa200,size=0x200)
[============                  ] 40% (50/124 pages)checksumBuffer(start_addr=0xa400, size=0x200) = 53be
read(addr=0xa400,size=0x200)
[============                  ] 41% (51/124 pages)checksumBuffer(start_addr=0xa600, size=0x200) = 54f3
read(addr=0xa600,size=0x200)
[============                  ] 41% (52/124 pages)checksumBuffer(start_addr=0xa800, size=0x200) = 4498
read(addr=0xa800,size=0x200)
[============                  ] 42% (53/124 pages)checksumBuffer(start_addr=0xaa00, size=0x200) = 8edb
read(addr=0xaa00,size=0x200)
[=============                 ] 43% (54/124 pages)checksumBuffer(start_addr=0xac00, size=0x200) = 8304
read(addr=0xac00,size=0x200)
[=============                 ] 44% (55/124 pages)checksumBuffer(start_addr=0xae00, size=0x200) = 8f09
read(addr=0xae00,size=0x200)
[=============                 ] 45% (56/124 pages)checksumBuffer(start_addr=0xb000, size=0x200) = d30
read(addr=0xb000,size=0x200)
[=============                 ] 45% (57/124 pages)checksumBuffer(start_addr=0xb200, size=0x200) = e59c
read(addr=0xb200,size=0x200)
[==============                ] 46% (58/124 pages)checksumBuffer(start_addr=0xb400, size=0x200) = cd24
read(addr=0xb400,size=0x200)
[==============                ] 47% (59/124 pages)checksumBuffer(start_addr=0xb600, size=0x200) = c0b7
read(addr=0xb600,size=0x200)
[==============                ] 48% (60/124 pages)checksumBuffer(start_addr=0xb800, size=0x200) = f9c
read(addr=0xb800,size=0x200)
[==============                ] 49% (61/124 pages)checksumBuffer(start_addr=0xba00, size=0x200) = 4906
read(addr=0xba00,size=0x200)
[===============               ] 50% (62/124 pages)checksumBuffer(start_addr=0xbc00, size=0x200) = 5640
read(addr=0xbc00,size=0x200)
[===============               ] 50% (63/124 pages)checksumBuffer(start_addr=0xbe00, size=0x200) = b98b
read(addr=0xbe00,size=0x200)
[===============               ] 51% (64/124 pages)checksumBuffer(start_addr=0xc000, size=0x200) = 56c5
read(addr=0xc000,size=0x200)
[===============               ] 52% (65/124 pages)checksumBuffer(start_addr=0xc200, size=0x200) = 9807
read(addr=0xc200,size=0x200)
[===============               ] 53% (66/124 pages)checksumBuffer(start_addr=0xc400, size=0x200) = c0a9
read(addr=0xc400,size=0x200)
[================              ] 54% (67/124 pages)checksumBuffer(start_addr=0xc600, size=0x200) = 4d81
read(addr=0xc600,size=0x200)
[================              ] 54% (68/124 pages)checksumBuffer(start_addr=0xc800, size=0x200) = 2334
read(addr=0xc800,size=0x200)
[================              ] 55% (69/124 pages)checksumBuffer(start_addr=0xca00, size=0x200) = b299
read(addr=0xca00,size=0x200)
[================              ] 56% (70/124 pages)checksumBuffer(start_addr=0xcc00, size=0x200) = 60fc
read(addr=0xcc00,size=0x200)
[=================             ] 57% (71/124 pages)checksumBuffer(start_addr=0xce00, size=0x200) = a6a7
read(addr=0xce00,size=0x200)
[=================             ] 58% (72/124 pages)checksumBuffer(start_addr=0xd000, size=0x200) = 8d84
read(addr=0xd000,size=0x200)
[=================             ] 58% (73/124 pages)checksumBuffer(start_addr=0xd200, size=0x200) = a679
read(addr=0xd200,size=0x200)
[=================             ] 59% (74/124 pages)checksumBuffer(start_addr=0xd400, size=0x200) = 8dbb
read(addr=0xd400,size=0x200)
[==================            ] 60% (75/124 pages)checksumBuffer(start_addr=0xd600, size=0x200) = 4167
read(addr=0xd600,size=0x200)
[==================            ] 61% (76/124 pages)checksumBuffer(start_addr=0xd800, size=0x200) = b106
read(addr=0xd800,size=0x200)
[==================            ] 62% (77/124 pages)checksumBuffer(start_addr=0xda00, size=0x200) = 9530
read(addr=0xda00,size=0x200)
[==================            ] 62% (78/124 pages)checksumBuffer(start_addr=0xdc00, size=0x200) = d807
read(addr=0xdc00,size=0x200)
[===================           ] 63% (79/124 pages)checksumBuffer(start_addr=0xde00, size=0x200) = 7217
read(addr=0xde00,size=0x200)
[===================           ] 64% (80/124 pages)checksumBuffer(start_addr=0xe000, size=0x200) = 7e98
read(addr=0xe000,size=0x200)
[===================           ] 65% (81/124 pages)checksumBuffer(start_addr=0xe200, size=0x200) = a8eb
read(addr=0xe200,size=0x200)
[===================           ] 66% (82/124 pages)checksumBuffer(start_addr=0xe400, size=0x200) = b388
read(addr=0xe400,size=0x200)
[====================          ] 66% (83/124 pages)checksumBuffer(start_addr=0xe600, size=0x200) = 344f
read(addr=0xe600,size=0x200)
[====================          ] 67% (84/124 pages)checksumBuffer(start_addr=0xe800, size=0x200) = 1e20
read(addr=0xe800,size=0x200)
[====================          ] 68% (85/124 pages)checksumBuffer(start_addr=0xea00, size=0x200) = bae3
read(addr=0xea00,size=0x200)
[====================          ] 69% (86/124 pages)checksumBuffer(start_addr=0xec00, size=0x200) = 5a94
read(addr=0xec00,size=0x200)
[=====================         ] 70% (87/124 pages)checksumBuffer(start_addr=0xee00, size=0x200) = 163f
read(addr=0xee00,size=0x200)
[=====================         ] 70% (88/124 pages)checksumBuffer(start_addr=0xf000, size=0x200) = 53bb
read(addr=0xf000,size=0x200)
[=====================         ] 71% (89/124 pages)checksumBuffer(start_addr=0xf200, size=0x200) = 15d9
read(addr=0xf200,size=0x200)
[=====================         ] 72% (90/124 pages)checksumBuffer(start_addr=0xf400, size=0x200) = c327
read(addr=0xf400,size=0x200)
[======================        ] 73% (91/124 pages)checksumBuffer(start_addr=0xf600, size=0x200) = d5ee
read(addr=0xf600,size=0x200)
[======================        ] 74% (92/124 pages)checksumBuffer(start_addr=0xf800, size=0x200) = 49d8
read(addr=0xf800,size=0x200)
[======================        ] 75% (93/124 pages)checksumBuffer(start_addr=0xfa00, size=0x200) = 32e8
read(addr=0xfa00,size=0x200)
[======================        ] 75% (94/124 pages)checksumBuffer(start_addr=0xfc00, size=0x200) = a1bf
read(addr=0xfc00,size=0x200)
[======================        ] 76% (95/124 pages)checksumBuffer(start_addr=0xfe00, size=0x200) = 1311
read(addr=0xfe00,size=0x200)
[=======================       ] 77% (96/124 pages)checksumBuffer(start_addr=0x10000, size=0x200) = b735
read(addr=0x10000,size=0x200)
[=======================       ] 78% (97/124 pages)checksumBuffer(start_addr=0x10200, size=0x200) = d949
read(addr=0x10200,size=0x200)
[=======================       ] 79% (98/124 pages)checksumBuffer(start_addr=0x10400, size=0x200) = 2951
read(addr=0x10400,size=0x200)
[=======================       ] 79% (99/124 pages)checksumBuffer(start_addr=0x10600, size=0x200) = f26e
read(addr=0x10600,size=0x200)
[========================      ] 80% (100/124 pages)checksumBuffer(start_addr=0x10800, size=0x200) = 25d9
read(addr=0x10800,size=0x200)
[========================      ] 81% (101/124 pages)checksumBuffer(start_addr=0x10a00, size=0x200) = 765d
read(addr=0x10a00,size=0x200)
[========================      ] 82% (102/124 pages)checksumBuffer(start_addr=0x10c00, size=0x200) = 17c8
read(addr=0x10c00,size=0x200)
[========================      ] 83% (103/124 pages)checksumBuffer(start_addr=0x10e00, size=0x200) = 6413
read(addr=0x10e00,size=0x200)
[=========================     ] 83% (104/124 pages)checksumBuffer(start_addr=0x11000, size=0x200) = c99a
read(addr=0x11000,size=0x200)
[=========================     ] 84% (105/124 pages)checksumBuffer(start_addr=0x11200, size=0x200) = 7869
read(addr=0x11200,size=0x200)
[=========================     ] 85% (106/124 pages)checksumBuffer(start_addr=0x11400, size=0x200) = a522
read(addr=0x11400,size=0x200)
[=========================     ] 86% (107/124 pages)checksumBuffer(start_addr=0x11600, size=0x200) = 73b8
read(addr=0x11600,size=0x200)
[==========================    ] 87% (108/124 pages)checksumBuffer(start_addr=0x11800, size=0x200) = 995d
read(addr=0x11800,size=0x200)
[==========================    ] 87% (109/124 pages)checksumBuffer(start_addr=0x11a00, size=0x200) = e9c7
read(addr=0x11a00,size=0x200)
[==========================    ] 88% (110/124 pages)checksumBuffer(start_addr=0x11c00, size=0x200) = 1e6
read(addr=0x11c00,size=0x200)
[==========================    ] 89% (111/124 pages)checksumBuffer(start_addr=0x11e00, size=0x200) = d331
read(addr=0x11e00,size=0x200)
[===========================   ] 90% (112/124 pages)checksumBuffer(start_addr=0x12000, size=0x200) = 843
read(addr=0x12000,size=0x200)
[===========================   ] 91% (113/124 pages)checksumBuffer(start_addr=0x12200, size=0x200) = 90c3
read(addr=0x12200,size=0x200)
[===========================   ] 91% (114/124 pages)checksumBuffer(start_addr=0x12400, size=0x200) = 541d
read(addr=0x12400,size=0x200)
[===========================   ] 92% (115/124 pages)checksumBuffer(start_addr=0x12600, size=0x200) = 746f
read(addr=0x12600,size=0x200)
[============================  ] 93% (116/124 pages)checksumBuffer(start_addr=0x12800, size=0x200) = cd04
read(addr=0x12800,size=0x200)
[============================  ] 94% (117/124 pages)checksumBuffer(start_addr=0x12a00, size=0x200) = 3a5d
read(addr=0x12a00,size=0x200)
[============================  ] 95% (118/124 pages)checksumBuffer(start_addr=0x12c00, size=0x200) = ba55
read(addr=0x12c00,size=0x200)
[============================  ] 95% (119/124 pages)checksumBuffer(start_addr=0x12e00, size=0x200) = 9a54
read(addr=0x12e00,size=0x200)
[============================= ] 96% (120/124 pages)checksumBuffer(start_addr=0x13000, size=0x200) = 22b5
read(addr=0x13000,size=0x200)
[============================= ] 97% (121/124 pages)checksumBuffer(start_addr=0x13200, size=0x200) = 671
read(addr=0x13200,size=0x200)
[============================= ] 98% (122/124 pages)checksumBuffer(start_addr=0x13400, size=0x200) = 2468
read(addr=0x13400,size=0x200)
[============================= ] 99% (123/124 pages)checksumBuffer(start_addr=0x13600, size=0x80) = a95f
read(addr=0x13600,size=0x200)
[==============================] 100% (124/124 pages)
Verify successful
Done in 1.778 seconds
writeWord(addr=0xe000ed0c,value=0x5fa0004)
wait...
wait...
wait...
Flashing...
All images are sent successfully!
Image tool closed!

Success!
PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool>
PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool> .\ambd_flash_tool.exe --help
Usage: ambd_flash_tool.exe [OPTIONS] COMMAND [ARGS]...

  RTL872XD Flash tool

  This tool is used to burn rtl8720d firmware.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  erase
  flash
PS C:\Users\User\Downloads\20210519-seeed-ambd-firmware-rpc-v2.1.3_JP\ambd_flash_tool> .\ambd_flash_tool.exe flash
COM3
MODE COM3:BAUD=%d PARITY=N DATA=8

デバイス状態 COM3:
------------
    ボー レート:        1200
    パリティ:           None
    データ ビット:      8
    ストップ ビット:    1
    タイムアウト:       ON
    XON/XOFF:           OFF
    CTS ハンドシェイク: OFF
    DSR ハンドシェイク: OFF
    DSR の検知:         OFF
    DTR サーキット:     OFF
    RTS サーキット:     OFF

Set binary mode
version()=v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
Connected at 921600 baud
readWord(addr=0)=0x2000d6a0
readWord(addr=0xe000ed00)=0x410fc241
readWord(addr=0x4)=0x56d
readWord(addr=0x41002018)=0x60060001
write(addr=0x20004000,size=0x34)
writeWord(addr=0x20004030,value=0x80)
writeWord(addr=0x20004020,value=0x20008000)
version()=v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
readByte(addr=0x804000)=0xb9
readByte(addr=0x804001)=0x92
readByte(addr=0x804008)=0xff
readByte(addr=0x804009)=0xff
readByte(addr=0x80400a)=0xff
readByte(addr=0x80400b)=0xff
Device       : ATSAMD51x19
Version      : v1.1 [Arduino:XYZ] Mar 12 2020 17:43:33
Address      : 0x0
Pages        : 1024
Page Size    : 512 bytes
Total Size   : 512KB
Planes       : 1
Lock Regions : 32
Locked       : none
Security     : false
BOD          : false
BOR          : true
Write 63104 bytes to flash (124 pages)
[                              ] 0% (0/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x4000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x4000, size=0x1000)
[=                             ] 6% (8/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x5000, size=0x1000)
[===                           ] 12% (16/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x6000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x6000, size=0x1000)
[=====                         ] 19% (24/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x7000, size=0x1000)
[=======                       ] 25% (32/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x8000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x8000, size=0x1000)
[=========                     ] 32% (40/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x9000, size=0x1000)
[===========                   ] 38% (48/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xa000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xa000, size=0x1000)
[=============                 ] 45% (56/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xb000, size=0x1000)
[===============               ] 51% (64/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xc000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xc000, size=0x1000)
[=================             ] 58% (72/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xd000, size=0x1000)
[===================           ] 64% (80/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0xe000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0xe000, size=0x1000)
[=====================         ] 70% (88/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0xf000, size=0x1000)
[=======================       ] 77% (96/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x10000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x10000, size=0x1000)
[=========================     ] 83% (104/124 pages)write(addr=0x20004034,size=0x1000)
writeBuffer(scr_addr=0x20004034, dst_addr=0x11000, size=0x1000)
[===========================   ] 90% (112/124 pages)write(addr=0x20004034,size=0x1000)
writeWord(addr=0x41004014,value=0x12000)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
writeWord(addr=0x41004004,value=0xa501)
readByte(addr=0x41004012)=0x11
readByte(addr=0x41004013)=0xd
readByte(addr=0x41004010)=0x11
readByte(addr=0x41004011)=0
writeBuffer(scr_addr=0x20004034, dst_addr=0x12000, size=0x1000)
[============================= ] 96% (120/124 pages)write(addr=0x20004034,size=0x800)
writeBuffer(scr_addr=0x20004034, dst_addr=0x13000, size=0x800)
[==============================] 100% (124/124 pages)
Done in 1.676 seconds
Verify 63104 bytes of flash
checksumBuffer(start_addr=0x4000, size=0x200) = 3ac3
checksumBuffer(start_addr=0x4200, size=0x200) = a55d
read(addr=0x4200,size=0x200)
checksumBuffer(start_addr=0x4400, size=0x200) = 9a9c
read(addr=0x4400,size=0x200)
checksumBuffer(start_addr=0x4600, size=0x200) = bc03
read(addr=0x4600,size=0x200)
checksumBuffer(start_addr=0x4800, size=0x200) = a7fd
read(addr=0x4800,size=0x200)
[=                             ] 4% (5/124 pages)checksumBuffer(start_addr=0x4a00, size=0x200) = 2e2e
read(addr=0x4a00,size=0x200)
[=                             ] 4% (6/124 pages)checksumBuffer(start_addr=0x4c00, size=0x200) = 2bcb
read(addr=0x4c00,size=0x200)
[=                             ] 5% (7/124 pages)checksumBuffer(start_addr=0x4e00, size=0x200) = ef8e
read(addr=0x4e00,size=0x200)
[=                             ] 6% (8/124 pages)checksumBuffer(start_addr=0x5000, size=0x200) = c037
read(addr=0x5000,size=0x200)
[==                            ] 7% (9/124 pages)checksumBuffer(start_addr=0x5200, size=0x200) = dc20
read(addr=0x5200,size=0x200)
[==                            ] 8% (10/124 pages)checksumBuffer(start_addr=0x5400, size=0x200) = 7109
read(addr=0x5400,size=0x200)
[==                            ] 8% (11/124 pages)checksumBuffer(start_addr=0x5600, size=0x200) = 1a1a
read(addr=0x5600,size=0x200)
[==                            ] 9% (12/124 pages)checksumBuffer(start_addr=0x5800, size=0x200) = 5e68
read(addr=0x5800,size=0x200)
[===                           ] 10% (13/124 pages)checksumBuffer(start_addr=0x5a00, size=0x200) = 2007
read(addr=0x5a00,size=0x200)
[===                           ] 11% (14/124 pages)checksumBuffer(start_addr=0x5c00, size=0x200) = d7b7
read(addr=0x5c00,size=0x200)
[===                           ] 12% (15/124 pages)checksumBuffer(start_addr=0x5e00, size=0x200) = 26a2
read(addr=0x5e00,size=0x200)
[===                           ] 12% (16/124 pages)checksumBuffer(start_addr=0x6000, size=0x200) = 76ba
read(addr=0x6000,size=0x200)
[====                          ] 13% (17/124 pages)checksumBuffer(start_addr=0x6200, size=0x200) = 412
read(addr=0x6200,size=0x200)
[====                          ] 14% (18/124 pages)checksumBuffer(start_addr=0x6400, size=0x200) = d721
read(addr=0x6400,size=0x200)
[====                          ] 15% (19/124 pages)checksumBuffer(start_addr=0x6600, size=0x200) = 5bb5
read(addr=0x6600,size=0x200)
[====                          ] 16% (20/124 pages)checksumBuffer(start_addr=0x6800, size=0x200) = 8b1a
read(addr=0x6800,size=0x200)
[=====                         ] 16% (21/124 pages)checksumBuffer(start_addr=0x6a00, size=0x200) = 953b
read(addr=0x6a00,size=0x200)
[=====                         ] 17% (22/124 pages)checksumBuffer(start_addr=0x6c00, size=0x200) = 7b70
read(addr=0x6c00,size=0x200)
[=====                         ] 18% (23/124 pages)checksumBuffer(start_addr=0x6e00, size=0x200) = 7175
read(addr=0x6e00,size=0x200)
[=====                         ] 19% (24/124 pages)checksumBuffer(start_addr=0x7000, size=0x200) = 97e2
read(addr=0x7000,size=0x200)
[======                        ] 20% (25/124 pages)checksumBuffer(start_addr=0x7200, size=0x200) = 5510
read(addr=0x7200,size=0x200)
[======                        ] 20% (26/124 pages)checksumBuffer(start_addr=0x7400, size=0x200) = cbf8
read(addr=0x7400,size=0x200)
[======                        ] 21% (27/124 pages)checksumBuffer(start_addr=0x7600, size=0x200) = 63d
read(addr=0x7600,size=0x200)
[======                        ] 22% (28/124 pages)checksumBuffer(start_addr=0x7800, size=0x200) = 7b3c
read(addr=0x7800,size=0x200)
[=======                       ] 23% (29/124 pages)checksumBuffer(start_addr=0x7a00, size=0x200) = cd19
read(addr=0x7a00,size=0x200)
[=======                       ] 24% (30/124 pages)checksumBuffer(start_addr=0x7c00, size=0x200) = 1ecf
read(addr=0x7c00,size=0x200)
[=======                       ] 25% (31/124 pages)checksumBuffer(start_addr=0x7e00, size=0x200) = f1b3
read(addr=0x7e00,size=0x200)
[=======                       ] 25% (32/124 pages)checksumBuffer(start_addr=0x8000, size=0x200) = 8069
read(addr=0x8000,size=0x200)
[=======                       ] 26% (33/124 pages)checksumBuffer(start_addr=0x8200, size=0x200) = 657b
read(addr=0x8200,size=0x200)
[========                      ] 27% (34/124 pages)checksumBuffer(start_addr=0x8400, size=0x200) = db3e
read(addr=0x8400,size=0x200)
[========                      ] 28% (35/124 pages)checksumBuffer(start_addr=0x8600, size=0x200) = fb9d
read(addr=0x8600,size=0x200)
[========                      ] 29% (36/124 pages)checksumBuffer(start_addr=0x8800, size=0x200) = e443
read(addr=0x8800,size=0x200)
[========                      ] 29% (37/124 pages)checksumBuffer(start_addr=0x8a00, size=0x200) = 8471
read(addr=0x8a00,size=0x200)
[=========                     ] 30% (38/124 pages)checksumBuffer(start_addr=0x8c00, size=0x200) = 4c89
read(addr=0x8c00,size=0x200)
[=========                     ] 31% (39/124 pages)checksumBuffer(start_addr=0x8e00, size=0x200) = eb03
read(addr=0x8e00,size=0x200)
[=========                     ] 32% (40/124 pages)checksumBuffer(start_addr=0x9000, size=0x200) = b3dc
read(addr=0x9000,size=0x200)
[=========                     ] 33% (41/124 pages)checksumBuffer(start_addr=0x9200, size=0x200) = a9c9
read(addr=0x9200,size=0x200)
[==========                    ] 33% (42/124 pages)checksumBuffer(start_addr=0x9400, size=0x200) = ad31
read(addr=0x9400,size=0x200)
[==========                    ] 34% (43/124 pages)checksumBuffer(start_addr=0x9600, size=0x200) = 1262
read(addr=0x9600,size=0x200)
[==========                    ] 35% (44/124 pages)checksumBuffer(start_addr=0x9800, size=0x200) = 5383
read(addr=0x9800,size=0x200)
[==========                    ] 36% (45/124 pages)checksumBuffer(start_addr=0x9a00, size=0x200) = 41d9
read(addr=0x9a00,size=0x200)
[===========                   ] 37% (46/124 pages)checksumBuffer(start_addr=0x9c00, size=0x200) = 8748
read(addr=0x9c00,size=0x200)
[===========                   ] 37% (47/124 pages)checksumBuffer(start_addr=0x9e00, size=0x200) = a9f9
read(addr=0x9e00,size=0x200)
[===========                   ] 38% (48/124 pages)checksumBuffer(start_addr=0xa000, size=0x200) = 4766
read(addr=0xa000,size=0x200)
[===========                   ] 39% (49/124 pages)checksumBuffer(start_addr=0xa200, size=0x200) = da8f
read(addr=0xa200,size=0x200)
[============                  ] 40% (50/124 pages)checksumBuffer(start_addr=0xa400, size=0x200) = 53be
read(addr=0xa400,size=0x200)
[============                  ] 41% (51/124 pages)checksumBuffer(start_addr=0xa600, size=0x200) = 54f3
read(addr=0xa600,size=0x200)
[============                  ] 41% (52/124 pages)checksumBuffer(start_addr=0xa800, size=0x200) = 4498
read(addr=0xa800,size=0x200)
[============                  ] 42% (53/124 pages)checksumBuffer(start_addr=0xaa00, size=0x200) = 8edb
read(addr=0xaa00,size=0x200)
[=============                 ] 43% (54/124 pages)checksumBuffer(start_addr=0xac00, size=0x200) = 8304
read(addr=0xac00,size=0x200)
[=============                 ] 44% (55/124 pages)checksumBuffer(start_addr=0xae00, size=0x200) = 8f09
read(addr=0xae00,size=0x200)
[=============                 ] 45% (56/124 pages)checksumBuffer(start_addr=0xb000, size=0x200) = d30
read(addr=0xb000,size=0x200)
[=============                 ] 45% (57/124 pages)checksumBuffer(start_addr=0xb200, size=0x200) = e59c
read(addr=0xb200,size=0x200)
[==============                ] 46% (58/124 pages)checksumBuffer(start_addr=0xb400, size=0x200) = cd24
read(addr=0xb400,size=0x200)
[==============                ] 47% (59/124 pages)checksumBuffer(start_addr=0xb600, size=0x200) = c0b7
read(addr=0xb600,size=0x200)
[==============                ] 48% (60/124 pages)checksumBuffer(start_addr=0xb800, size=0x200) = f9c
read(addr=0xb800,size=0x200)
[==============                ] 49% (61/124 pages)checksumBuffer(start_addr=0xba00, size=0x200) = 4906
read(addr=0xba00,size=0x200)
[===============               ] 50% (62/124 pages)checksumBuffer(start_addr=0xbc00, size=0x200) = 5640
read(addr=0xbc00,size=0x200)
[===============               ] 50% (63/124 pages)checksumBuffer(start_addr=0xbe00, size=0x200) = b98b
read(addr=0xbe00,size=0x200)
[===============               ] 51% (64/124 pages)checksumBuffer(start_addr=0xc000, size=0x200) = 56c5
read(addr=0xc000,size=0x200)
[===============               ] 52% (65/124 pages)checksumBuffer(start_addr=0xc200, size=0x200) = 9807
read(addr=0xc200,size=0x200)
[===============               ] 53% (66/124 pages)checksumBuffer(start_addr=0xc400, size=0x200) = c0a9
read(addr=0xc400,size=0x200)
[================              ] 54% (67/124 pages)checksumBuffer(start_addr=0xc600, size=0x200) = 4d81
read(addr=0xc600,size=0x200)
[================              ] 54% (68/124 pages)checksumBuffer(start_addr=0xc800, size=0x200) = 2334
read(addr=0xc800,size=0x200)
[================              ] 55% (69/124 pages)checksumBuffer(start_addr=0xca00, size=0x200) = b299
read(addr=0xca00,size=0x200)
[================              ] 56% (70/124 pages)checksumBuffer(start_addr=0xcc00, size=0x200) = 60fc
read(addr=0xcc00,size=0x200)
[=================             ] 57% (71/124 pages)checksumBuffer(start_addr=0xce00, size=0x200) = a6a7
read(addr=0xce00,size=0x200)
[=================             ] 58% (72/124 pages)checksumBuffer(start_addr=0xd000, size=0x200) = 8d84
read(addr=0xd000,size=0x200)
[=================             ] 58% (73/124 pages)checksumBuffer(start_addr=0xd200, size=0x200) = a679
read(addr=0xd200,size=0x200)
[=================             ] 59% (74/124 pages)checksumBuffer(start_addr=0xd400, size=0x200) = 8dbb
read(addr=0xd400,size=0x200)
[==================            ] 60% (75/124 pages)checksumBuffer(start_addr=0xd600, size=0x200) = 4167
read(addr=0xd600,size=0x200)
[==================            ] 61% (76/124 pages)checksumBuffer(start_addr=0xd800, size=0x200) = b106
read(addr=0xd800,size=0x200)
[==================            ] 62% (77/124 pages)checksumBuffer(start_addr=0xda00, size=0x200) = 9530
read(addr=0xda00,size=0x200)
[==================            ] 62% (78/124 pages)checksumBuffer(start_addr=0xdc00, size=0x200) = d807
read(addr=0xdc00,size=0x200)
[===================           ] 63% (79/124 pages)checksumBuffer(start_addr=0xde00, size=0x200) = 7217
read(addr=0xde00,size=0x200)
[===================           ] 64% (80/124 pages)checksumBuffer(start_addr=0xe000, size=0x200) = 7e98
read(addr=0xe000,size=0x200)
[===================           ] 65% (81/124 pages)checksumBuffer(start_addr=0xe200, size=0x200) = a8eb
read(addr=0xe200,size=0x200)
[===================           ] 66% (82/124 pages)checksumBuffer(start_addr=0xe400, size=0x200) = b388
read(addr=0xe400,size=0x200)
[====================          ] 66% (83/124 pages)checksumBuffer(start_addr=0xe600, size=0x200) = 344f
read(addr=0xe600,size=0x200)
[====================          ] 67% (84/124 pages)checksumBuffer(start_addr=0xe800, size=0x200) = 1e20
read(addr=0xe800,size=0x200)
[====================          ] 68% (85/124 pages)checksumBuffer(start_addr=0xea00, size=0x200) = bae3
read(addr=0xea00,size=0x200)
[====================          ] 69% (86/124 pages)checksumBuffer(start_addr=0xec00, size=0x200) = 5a94
read(addr=0xec00,size=0x200)
[=====================         ] 70% (87/124 pages)checksumBuffer(start_addr=0xee00, size=0x200) = 163f
read(addr=0xee00,size=0x200)
[=====================         ] 70% (88/124 pages)checksumBuffer(start_addr=0xf000, size=0x200) = 53bb
read(addr=0xf000,size=0x200)
[=====================         ] 71% (89/124 pages)checksumBuffer(start_addr=0xf200, size=0x200) = 15d9
read(addr=0xf200,size=0x200)
[=====================         ] 72% (90/124 pages)checksumBuffer(start_addr=0xf400, size=0x200) = c327
read(addr=0xf400,size=0x200)
[======================        ] 73% (91/124 pages)checksumBuffer(start_addr=0xf600, size=0x200) = d5ee
read(addr=0xf600,size=0x200)
[======================        ] 74% (92/124 pages)checksumBuffer(start_addr=0xf800, size=0x200) = 49d8
read(addr=0xf800,size=0x200)
[======================        ] 75% (93/124 pages)checksumBuffer(start_addr=0xfa00, size=0x200) = 32e8
read(addr=0xfa00,size=0x200)
[======================        ] 75% (94/124 pages)checksumBuffer(start_addr=0xfc00, size=0x200) = a1bf
read(addr=0xfc00,size=0x200)
[======================        ] 76% (95/124 pages)checksumBuffer(start_addr=0xfe00, size=0x200) = 1311
read(addr=0xfe00,size=0x200)
[=======================       ] 77% (96/124 pages)checksumBuffer(start_addr=0x10000, size=0x200) = b735
read(addr=0x10000,size=0x200)
[=======================       ] 78% (97/124 pages)checksumBuffer(start_addr=0x10200, size=0x200) = d949
read(addr=0x10200,size=0x200)
[=======================       ] 79% (98/124 pages)checksumBuffer(start_addr=0x10400, size=0x200) = 2951
read(addr=0x10400,size=0x200)
[=======================       ] 79% (99/124 pages)checksumBuffer(start_addr=0x10600, size=0x200) = f26e
read(addr=0x10600,size=0x200)
[========================      ] 80% (100/124 pages)checksumBuffer(start_addr=0x10800, size=0x200) = 25d9
read(addr=0x10800,size=0x200)
[========================      ] 81% (101/124 pages)checksumBuffer(start_addr=0x10a00, size=0x200) = 765d
read(addr=0x10a00,size=0x200)
[========================      ] 82% (102/124 pages)checksumBuffer(start_addr=0x10c00, size=0x200) = 17c8
read(addr=0x10c00,size=0x200)
[========================      ] 83% (103/124 pages)checksumBuffer(start_addr=0x10e00, size=0x200) = 6413
read(addr=0x10e00,size=0x200)
[=========================     ] 83% (104/124 pages)checksumBuffer(start_addr=0x11000, size=0x200) = c99a
read(addr=0x11000,size=0x200)
[=========================     ] 84% (105/124 pages)checksumBuffer(start_addr=0x11200, size=0x200) = 7869
read(addr=0x11200,size=0x200)
[=========================     ] 85% (106/124 pages)checksumBuffer(start_addr=0x11400, size=0x200) = a522
read(addr=0x11400,size=0x200)
[=========================     ] 86% (107/124 pages)checksumBuffer(start_addr=0x11600, size=0x200) = 73b8
read(addr=0x11600,size=0x200)
[==========================    ] 87% (108/124 pages)checksumBuffer(start_addr=0x11800, size=0x200) = 995d
read(addr=0x11800,size=0x200)
[==========================    ] 87% (109/124 pages)checksumBuffer(start_addr=0x11a00, size=0x200) = e9c7
read(addr=0x11a00,size=0x200)
[==========================    ] 88% (110/124 pages)checksumBuffer(start_addr=0x11c00, size=0x200) = 1e6
read(addr=0x11c00,size=0x200)
[==========================    ] 89% (111/124 pages)checksumBuffer(start_addr=0x11e00, size=0x200) = d331
read(addr=0x11e00,size=0x200)
[===========================   ] 90% (112/124 pages)checksumBuffer(start_addr=0x12000, size=0x200) = 843
read(addr=0x12000,size=0x200)
[===========================   ] 91% (113/124 pages)checksumBuffer(start_addr=0x12200, size=0x200) = 90c3
read(addr=0x12200,size=0x200)
[===========================   ] 91% (114/124 pages)checksumBuffer(start_addr=0x12400, size=0x200) = 541d
read(addr=0x12400,size=0x200)
[===========================   ] 92% (115/124 pages)checksumBuffer(start_addr=0x12600, size=0x200) = 746f
read(addr=0x12600,size=0x200)
[============================  ] 93% (116/124 pages)checksumBuffer(start_addr=0x12800, size=0x200) = cd04
read(addr=0x12800,size=0x200)
[============================  ] 94% (117/124 pages)checksumBuffer(start_addr=0x12a00, size=0x200) = 3a5d
read(addr=0x12a00,size=0x200)
[============================  ] 95% (118/124 pages)checksumBuffer(start_addr=0x12c00, size=0x200) = ba55
read(addr=0x12c00,size=0x200)
[============================  ] 95% (119/124 pages)checksumBuffer(start_addr=0x12e00, size=0x200) = 9a54
read(addr=0x12e00,size=0x200)
[============================= ] 96% (120/124 pages)checksumBuffer(start_addr=0x13000, size=0x200) = 22b5
read(addr=0x13000,size=0x200)
[============================= ] 97% (121/124 pages)checksumBuffer(start_addr=0x13200, size=0x200) = 671
read(addr=0x13200,size=0x200)
[============================= ] 98% (122/124 pages)checksumBuffer(start_addr=0x13400, size=0x200) = 2468
read(addr=0x13400,size=0x200)
[============================= ] 99% (123/124 pages)checksumBuffer(start_addr=0x13600, size=0x80) = a95f
read(addr=0x13600,size=0x200)
[==============================] 100% (124/124 pages)
Verify successful
Done in 1.304 seconds
writeWord(addr=0xe000ed0c,value=0x5fa0004)
wait...
wait...
wait...
copy img to workspace...
Flashing...
All images are sent successfully!
Image tool closed!

Success!