M5Stack Fireで動くアプリをM5CORE2に移植しようとしている。
GPIOのボタンがないので、タッチパネルを有効にしてソフトウェアボタンを代わりにしようとしている。
それはよかったのだが、移植先でソフトウェアボタンの応答性がよろしくない。
ログも出せない状態なのでLEDの点灯だけで様子を見ているのだが、タッチパネルのFT6336UにI2C readしているところがなかなか戻ってこないようで、それも5秒くらい間が空いている。
I2Cのアクセスにmutexとかかけてないからよくないのでは、と思っていたのだが、FT6336UのINTピンはOUTPUTで、readできるようになったときにアサートするようになっているらしい。read準備できていないときにI2C readするとどうなるのかはわからなかった。スタートコンディションにならないとかで今回の妙に時間が空く現象が起きたんじゃなかろうか。
ただ、I2C readを定期的に行うようにしたのはINTでtaskを起こしてI2C readする、というのがうまくいっていなさそうだったから変更しただけなのだ。
なんだろうね。
M5CORE2でI2C接続しているものは、これら。
私が今回使いたいのは、AXP192とFT6336U。
AXP192にGPIOがあるので指示はI2Cで出すし、タッチパネルのFT6336UからはI2Cで結果を読み取るし。
それが別々のtaskで好き勝手やってたら、そりゃうまく動かんわな。
I2Cのドライバレベルでは排他は持ってないだろうから、簡易的にmutexの変数をグローバルにして衝突だけは回避させるか。
失敗したらランダム時間待ってからリトライ、というのでも暫定対応としては悪くないかも。
というわけで、今日の作業はおしまいだ。
何も解決していないのだが、M5CORE2のソケットを外してみたので写真を載せておこう。
裏蓋は六角レンチが無いと開けられないが、ソケットだけなら丈夫な細い鉄串か何かで取り外せる。爪楊枝くらいだとちょっと強度が足りない気がするがね。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。