見出し画像

EVK-NINA-W10(技適付きESP32モジュールEVK)を使ってデバッガーの起動まで [Platform IO編]

ESP32にデバッガを繋げるのに苦労をしている方がいますが、そもそもデバッガ付きのボードがあるので紹介します。ここでは、Lチカのコードをデバッガー動作させるところまでを紹介します。

EVK-NINA-W10

EVK-NINA-W10のデバッガ付きボードとしての特徴は下記のようになります。

・チップセット:ESP32 (512K RAM / 2or4 MB ROM )

・認証:日本の技適付き(204-810001/203-JN1166)  

・プログラム環境:Arduino / espidf

・デバッガ機能:FT4232のJTAG機能

・デバグ環境:Platform IO などなど

【Platform IO を使った開発環境構築】

Platform IOが espidf ver4.3 標準対応になったので、Platform IOで開発環境を構築してみます。ほぼ全自動でインストールしてくれるので、昔に比べとっても楽ですね。

1. VScode インストール

Microsoft よりVScode を入手してインストールします。私は、Sysytem Installer を用いました。

画像2

2. "日本語環境"と"PlatformIO" の インストール。

”日本語環境”は①を選択し②テキストボックスに japanexe と入力して、選択+インストール。"PlatformIO IDE"は①を選択し②テキストボックスに、platformio と入力し、選択+インストール。

画像3

3. Platform(Espressif 32)のインストール

①を選択し、PlatformIOを表示させます。②を選択しPlatform選択を表示させます。③のテキストボックスに Espressif と入力し、⑤検索します。④で"Espressif 32"を選択し、インストールします。

画像4

4. "espidf blink"のサンプルをbuild

①[Home] → ②[Project Example] と選択し、遷移後の画面から、"espidf blink"を選択し、import します。かなり時間がかかります。

③[✓]マークでBuildできます。まだ、EVK-NINA-W10用ではありません。Buildできるかどうかの確認です。かなり時間がかかります。41.2秒(@Ryzen 7 5800H)

画像4
画像5

5. ボードの準備

NINA-W10のJTAG端子に、FTDIのJTAG機能端子が接続されるように4つのジャンパーを図のように接続します。

画像7

次にEVK-NINA-W10をPCに接続します。

6. ドライバーの準備

6.1 標準FTDIドライバーのインストール

EVK-NINA-W10をPCに接続すると、自動で標準ドライバーが読み込まれるはずです。標準ドライバーが読み込まれなかったら、ココから、ドライバーをインストールします。

6.2 WinUSBドライバーへの置き換え

Zadigよりツールをダウンロードして、EVB-NINA-W10x(Interface 0)のドライバーを、WinUSB に下記のように置き換えます。

[Options] → [List All Devices] を選択するとドライバーがリストアップされます。

画像6

7. minimodule.cfg の修正

minimoduleの設定で、FT4232を認識するように書き換えます。

C:\Users\<USERNAME>\.platformio\packages\tool-openocd-esp32\share\openocd\scripts\interface\ftdi\minimodule.cfg を下記のように書き換えます。

#
# FTDI MiniModule
#
# http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf
#
interface ftdi
ftdi_device_desc "EVB-NINA-W102"
ftdi_vid_pid 0x0403 0x6011
# Every pin set as high impedance except TCK, TDI, TDO and TMS
ftdi_layout_init 0x0008 0x000b
# nSRST defined on pin CN2-13 of the MiniModule (pin ADBUS5 [AD5] on the FT2232H chip)
# This choice is arbitrary. Use other GPIO pin if desired.
ftdi_layout_signal nSRST -data 0x0020 -oe 0x0020

ftdi_device_desc "EVB-NINA-W102"
ftdi_vid_pid 0x0403 0x6011

の部分が変更箇所です。

8. nina_w10.json の書き換え

多分、過渡期だとは思いますが、nina_w10の設定ファイルにデバッガの設定が抜けてます。仮に下記のように修正します。

C:\Users\<USERNAME>\.platformio\platforms\espressif32\boards\nina_w10.json

{
 "build": {
   "arduino":{
     "ldscript": "esp32_out.ld",
     "partitions": "minimal.csv"
   },
   "core": "esp32",
   "extra_flags": "-DARDUINO_UBLOX_NINA_W10",
   "f_cpu": "240000000L",
   "f_flash": "40000000L",
   "flash_mode": "dio",
   "mcu": "esp32",
   "variant": "nina_w10"
 },
 "connectivity": [
   "wifi",
   "bluetooth",
   "ethernet",
   "can"
 ],
   "debug": {
   "openocd_board":"esp-wroom-32.cfg"
 },
 "frameworks": [
   "arduino",
   "espidf"
 ],
 "name": "u-blox NINA-W10 series",
 "upload": {
   "flash_size": "2MB",
   "maximum_ram_size": 327680,
   "maximum_size": 2097152,
   "require_upload_port": true,
   "speed": 460800
 },
 "url": "https://www.u-blox.com/en/product/nina-w10-series",
 "vendor": "u-blox"

"debug": {
"openocd_board":"esp-wroom-32.cfg"
},

を加えてあります。

9. platformio.iniの書き換え。

"4"でBuildの試行をした環境に、"platformio.ini"があるので、下記のように書き換えます。[env:esp32dev]の環境から[env:nina_w10]の環境になります。

[env:nina_w10]
platform = espressif32
;board = esp32dev
board = nina_w10
framework = espidf
monitor_speed = 115200
build_flags =
	-D CONFIG_BLINK_GPIO=21
debug_tool = minimodule
upload_protocol = minimodule

10 書き込み

①[→]を押して書き込み。②が正常終了時のログ。platformio.iniはここ[赤下線部]にあります。

画像8

11. デバッガーの起動

①[▶]を押して、②の起動したいコードを選びます。gpio_pad_select_gpio(BLINK_GPIO);のところで実行が停止して、入力待ちになります。③のようにデバッグコンソールにログが流れます。

画像9

【その他】

■コードが増えてしまったとき。

対象にしたいコードは①を押すと、なぜか②から選択できます。

画像10

■なんか意図しないエラーがでる。

対象コードの変更をしたときなどに、右下に 回転している矢印が出ますが、それが出ている間にアクションしても、準備が整っていないのでエラーになります。

■WiFiの電波を出力するコードを実行するとき【重要】

phy_init.cを書き換える必要があります。技適を守るためです。NINA-W10xのシステムインテグレーションマニュアルを参照してください。
patch ファイル自体はココから入手します。

■WiFiのコードをお試し実行。

WiFi出力をそのまますると、技適に引っかかるので、まずは受信のみのSCANをしてみる。下記からExampleを引っ張ってくる。

example の scan.c を、blink.cと入れ替えれば動作します。シリアルから下記のログが得られます。

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:7188
load:0x40078000,len:14308
load:0x40080400,len:3716
entry 0x40080680
I (26) boot: ESP-IDF 4.3.1 2nd stage bootloader
I (26) boot: compile time 16:06:04
I (26) boot: chip revision: 1
I (29) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (36) boot.esp32: SPI Speed      : 40MHz
I (41) boot.esp32: SPI Mode       : DIO
I (45) boot.esp32: SPI Flash Size : 2MB
I (50) boot: Enabling RNG early entropy source...
I (55) boot: Partition Table:
I (59) boot: ## Label            Usage          Type ST Offset   Length
I (66) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (73) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (81) boot:  2 factory          factory app      00 00 00010000 000f0000
I (88) boot:  3 otadata          OTA data         01 00 00100000 00002000
I (96) boot:  4 spiffs           Unknown data     01 82 00102000 0000e000
I (103) boot:  5 app              OTA app          00 11 00110000 000f0000
I (111) boot: End of partition table
I (115) boot: Defaulting to factory image
I (120) boot_comm: chip revision: 1, min. application chip revision: 0
I (127) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=14078h ( 82040) map
I (165) esp_image: segment 1: paddr=000240a0 vaddr=3ffb0000 size=041e0h ( 16864) load
I (172) esp_image: segment 2: paddr=00028288 vaddr=40080000 size=07d90h ( 32144) load
I (186) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=6b15ch (438620) map
I (345) esp_image: segment 4: paddr=0009b184 vaddr=40087d90 size=0cd88h ( 52616) load
I (366) esp_image: segment 5: paddr=000a7f14 vaddr=50000000 size=00010h (    16) load
I (377) boot: Loaded app from partition at offset 0x10000
I (377) boot: Disabling RNG early entropy source...
I (389) cpu_start: Pro cpu up.
I (389) cpu_start: Starting app cpu, entry point is 0x40081248
I (0) cpu_start: App cpu up.
I (403) cpu_start: Pro cpu start user code
I (403) cpu_start: cpu freq: 160000000
I (403) cpu_start: Application information:
I (408) cpu_start: Project name:     espidf-blink
I (413) cpu_start: App version:      1
I (417) cpu_start: Compile time:     Nov 24 2021 16:05:31
I (423) cpu_start: ELF file SHA256:  4ebaaa26b406362f...
I (429) cpu_start: ESP-IDF:          4.3.1
I (434) heap_init: Initializing. RAM available for dynamic allocation:
I (442) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (448) heap_init: At 3FFB7F10 len 000280F0 (160 KiB): DRAM
I (454) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (460) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (467) heap_init: At 40094B18 len 0000B4E8 (45 KiB): IRAM
I (474) spi_flash: detected chip: mxic
I (477) spi_flash: flash io: dio
I (483) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (583) wifi:wifi driver task: 3ffc1aec, prio:23, stack:6656, core=0
I (583) system_api: Base MAC address is not set
I (583) system_api: read default base MAC address from EFUSE
I (603) wifi:wifi firmware version: 88c8747
I (603) wifi:wifi certification version: v7.0
I (603) wifi:config NVS flash: enabled
I (603) wifi:config nano formating: disabled
I (613) wifi:Init data frame dynamic rx buffer num: 32
I (613) wifi:Init management frame dynamic rx buffer num: 32
I (623) wifi:Init management short buffer num: 32
I (623) wifi:Init dynamic tx buffer num: 32
I (633) wifi:Init static rx buffer size: 1600
I (633) wifi:Init static rx buffer num: 10
I (633) wifi:Init dynamic rx buffer num: 32
I (643) wifi_init: rx ba win: 6
I (643) wifi_init: tcpip mbox: 32
I (653) wifi_init: udp mbox: 6
I (653) wifi_init: tcp mbox: 6
I (653) wifi_init: tcp tx win: 5744
I (663) wifi_init: tcp rx win: 5744
I (663) wifi_init: tcp mss: 1440
I (673) wifi_init: WiFi IRAM OP enabled
I (673) wifi_init: WiFi RX IRAM OP enabled
I (683) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
I (793) wifi:mode : sta (3c:71:bf:87:e0:94)
I (793) wifi:enable tsf
I (2893) scan: Total APs scanned = 14
I (2893) scan: SSID             elecom-528e0d
I (2893) scan: RSSI             -52
I (2893) scan: Authmode         WIFI_AUTH_WPA2_PSK
I (2893) scan: Pairwise Cipher  WIFI_CIPHER_TYPE_CCMP
I (2903) scan: Group Cipher     WIFI_CIPHER_TYPE_CCMP
I (2903) scan: Channel          9
画像11

上記ログのようにIDFがVer4.3.1なのでpatchには、Ver4.3のものを使用しました。

patchは下記のように当てました。gitをあらかじめインストールしておけばwindowsでもpatchを使うことができます。フルパスで指定しないといけないのが面倒です。IDFがアップデートされるたびに当てる必要があります。

C:\Users\hiroa\.platformio>>patch -p2 -i  c:\L\src\VScode\u-blox-sho-OpenCPU-master\NINA-W1-OTP\patches\ubx_phy_cal_esp_idf_4_3.patch -d C:\Users\hiroa\.platformio\packages\framedowk-espidf\components
patching file esp_wifi/CMakeLists.txt
patching file esp_wifi/src/phy_init.c

C:\Users\hiroa\.platformio>where patch
C:\Program Files\Git\usr\bin\patch.exe​

プログラム的には下記のように、main_app.cのあるフォルダに、uxb_phy_cal.cとubx_phy_cal.hを置いておけばOKです。

画像12

読み込みが成功していると、NINA-W10xの起動時に、ubx_phy_cal:ログが出力されているので、正しい出力規制がされていることがわかります。

I (682) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
W (682) ubx_phy_cal: No RF calibration value is stored in flash, using 0 (no calibration)
W (692) ubx_phy_cal: rf freq calibration enabled, value_otp = 0(ppm), value_set = 0(8kHz)
W (852) phy_init: saving new calibration data because of checksum failure, mode(0)
I (882) wifi:mode : sta (3c:71:bf:87:e0:94)

■NINA-W102/NINA-W101がROM 2MByte , NINA-W106がROM 4Bbyte 

アンテナ以外にこんな違いがあるのはややこしい。

■関連文書

EVK-NINA-W1ユーザーガイド:https://www.u-blox.com/en/docs/UBX-17011007

NINA-W1 シリーズデータシート:https://www.u-blox.com/en/docs/UBX-17065507

NINA-W10 システムインテグレーションマニュアル:https://www.u-blox.com/en/docs/UBX-17005730

https://platformio.org/

■購入

Digikeyでの購入:EVK-NINA-W106  4M Flash $99 くらい。EVK-NINA-W102 2M Flash $99くらい。

Mouserでの購入:EVK-NINA-W106 4M Flash $99 くらい。EVK-NINA-W102 2M Flash $99くらい。

u-bloxからの購入:EVK-NINA-W10x  87.51 EUR くらい。送料別。

どこで買ってもあまり値段は変わらないです。

■起動のログからの情報

"ESP-IDF 4.3.0 2nd stage bootloader" になってます。

rst:0x1 (POWERON_RESET),boot:0x37 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:7164
ho 0 tail 12 room 4
load:0x40078000,len:14292
load:0x40080400,len:3688
entry 0x40080678
I (29) boot: ESP-IDF 4.3.0 2nd stage bootloader
I (29) boot: compile time 21:09:08
I (29) boot: chip revision: 1
I (31) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (38) boot.esp32: SPI Speed      : 40MHz
I (43) boot.esp32: SPI Mode       : DIO
I (48) boot.esp32: SPI Flash Size : 2MB
I (52) boot: Enabling RNG early entropy source...
I (58) boot: Partition Table:
I (61) boot: ## Label            Usage          Type ST Offset   Length
I (68) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (76) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (83) boot:  2 factory          factory app      00 00 00010000 000f0000
I (91) boot:  3 otadata          OTA data         01 00 00100000 00002000
I (98) boot:  4 spiffs           Unknown data     01 82 00102000 0000e000
I (106) boot:  5 app              OTA app          00 11 00110000 000f0000
I (113) boot: End of partition table
I (118) boot: Defaulting to factory image
I (122) boot_comm: chip revision: 1, min. application chip revision: 0
I (129) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=06d80h ( 28032) map
I (149) esp_image: segment 1: paddr=00016da8 vaddr=3ffb0000 size=02944h ( 10564) load
I (153) esp_image: segment 2: paddr=000196f4 vaddr=40080000 size=06924h ( 26916) load
I (166) esp_image: segment 3: paddr=00020020 vaddr=400d0020 size=13898h ( 80024) map
I (197) esp_image: segment 4: paddr=000338c0 vaddr=40086924 size=04114h ( 16660) load
I (204) esp_image: segment 5: paddr=000379dc vaddr=50000000 size=00010h (    16) load
I (211) boot: Loaded app from partition at offset 0x10000
I (211) boot: Disabling RNG early entropy source...
I (225) cpu_start: Pro cpu up.
I (226) cpu_start: Starting app cpu, entry point is 0x400812dc
I (0) cpu_start: App cpu up.
I (240) cpu_start: Pro cpu start user code
I (240) cpu_start: cpu freq: 160000000
I (240) cpu_start: Application information:
I (244) cpu_start: Project name:     espidf-blink
I (250) cpu_start: App version:      1
I (254) cpu_start: Compile time:     Jul  9 2021 21:08:20
I (260) cpu_start: ELF file SHA256:  52b01bb93d6e3114...
I (266) cpu_start: ESP-IDF:          4.3.0
I (271) heap_init: Initializing. RAM available for dynamic allocation:
I (278) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (284) heap_init: At 3FFB3158 len 0002CEA8 (179 KiB): DRAM
I (291) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (297) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (303) heap_init: At 4008AA38 len 000155C8 (85 KiB): IRAM
I (310) spi_flash: detected chip: mxic
I (314) spi_flash: flash io: dio
I (319) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.

■参考 partition map

2Mのバージョンでは下記のようなマップを使ってます。

# Partition Map
nvs      ,data ,nvs     ,0x9000   ,0x6000   ,
phy_init ,data ,phy     ,0xf000   ,0x1000   ,
factory  ,app  ,factory ,0x10000  ,0x0F0000 ,
otadata  ,data ,ota     ,0x100000 ,0x2000   ,
spiffs   ,data ,spiffs  ,0x102000 ,0xE000   ,
app      ,app  ,ota_1   ,0x110000 ,0x0F0000 ,

■2022年10月25日でも、同じ手順でOKでした。

"ESP-IDF 4.4.2 2nd stage bootloader" になってます。

Restarting now.
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:6656
load:0x40078000,len:14848
load:0x40080400,len:3792
entry 0x40080694
I (27) boot: ESP-IDF 4.4.2 2nd stage bootloader
I (27) boot: compile time 06:07:12
I (27) boot: chip revision: 1
I (30) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (37) boot.esp32: SPI Speed      : 40MHz
I (41) boot.esp32: SPI Mode       : DIO
I (46) boot.esp32: SPI Flash Size : 2MB
I (51) boot: Enabling RNG early entropy source...
I (56) boot: Partition Table:
I (60) boot: ## Label            Usage          Type ST Offset   Length
I (67) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (74) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (82) boot:  2 factory          factory app      00 00 00010000 000f0000
I (89) boot:  3 otadata          OTA data         01 00 00100000 00002000
I (97) boot:  4 spiffs           Unknown data     01 82 00102000 0000e000
I (104) boot:  5 app              OTA app          00 11 00110000 000f0000
I (112) boot: End of partition table
I (116) boot: Defaulting to factory image
I (121) boot_comm: chip revision: 1, min. application chip revision: 0
I (128) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=07874h ( 30836) map
I (148) esp_image: segment 1: paddr=0001789c vaddr=3ffb0000 size=02348h (  9032) load
I (151) esp_image: segment 2: paddr=00019bec vaddr=40080000 size=0642ch ( 25644) load
I (166) esp_image: segment 3: paddr=00020020 vaddr=400d0020 size=148a4h ( 84132) map
I (197) esp_image: segment 4: paddr=000348cc vaddr=4008642c size=04e24h ( 20004) load
I (205) esp_image: segment 5: paddr=000396f8 vaddr=50000000 size=00010h (    16) load
I (211) boot: Loaded app from partition at offset 0x10000
I (211) boot: Disabling RNG early entropy source...
I (225) cpu_start: Pro cpu up.
I (226) cpu_start: Starting app cpu, entry point is 0x4008103c
I (213) cpu_start: App cpu up.
I (240) cpu_start: Pro cpu start user code
I (240) cpu_start: cpu freq: 160000000
I (240) cpu_start: Application information:
I (245) cpu_start: Project name:     hello-world
I (250) cpu_start: App version:      1
I (254) cpu_start: Compile time:     Oct 25 2022 06:06:52
I (260) cpu_start: ELF file SHA256:  8d48af62d9dcce29...
I (266) cpu_start: ESP-IDF:          4.4.2
I (271) heap_init: Initializing. RAM available for dynamic allocation:
I (278) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (284) heap_init: At 3FFB2C28 len 0002D3D8 (180 KiB): DRAM
I (291) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (297) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (303) heap_init: At 4008B250 len 00014DB0 (83 KiB): IRAM
I (311) spi_flash: detected chip: mxic
I (314) spi_flash: flash io: dio
I (319) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello world!

                      2022年10月25日@HoKoR

この記事が気に入ったらサポートをしてみませんか?