見出し画像

M5StackのI2C信号の電圧

M5StackのGrove PortA(赤いコネクタ)は主にI2C通信に使われます.
通信はI2CなのでM5Stack純正のUnitの他にも,いろいろなセンサやArduinoのようなマイコンボードと通信させたりもできます.
ただ,このI2Cの信号電圧は3.3V専用なのかそれとも5Vでも良いのかがよくわからないところで,M5Stack純正以外のI2Cデバイスの接続するときに悩みます.
今回,ちょっと調べてみたので紹介します.

M5Stackはどうなっている?
まず,M5Stackの例としてCore2を見てみます.
https://docs.m5stack.com/en/core/core2 の下の方に回路図があります.
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/schematic/Core/CORE2_V1.0_SCH.pdf
PortAに関係する部分を抜粋するとこんな感じです.

画像1

PortAのI2C信号SCLとSCAはマイコンESP32に接続されています.I2Cの信号電圧はSCLとSDAを何Vにプルアップするかで決まりますが,Core2の基板上には基板にはプルアップ抵抗はなく,ESP32の内蔵プルアップかCore2の外部にプルアップ抵抗を付けることになります.
ESP32の電源は3.3Vに接続されているのでSCLとSDAは3.3Vにプルアップするのがよさそうです.

純正のUnitはどうなっている?
次に,M5Stackの接続相手の例として,純正UnitのPb.HUBを見てみます.Pb.HUBにはArduino UNOにも使われているAVRマイコンのATmega328が搭載されていて,M5StackのESP32とI2Cで通信します.回路図は
https://docs.m5stack.com/en/unit/pbhub
にあり,PortAに関係する部分を抜粋するとこんな感じです.

画像2

I2C信号(SCLとSDA)は10kΩの抵抗で5Vにプルアップされています.またATmega328はPortAから供給される5Vで動作します.これを見るとI2C信号の電圧は5Vにするのがよさそうです.

信号レベルが合ってない?
さて,I2C信号(SCLとSCA)の電圧について,Core2(ESP32)側を見ると3.3V,Pb.HUB(AVR ATmega328)側をみると5Vということで合ってないように見えます.5VのATmega328に3.3V信号をつなぐのはノイズマージンが減る程度であまり問題なさそうですが,3.3VのESP32に5V信号をつなぐのは壊れたりしないのだろうか?となります.

ESP32のデータシートはどうなっている?
もしESP32に5Vトレラントといったような機能があれば問題なしとなるのでデータシートを見てみます.ESP32のデータシートはメーカESPRESSIFのWebサイトにあります.
https://www.espressif.com/en/support/documents/technical-documents
にあるESP32 Datasheet V3.6です.
5Vトレラントがあるような記述は見つけられず,5.3 DC CharacteristicsにVIH(High-level input voltage)のMaxがVDD+0.3Vと書かれていました.Core2の場合VDDが3.3VなのでI2C含めGPIOに接続される信号の電圧は3.6V以下にするのが仕様内の使い方となります.

実際につないで測ったらどうなっている?
さて困った.ということで,I2C信号が実際どんな電圧になるのかオシロスコープで見てみました.

測定箇所はCore2のダイオードアレイのところです.この状態でCore2とPb.HUBを接続,さらにPb.HUBにRGB Unitを接続,そしてUIflowを使ってRGB UnitのLEDを点灯させ,その時のSCLとSDAの電圧を見てみます.

測定箇所
結果,信号のHighレベルは3.8Vくらいで,ESP32のVDD+0.3Vをわずかに超えてしまいました.
(黄色がSCL,赤がSDAです.)

画像4

5Vまで上がらないのは,ESP32の内蔵プルアップで3.3Vにも接続されている,ダイオードアレイSRV05-4の順方向電圧で制限されるといったことなどが原因と思います.

結論
M5Stack(Core2)のPortAに5VでプルアップされたI2Cを接続しても直ちに壊れるようなことはなさそうです.
・M5Stack純正UnitのPb.HUBで実績がある
・電圧がESP32の仕様を超えるがそれほど大きくない
・プルアップ抵抗経由での電圧印可なのでそれほど大きな電流は流れない
でも,5VのI2Cを直接接続するより,3.3Vに変換して接続した方が安心.

まとめ
M5StackのPortAにM5Stack純正以外のI2Cデバイスを接続するときに気になるI2C信号電圧について調べてみました.5VでプルアップされたI2C信号を接続してもだいたい問題ないようです.ただ,安定動作のためにはやはりレベル変換して接続した方が良いと思います.

この記事が気に入ったらサポートをしてみませんか?