CoreMP135のHDMIについての思い出

## 目的
M5Stackから本年の4月に発売されたCoreMP135について、HDMIの思い出を振り返ります。


## M5stack CoreMP135の発売

4月の最終週、M5Stackと似たような形で、液晶やスピーカ、USB等のインターフェイスを備えたLinuxデバイス、CoreMP135が発売されました。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">📣Friday New Arrival:<br>M5Stack CoreMP135 - the compact and powerful <a href="https://twitter.com/hashtag/SBC?src=hash&amp;ref_src=twsrc%5Etfw">#SBC</a>, powered by <a href="https://twitter.com/ST_World?ref_src=twsrc%5Etfw">@ST_World</a> <a href="https://twitter.com/hashtag/STM32MP135D?src=hash&amp;ref_src=twsrc%5Etfw">#STM32MP135D</a>, with IPS LCD, versatile ports, flexible power supply and installation methods. Ideally applied for <a href="https://twitter.com/hashtag/IIoT?src=hash&amp;ref_src=twsrc%5Etfw">#IIoT</a> Control, <a href="https://twitter.com/hashtag/HomeAutomation?src=hash&amp;ref_src=twsrc%5Etfw">#HomeAutomation</a>, <a href="https://twitter.com/hashtag/HMI?src=hash&amp;ref_src=twsrc%5Etfw">#HMI</a>.<br><br>For more: <a href="https://t.co/aEo1S1Ojwq">https://t.co/aEo1S1Ojwq</a> <a href="https://t.co/KQmgle7oEi">pic.twitter.com/KQmgle7oEi</a></p>&mdash; M5Stack (@M5Stack) <a href="https://twitter.com/M5Stack/status/1783774837175140407?ref_src=twsrc%5Etfw">April 26, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## HDMIの色ずれが見つかる。

発売して少し経った5/29、当方がHDMIとつなげてみたところ、Red Green Blur の色のうち、RedとBlueが逆になって色ずれしていることが見つかりました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/CoreMP135?src=hash&amp;ref_src=twsrc%5Etfw">#CoreMP135</a> で、DisplayPortとLCDにfbiでカラーバーを出すと、色がずれている( ;∀;)<br>color_bar:<a href="https://t.co/KL98m0jf6u">https://t.co/KL98m0jf6u</a> <a href="https://t.co/jTtfHF7X1c">pic.twitter.com/jTtfHF7X1c</a></p>&mdash; nnn (@nnn112358) <a href="https://twitter.com/nnn112358/status/1795632180200432036?ref_src=twsrc%5Etfw">May 29, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 


同日、@memetan 氏もHDMIの色ずれを見つけていました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">CoreMP135のHDMI-TX、RedとBlueが反転してるのは自分の改造の問題?<br><br>ただそれの確認のためだけにSD書き換えるのめんどいー <a href="https://t.co/Ysdceax4Vt">pic.twitter.com/Ysdceax4Vt</a></p>&mdash; memetan (@dollychun) <a href="https://twitter.com/dollychun/status/1795734371154252238?ref_src=twsrc%5Etfw">May 29, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## 原因究明

HDMIの色ずれ発見の5日前、CoreMP135のHDMIトランスミッターLT8618sxbを制御するソースコードが公開されていました。しかし、LT8618sxbの仕様やレジスタマップは公開されていません。M5Stackとlt8618sxbを製造するメーカーと間に機密保持の関係があるようで、一般ユーザーには公開できないようです。

そのため、公開されているLT8618sxbのドライバ実装コードを読んでも、一見、正体不明のレジスタに正体不明の値を書き込んでいるように見えるため、何をしているのかよくわかりません。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">CoreMp135の、lt8618sxb_mcu_configのコードが公開されていた。<a href="https://t.co/3Dgp93rOHv">https://t.co/3Dgp93rOHv</a></p>&mdash; nnn (@nnn112358) <a href="https://twitter.com/nnn112358/status/1793906131921944697?ref_src=twsrc%5Etfw">May 24, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

ここから、@memetan氏の調査が始まりました。ここで、試行錯誤した結果からM5Stackへ問い合わせを行っておられました。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/M5Stack?ref_src=twsrc%5Etfw">@M5Stack</a> The HDMI output on CoreMP135 has Red and Blue channel flipped.<br><br>I&#39;m suspicious of HDMI transmitter being configured to receive BGR data.<br><br>I just fixed this problem by telling LTDC to output BGR for RGB buffer, which is not best way to fix.<br><br>Could you take a look at it?</p>&mdash; memetan (@dollychun) <a href="https://twitter.com/dollychun/status/1796065952519409862?ref_src=twsrc%5Etfw">May 30, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

@memetan 氏の問い合わせに対して、@ciniml 氏が参戦されました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">たぶんバンク0x82の0x45のレジスタの値を修正すれば、チャネルスワップの状態変えられると思う。<br>0xffに0x82書いてバンク切り替え、その後0x45に値を書く。<a href="https://t.co/9PK0dbSFIN">https://t.co/9PK0dbSFIN</a> <a href="https://t.co/QykdF20Y1d">https://t.co/QykdF20Y1d</a></p>&mdash; Kenta IDA (@ciniml) <a href="https://twitter.com/ciniml/status/1796068254600814990?ref_src=twsrc%5Etfw">May 30, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

@memetan氏と@ciniml氏とで、仕様やレジスタマップが明示されてないソースコードから、原因箇所の特定を進められていました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">0x00じゃなくて0x70書き込むとスワップ有効になる気がします。</p>&mdash; Kenta IDA (@ciniml) <a href="https://twitter.com/ciniml/status/1796069623848222821?ref_src=twsrc%5Etfw">May 30, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Turns out, in lt8618sxb_mcu_config, the register configurations are wrong.<a href="https://t.co/CGD2NMge7N">https://t.co/CGD2NMge7N</a><br><br>HDMI_WriteI2C_Byte(0x45,0x00);<br><br>Should be<br><br>HDMI_WriteI2C_Byte(0x45,0x70);<br><br>To enable channel swap.</p>&mdash; memetan (@dollychun) <a href="https://twitter.com/dollychun/status/1796075121829970057?ref_src=twsrc%5Etfw">May 30, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 対策導入

HDMIの色ズレ発見から、一日後、@memetan 氏よりM5Stackへ変更箇所が提示なされました。


<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Fixing</p>&mdash; M5Stack (@M5Stack) <a href="https://twitter.com/M5Stack/status/1796082124635975915?ref_src=twsrc%5Etfw">May 30, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

その日、lt8618sxbのソースコードに修正が入り、対策が導入されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73020/89666d08-c485-45df-1bf1-6a87623a51d0.png)

https://github.com/m5stack/M5Stack_Linux_Libs/commit/e7cf5787bd4f9206ec88721b54c44f59a6b3f72c


## 感想

オープンソースコミュニティの協力的な問題解決プロセスを感じました。特に、ツヨツヨユーザーといえる@memetan氏と@ciniml氏が技術的な知見を提供し、最終的にM5Stackが迅速に対応するという流れは、効果的なコミュニティ協働といえるでしょう。レジスタマップや仕様は公開されていないという制約がある中で、ツヨツヨユーザーが経験と知識を活かしてソースコードから問題の原因を特定できた点が印象的でした。


## 参考リンク

https://github.com/nnn112358/CoreMP135_framebuffer_OpenCV/