リンク内容### 実現したいこと
SC16IS740(下記URL品使用)を利用してM5StackのI2C通信をUARTに変換したい。
https://www.switch-science.com/products/6027?srsltid=AfmBOoqi6esHTYGGv8DLsaRvQOSXAdy1zjxImWNRi6tWWsvTaWixrvEt」
使用したライブラリは下記のもので一部修正しております。(下記補足にて記載)
https://github.com/SandboxElectronics/UART_Bridge
発生している問題・分からないこと
現状、M5StackBasicとI2C-UART変換基板間での通信自体は成功しているようですが、read();コマンド実行時、Guru Meditation Errorが発生し、M5Stackが再起動される。
エラーメッセージ
error
111:05:52.456 -> device found 211:05:52.456 -> start serial communication 311:05:52.503 -> Sending 0x55 411:05:52.503 -> Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled. 511:05:52.503 -> Memory dump at 0x400d1cec: 00fffd25 5c004136 ad7b0c5c 611:05:52.503 -> Core 1 register dump: 711:05:52.503 -> PC : 0x400d1cf2 PS : 0x00060a30 A0 : 0x800d1559 A1 : 0x3ffb2240 811:05:52.503 -> A2 : 0x3ffc1c80 A3 : 0x02003455 A4 : 0x00000016 A5 : 0x00000000 911:05:52.503 -> A6 : 0x00000001 A7 : 0x00000078 A8 : 0x800d1cef A9 : 0x3ffb2220 1011:05:52.503 -> A10 : 0x3ffc1c80 A11 : 0x00000055 A12 : 0x00000020 A13 : 0x00000000 1111:05:52.535 -> A14 : 0x0000001d A15 : 0x00000001 SAR : 0x0000001c EXCCAUSE: 0x00000000 1211:05:52.535 -> EXCVADDR: 0x00000000 LBEG : 0x40086224 LEND : 0x4008623a LCOUNT : 0xffffffff 1311:05:52.535 -> 1411:05:52.535 -> 1511:05:52.535 -> Backtrace: 0x400d1cef:0x3ffb2240 0x400d1556:0x3ffb2260 0x400d3e86:0x3ffb2290
該当のソースコード
#include <Wire.h> #include <SC16IS750.h> #include <SPI.h> SC16IS750 i2cuart = SC16IS750(SC16IS750_PROTOCOL_I2C, SC16IS750_ADDRESS_BB); void setup() { Serial.begin(115200); Wire.begin(21, 22); Serial.println("I2C initialized"); i2cuart.begin(9600); Serial.println("SC16IS750 initialized"); if (i2cuart.ping() != 1) { Serial.println("device not found"); while (1); } else { Serial.println("device found"); } Serial.println("start serial communication"); // FIFOの初期化 i2cuart.initializeFIFO(); delay(10); Serial.println("Sending 0x55"); i2cuart.write(0x55); delay(10); // 送信後の待機時間 while (i2cuart.available() == 0); if (i2cuart.read() != 0x55) { Serial.println("serial communication error for 0x55"); while (1); } else { Serial.println("0x55 received successfully"); } delay(200); Serial.println("Sending 0xAA"); i2cuart.write(0xAA); delay(10); while (i2cuart.available() == 0); if (i2cuart.read() != 0xAA) { Serial.println("serial communication error for 0xAA"); while (1); } else { Serial.println("0xAA received successfully"); } delay(200); } void loop() {}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
元々、通信自体出来ず.hファイルにて下記記述を追加したところ通信自体は出来るようになったが、今回のエラーが発生した。
#ifdef AVR
#define WIRE Wire
#elif ESP32 ←追加
#define WIRE Wire ←追加
#else // Arduino Due
#define WIRE Wire1
#endif
補足
M5STAck ⇒変換基板(I2C入力) UART出口にてTX,RXをジャンパにてショートさせております。
あなたの回答
tips
プレビュー