2021/02/14

M5CORE2のシステムLED

M5CORE2の電源LEDを点灯させたい。

電源LEDと書いたが、正確にはSYS_LEDという名前だ。

image

なので、電源がONになると自動的に点灯する、というわけではない。
そしてこれ以外にLEDは無いので、LCDもLEDも制御していない状態だと外見から電源が入っているかどうかわからないのだ。

だからLEDを点灯させたいのだ。


困ったことに、SYS_LEDはESP32のGPIOではなくAXP192、つまり電源制御用のチップ側につながっている。
GPIO1だ。

image

LEDのところからすると、SYS_LEDが0Vになれば電流が流れて点灯するはずだ。

 

for AWSのコードでは、起動時に1Enableにするときに0を設定している。
どちらもAxp192_SetGPIO1Mode()という関数を使っている。
AXP192_GPIO1_CTL_REGが0x92なので、そこがGPIOのHI/LO設定なのだろう。

一応確認しておく。
AXP192データシートは・・・中国語版PDFしか見当たらなかった。

image

くっ・・・。
下位3bitが有効で、デフォルト値は111。なんとなく文字の雰囲気からハイインピーダンスだろうか。
起動時に001、ONにするときに000。

功能设置 → 機能設定

000 NMOS 漏极开路输出 → NMOSオープンドレイン出力
001 通用输入功能 → ユニバーサル入力機能

値の書込では無くモードの設定なのか。
ユニバーサル入出力が、いわゆるGPIOモードなのだと思う。
でも、LEDのONでオープンドレインにする・・・? いや、関数名からするとLEDを有効にする、なのだが同時に点灯もしているのだ。

あ、001は「入力」で、000は「出力」だった。
入力の時って、だいたいハイインピーダンスよね。

 

Hi/Loの制御はこっちだと思う。

image

デフォルトの出力値が0なので、GPIO1の設定を出力にしただけでLEDが点灯する、というわけだ。
念のためHiにしたら点灯しなかったので、間違ってないだろう。

いやあ、久々にポート制御するので不安だったよ。

 

(追記)

システムLEDのON/OFFをする場合、0x94レジスタのHi/Loでは結局ダメだった。
Hiにしたら等電位になって点灯しないと思うのだが、そうならない。
0x92レジスタでINPUT(OFF)/OUTPUT(ON)にするしかなく、まあfor AWSの実装そのままになった。
すっきりせんなぁ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。