jade: タッチスクリーンは扱えるのか (2)
2025/05/23
はじめに
Blockstream Jade のコードを M5Stack Core2 で動かしたいシリーズ。
前回分かったこと
- M5Core2 のタッチスクリーン FT6336U は M5Core-S3 も同じ
- M5Core-S3 には対応していそうな雰囲気はある
- が Jade/diy のページには載っていない
- 更新していないだけだと思いたい。。。
main/input.c の更新履歴 を見て、waveshare のボードに対応したのは比較的最近だということに気付いた。
だからどうしたと言われればそれまでなのだが、タッチスクリーンに対応したボードが過去にもあったから大丈夫ではないか、というのが心配になってきた。
2025年1月8日にタッチデバイスを禁止にするコードがあって、それが後に取り除かれたんだったら対応していてもよさそうだが、
それは waveshare のボードに対応するためのもので他は未確認、という可能性もある。
Espressif は FT5x06 Controller を提供している。
同じディレクトリ にはこれ以外の FT シリーズはない。
コントローラは FocalTech というところのもので、そのGitHubリポジトリ にあるドライバは FT5x06 と FT6x36 が並んでいる。
コードを見ても FT6x 系を見分けていそうなのは 1箇所だけだ。
そのレジスタにアクセスするコードは Espressif でのコード にないから、いいんじゃないかなあ。
ともかくスタックトレースで esp_lcd_new_panel_io_i2c()
が出ているので、これがエラーになっているのは間違いなかろう。
esp-bsp の M5Core2 っぽいファイルでも使っている。
README でもそう書いているし、このコードを参考にすると良いはずだ。
ログを見返す。
最後の方で “ESP_ERROR_CHECK failed” になり “esp_err_t 0x103” だといっている。
発生箇所は at /COMPONENT_MAIN_DIR/input/touchscreen.inc:57 の esp_lcd_new_panel_io_i2c()
。
エラー値 0x103
はおそらく ESP_ERR_INVALID_STATE だろう。
Warning は 2箇所だが、取りあえずスルーしてよいと思う。
- esp_psram: Virtual address not enough for PSRAM, map as much as we can.
- map できるようにできてるのなら OK なんじゃないの。
- spi_flash: Detected size(16384k) larger than the size in the binary image header(4096k).
- 検出したサイズがイメージのサイズより大きいから OK なんじゃないの。
entry 0x40080570
I (548) quad_psram: This chip is ESP32-D0WD
I (548) esp_psram: Found 8MB PSRAM device
I (548) esp_psram: Speed: 40MHz
I (548) esp_psram: PSRAM initialized, cache is in low/high (2-core) mode.
W (554) esp_psram: Virtual address not enough for PSRAM, map as much as we can. 4MB is mapped
I (562) cpu_start: Multicore app
I (576) cpu_start: Pro cpu start user code
I (576) cpu_start: cpu freq: 240000000 Hz
I (576) app_init: Application information:
I (578) app_init: App version: 1.0.35-dirty
I (583) app_init: Secure version: 0
I (586) app_init: ELF file SHA256: 42db14068...
I (590) app_init: ESP-IDF: v5.4.1
I (594) efuse_init: Min chip rev: v1.0
I (598) efuse_init: Max chip rev: v3.99
I (602) efuse_init: Chip rev: v3.0
I (606) heap_init: Initializing. RAM available for dynamic allocation:
I (612) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM
I (617) heap_init: At 3FFB6388 len 00001C78 (7 KiB): DRAM
I (622) heap_init: At 3FFB9A20 len 00004108 (16 KiB): DRAM
I (627) heap_init: At 3FFC6928 len 000196D8 (101 KiB): DRAM
I (633) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (638) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (644) heap_init: At 4009E1FC len 00001E04 (7 KiB): IRAM
I (649) esp_psram: Adding pool of 4089K of PSRAM memory to heap allocator
I (656) spi_flash: detected chip: generic
I (659) spi_flash: flash io: dio
W (662) spi_flash: Detected size(16384k) larger than the size in the binary image header(4096k). Using the size in the binary image header.
I (675) main_task: Started on CPU0
I (685) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (685) main_task: Calling app_main()
I (695) main.c: 96: Running partition ptr: 0x3ffcf744
I (695) main.c: 106: Running firmware version: 1.0.35-dirty
I (705) main.c: 118: Running partition state: 2
ESP_ERROR_CHECK failed: esp_err_t 0x103 at 0x40119b9b
--- 0x40119b9b: touchscreen_task at /COMPONENT_MAIN_DIR/input/touchscreen.inc:57 (discriminator 1)
ただ、もとの esp_lcd_new_panel_io_i2c()
がよくわからない。
ここってタッチスクリーンではなく LCD だよねぇ。
LCD には出力があるから動いていると思うのだが、Jade のコードでは main/input/touchscreen.inc にあるから入力デバイスの処理だと思うのだよ。
この手順に従うとこうなる。
i2c_new_master_bus()
esp_lcd_new_panel_io_i2c()
: 今回エラーになった関数esp_lcd_new_panel_ssd1306()
: これは SSD1306 というコントローラの場合だろう
順番はそうなっているのでよかろう。
esp_lcd_new_panel_io_i2c() はマクロだった。 ただ、返すエラーは ESP_ERR_INVALID_ARG(0x102) か ESP_ERR_NO_MEM(0x101) となっている。