【M5Stack_Core2】Serial I/F周り
シリアル入出力を自由に使えないとdebugがはかどらないので少し調べた。
なぜか回路検証をしていた。
test_serial.ino
// // Serial 周り確認 // // 2020/10/11 chiyo.h // #include <M5Core2.h> #include <utility/Sprite.h> #include <stdio.h> #include <touch.h> #define ESP32 TFT_eSprite spr = TFT_eSprite(&M5.Lcd); int gpio0 = 0; void setup() { M5.begin(); // 外部I2C off Serial.printf("\n"); Serial.flush(); delay(50); yield(); M5.Lcd.fillScreen(WHITE); M5.Lcd.setTextColor(BLACK); M5.Lcd.setTextSize(2); M5.Lcd.clear(WHITE); M5.Lcd.setCursor(10, 10); M5.Lcd.printf("Serial Test!"); // スプライト定義 spr.setColorDepth(8); // カラーモード spr.createSprite(320, 240); // 大きさ spr.fillSprite(TFT_WHITE); // Serial動作抑制 Serial.end(); // WDT無効 disableCore0WDT(); disableCore1WDT(); pinMode(gpio0, INPUT); // 入力モード delay(50); yield(); } void loop() { int val = digitalRead(gpio0); spr.drawNumber(val, 0, 0, 4); spr.pushSprite(0,0); // グラフ spr.fillSprite(TFT_WHITE); //Serial.println(""); delay(200); yield(); }
GPIO0は、I2Sスピーカーにもつながっている。 ちょっと調べた感じでは、モノ出力スピーカに対してCTRL信号で、ICのON/OFF及びI2Sの出力R/L切り替えを行う。つまり、ステレオにしたい場合は、このモジュールを2つ用意する。 CTRLを3値制御だがデジタル出力なので右/OFFの2制御になっている。LRCKは、サンプリング周波数及びH/LでR/Lのデータを切り替えを制御。BCLKは、搬送クロック。SADTAはPCMデータ。つまり、スピーカを使っているときにはGPIO0には、サンプリング周波数でMPU側から周波数信号が出ている。
Serial通信に、PC側からデータ溢れチェックのRTSをGPIO0でCTS信号として使えるがそれ用に使っている感じではなさそう。
実際に回路を動かして確認してみる 昔の定番ターミナルにTeraTermというソフトがある。組み込みエンジニアにはおなじみなのかもしれない。昔懐かしいVT100コマンドも対応しているのでArduino IDEモニターではできないような高性能なことがCOMポートに対して可能。WiFi使ってTCP/IP接続の場合もこの端末は使える。で、ここではこいつのマクロを使用してDTS/RTS制御を行う。
serial_check.ttl
; ; Serial I/F周り確認 ; ; ============================================== ; (0) リセットボタン押す ; ============================================== ; ; ============================================== ; (1) まずは、状態確認 ; ============================================== getmodemstatus val sprintf2 str '%d(%x) , result:%d' val val result messagebox str "(1) Modem status" ; ; GPIO0 = 1 ; ; M5側 端末側 ; RTS(NC)->CTS(Low) ; DTR(NC)->DSR(Low) ; ;bit ;1 CTS( 送信可)信号がオンです。 ;2 DSR( データセットレディ)信号がオンです。 ;4 呼び出し信号がオンです。 ;8 RLSD( 受信線信号検出)信号がオンです。 ; ; 値が0ということは、M5側がRTS off DTR offということ ; ; ; ============================================== ; (2) READY PC端末の正常状態(フロー在りのとき) ; ============================================== ; DTR on(端末ON) RTS on(送信要求) setdtr 1 setrts 1 messagebox "DTR1 RTS1" "(2) (II)" ; ; GPIO0 = 1 ; ; 特に変化しない ; ; ; ============================================== ; (3) STOP 送信STOP要求 RTS off ; ============================================== ; ;setdtr 1 setrts 0 messagebox "DTR1 RTS0" "(3) (IV)" ; ; GPIO0 = 0 ; ; GPIO0が0に変化 ; ; ; ============================================== ; (4) 端末OFF DTR off RTS off ; ============================================== ; ※端末OFFなのにRTS on(送信リクエスト)にはならないので ; setdtr 0 setrts 0 messagebox "DTR0 RTS0" "(4) (I)" ; ; GPIO0 = 1 ; ; GPIO0が1に変化 ; ; ; ============================================== ; (5) RESET DTR off RTS on ; ============================================== ; ※異常状態 ; setdtr 0 setrts 1 messagebox "DTR0 RTS1" "(5) (III)" ; ; GPIO0 = 1 ; ; 回路的には、RESETボタンが押されている状態 ; リセットになっているのは、MPUに対してだけなので ; 液晶や周辺回路は変化しない。MPUも立ち上がりedgeで ; リセット動作になるのでここでは変化ない ; ; ; ============================================== ; (6) リセット動作1 DTR off RTS on→off ; ============================================== ; setrts 0 messagebox "DTR0 RTS0" "(6) (III->I)" ; ; GPIO0 = 1 ; ; ; ============================================== ; (7) リセット動作2 DTR off RTS on→off ; ============================================== ; setdtr 1 setrts 1 setdtr 0 messagebox "DTR0 RTS1" "(7) (II->III)" setdtr 1 messagebox "DTR1 RTS1" "(7) (III->II)" ; ; リセット動作 ; ; ; ============================================== ; (8) リセット動作3 download boot ; ============================================== ; (GIO0=0状態でリセット) setdtr 1 setrts 1 setdtr 0 messagebox "DTR0 RTS1" "(8) (II->III)" setdtr 1 setrts 0 messagebox "DTR1 RTS1" "(8) (III->II->IV)" ; ; ; download リセット動作 ; ; ============================================== ; (9) リセットリセットボタンを押す ; ==============================================
log.txt
; ============================================== ; (0) リセットボタン押す ; ============================================== ets Jul 29 2019 12:21:46 rst:0x1 (POWERON_RESET),boot:0x17 (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:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1044 load:0x40078000,len:8896 load:0x40080400,len:5816 entry 0x400806ac M5Core2 initializing...axp: vbus limit off axp: gpio1 init axp: gpio2 init axp: rtc battery charging enabled axp: esp32 power voltage was set to 3.35v axp: lcd backlight voltage was set to 2.80v axp: lcd logic and sdcard voltage preset to 3.3v axp: vibrator voltage preset to 2v OK ; ============================================== ; (6) リセット動作1 DTR off RTS on→off ; ============================================== ets Jul 29 2019 12:21:46 rst:0x1 (POWERON_RESET),boot:0x17 (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:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1044 load:0x40078000,len:8896 load:0x40080400,len:5816 entry 0x400806ac M5Core2 initializing...axp: vbus limit off axp: gpio1 init axp: gpio2 init axp: rtc battery charging enabled axp: esp32 power voltage was set to 3.35v axp: lcd backlight voltage was set to 2.80v axp: lcd logic and sdcard voltage preset to 3.3v axp: vibrator voltage preset to 2v OK ; ============================================== ; (7) リセット動作2 DTR off RTS on→off ; ============================================== ets Jul 29 2019 12:21:46 rst:0x1 (POWERON_RESET),boot:0x17 (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:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1044 load:0x40078000,len:8896 load:0x40080400,len:5816 entry 0x400806ac M5Core2 initializing...axp: vbus limit off axp: gpio1 init axp: gpio2 init axp: rtc battery charging enabled axp: esp32 power voltage was set to 3.35v axp: lcd backlight voltage was set to 2.80v axp: lcd logic and sdcard voltage preset to 3.3v axp: vibrator voltage preset to 2v OK ; ============================================== ; (8) リセット動作3 download boot ; ============================================== ets Jul 29 2019 12:21:46 rst:0x1 (POWERON_RESET),boot:0x7 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2)) waiting for download
この確認と少し調べてわかったこと