目的
M5Stackから本年の4月に発売されたCoreMP135について、HDMIの思い出を振り返ります。
M5stack CoreMP135の発売
4月の最終週、M5Stackと似たような形で、液晶やスピーカ、USB等のインターフェイスを備えたLinuxデバイス、CoreMP135が発売されました。
📣Friday New Arrival:
— M5Stack (@M5Stack) April 26, 2024
M5Stack CoreMP135 - the compact and powerful #SBC, powered by @ST_World #STM32MP135D, with IPS LCD, versatile ports, flexible power supply and installation methods. Ideally applied for #IIoT Control, #HomeAutomation, #HMI.
For more: https://t.co/aEo1S1Ojwq pic.twitter.com/KQmgle7oEi
HDMIの色ずれが見つかる。
発売して少し経った5/29、当方がHDMIとつなげてみたところ、Red Green Blur の色のうち、RedとBlueが逆になって色ずれしていることが見つかりました。
#CoreMP135 で、DisplayPortとLCDにfbiでカラーバーを出すと、色がずれている( ;∀;)
— nnn (@nnn112358) May 29, 2024
color_bar:https://t.co/KL98m0jf6u pic.twitter.com/jTtfHF7X1c
同日、@memetan 氏もHDMIの色ずれを見つけていました。
CoreMP135のHDMI-TX、RedとBlueが反転してるのは自分の改造の問題?
— memetan (@dollychun) May 29, 2024
ただそれの確認のためだけにSD書き換えるのめんどいー pic.twitter.com/Ysdceax4Vt
原因究明
HDMIの色ずれ発見の5日前、CoreMP135のHDMIトランスミッターLT8618sxbを制御するソースコードが公開されていました。しかし、LT8618sxbの仕様やレジスタマップは公開されていません。M5Stackとlt8618sxbを製造するメーカーと間に機密保持の関係があるようで、一般ユーザーには公開できないようです。
そのため、公開されているLT8618sxbのドライバ実装コードを読んでも、一見、正体不明のレジスタに正体不明の値を書き込んでいるように見えるため、何をしているのかよくわかりません。
CoreMp135の、lt8618sxb_mcu_configのコードが公開されていた。https://t.co/3Dgp93rOHv
— nnn (@nnn112358) May 24, 2024
ここから、@memetan氏の調査が始まりました。ここで、試行錯誤した結果からM5Stackへ問い合わせを行っておられました。
@M5Stack The HDMI output on CoreMP135 has Red and Blue channel flipped.
— memetan (@dollychun) May 30, 2024
I'm suspicious of HDMI transmitter being configured to receive BGR data.
I just fixed this problem by telling LTDC to output BGR for RGB buffer, which is not best way to fix.
Could you take a look at it?
@memetan 氏の問い合わせに対して、@ciniml 氏が参戦されました。
たぶんバンク0x82の0x45のレジスタの値を修正すれば、チャネルスワップの状態変えられると思う。
— Kenta IDA (@ciniml) May 30, 2024
0xffに0x82書いてバンク切り替え、その後0x45に値を書く。https://t.co/9PK0dbSFIN https://t.co/QykdF20Y1d
@memetan氏と@ciniml氏とで、仕様やレジスタマップが明示されてないソースコードから、原因箇所の特定を進められていました。
0x00じゃなくて0x70書き込むとスワップ有効になる気がします。
— Kenta IDA (@ciniml) May 30, 2024
Turns out, in lt8618sxb_mcu_config, the register configurations are wrong.https://t.co/CGD2NMge7N
— memetan (@dollychun) May 30, 2024
HDMI_WriteI2C_Byte(0x45,0x00);
Should be
HDMI_WriteI2C_Byte(0x45,0x70);
To enable channel swap.
対策導入
HDMIの色ズレ発見から、一日後、@memetan 氏よりM5Stackへ変更箇所が提示なされました。
Fixing
— M5Stack (@M5Stack) May 30, 2024
その日、lt8618sxbのソースコードに修正が入り、対策が導入されました。
感想
オープンソースコミュニティの協力的な問題解決プロセスを感じました。特に、ツヨツヨユーザーといえる@memetan氏と@ciniml氏が技術的な知見を提供し、最終的にM5Stackが迅速に対応するという流れは、効果的なコミュニティ協働といえるでしょう。レジスタマップや仕様は公開されていないという制約がある中で、ツヨツヨユーザーが経験と知識を活かしてソースコードから問題の原因を特定できた点が印象的でした。
参考リンク