普段はGUIのフラッシュライタ(flash_download_tool)でファームを更新していたが、、pythonで書かれたesptoolでESP32-DevKitのファーム更新をしてみる。
esptoolは以下のGITにあるが、、
https://github.com/espressif/esptool
pipでも入るそうである。自分の環境はCygwinでpythonをあれこれ入れてかなり環境がおかしくなっていので、フルパスでpipを起動しないとエラーになる。
/usr/bin/pip2.7 install --upgrade pip
/usr/bin/pip2.7 install esptool
コマンドは以下(micropythonサイトより)
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20190125-v1.10.bin
cygwinの場合、人にもるかもしませんが、自分のcygwinでは、/dev/ttyS10のようである。
$ esptool.py --chip esp32 --port /dev/ttyS10 erase_flash
esptool.py v2.6
Serial port /dev/ttyS10
Connecting....
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 30:ae:a4:ca:da:18
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 9.3s
Hard resetting via RTS pin...
次にファームを焼いてみる。
http://micropython.org/download#esp32
esp32-ppp-fix.bin (latest) が最新らしいので、、素直にこれを選択。
$ esptool.py --chip esp32 --port /dev/ttyS10 write_flash -z 0x1000 esp32-ppp-fix.bin
esptool.py v2.6
Serial port /dev/ttyS10
Connecting........_
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 30:ae:a4:ca:da:18
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1147552 bytes to 717585...
Wrote 1147552 bytes (717585 compressed) at 0x00001000 in 63.7 seconds (effective 144.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
手動でフラッシュを焼いてた時は、ENとBOOTピンをGNDに落として電源OFF/ONしてCPUのモードを切り替えて、、とやっていたけど、DevKitのボードでは手動リセットが不要のようである。これは、DTS/CTS等でEN/BOOTを操作してくれているから?? 回路図みないとどういうからくりなのかちょっと分からず。
uPythonから再起動させてみた。バージョンは、 v1.10-331-ge38c68310-dirty 。。dirtyって何?
>>> machine.reset()
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_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:0x3fff0018,len:4
load:0x3fff001c,len:4936
load:0x40078000,len:9332
load:0x40080400,len:6216
entry 0x400806e8
I (432) cpu_start: Pro cpu up.
I (432) cpu_start: Application information:
I (432) cpu_start: Compile time: 23:54:40
I (434) cpu_start: Compile date: May 8 2019
I (440) cpu_start: ESP-IDF: v3.3-beta1-268-g5c88c5996
I (446) cpu_start: Starting app cpu, entry point is 0x40082844
I (438) cpu_start: App cpu up.
I (457) heap_init: Initializing. RAM available for dynamic allocation:
I (464) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (470) heap_init: At 3FFB9B88 len 00026478 (153 KiB): DRAM
I (476) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (482) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (489) heap_init: At 40093398 len 0000CC68 (51 KiB): IRAM
I (495) cpu_start: Pro cpu start user code
I (66) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
MicroPython v1.10-331-ge38c68310-dirty on 2019-05-09; ESP32 module with ESP32
Type "help()" for more information.
慣れたらCUIでファーム焼く方が楽。バッチ化もできるし。