M5core2でつかえない..?
自分の使い方が悪いのでしょうが、こちらを利用しようとしたときにうまく使えなかったので、ほかにも困っている人がいればお役に立てることを願って記事にしました。
正規の方法でもっと簡単に利用できるんだよという方法をご存じの方はコメントいただけると幸いです。
この製品の正規のライブラリは以下ですが、
AdafruitのtinyUSBをベースに作成されているようで、サンプルスケッチのUSBHostの初期化時にSPIのピンをcore2用に設定しても、ADCと機能が競合するというメッセージが出るだけで使えませんでした。
core2で使用する場合にも具体的な例がないですし設定方法がよくわかりませんでした。
USB Host シールド用のライブラリを改造
core2用の製品も、Aruduino用のこちらのシールドに使われているのも同じICです。
こちらは利用経験があり、ライブラリも自分にとっては見やすかったのでこちらを使用できるように手を加えました。
ライブラリはこちらで、
core2で使用する場合、ピン定義が異なるため、以下の修正を行いました。
avrpins.hの1929行目から1941行目を次のように変更します。
// Pinout for ESP32 dev module
MAKE_PIN(P0, 0);
MAKE_PIN(P1, 1); // TX0
MAKE_PIN(P10, 10); // TX1
MAKE_PIN(P3, 3); // RX0
MAKE_PIN(P21, 21); // SDA
MAKE_PIN(P22, 22); // SCL
- MAKE_PIN(P19, 19); // MISO
+ MAKE_PIN(P38, 38); // MISO はcore2では38に変更されています
MAKE_PIN(P23, 23); // MOSI
MAKE_PIN(P18, 18); // SCK
- MAKE_PIN(P5, 5); // SS
+ MAKE_PIN(P19, 19); // SS は GPIOの19に設定します
- MAKE_PIN(P17, 17); // INT
+ MAKE_PIN(P27, 27); // INT は使用しませんが他の機能と競合しないように空いているGPIOに設定しました。
次に、UsbCore.hの54行目を次のように変更します。
#elif defined(ESP32)
- typedef MAX3421e<P5, P17> MAX3421E; // ESP32 boards
+ typedef MAX3421e<P19, P27> MAX3421E; // 先ほど変更したピン番号に変更する
これで使用できるようになるはずです。