tomi_vhi
2023年8月1日 11時07分
渡邊です。
立ち上げ画面のロゴを変更して表示はできたのですが、どうもかなり画面が乱れてしまします。(添付参照)
色々と画面関係の設定を変更したのですが解決できていません。
(立ち上がりきれば、ほぼ画像は乱れなくなるが、やはりたまに線が出る)
何が考えられるでしょうか?
ファイル | ファイルの説明 |
---|---|
立上げ.jpg |
コメント
at_mizo
溝渕です。
> 立ち上げ画面のロゴを変更して表示はできたのですが、どうもかなり画面が乱れてしまします。(添付参照)
> 色々と画面関係の設定を変更したのですが解決できていません。
> (立ち上がりきれば、ほぼ画像は乱れなくなるが、やはりたまに線が出る)
>
> 何が考えられるでしょうか?
https://armadillo.atmark-techno.com/guide/site/forum
上記に記載の通り、質問内容を具体的に書いていただけるとアドバイスしやすいです。
https://armadillo.atmark-techno.com/forum/armadillo/15915
前提としては上記の件でしょうか?
png_displayを起動スクリプト(rc.local等)で実行していますか? また、起動スクリプトの内容はどのようなものですか?
tomi_vhi
渡邊です。
>前提としては上記の件でしょうか?
下記の2つが絡むと思います。
https://armadillo.atmark-techno.com/forum/armadillo/15514
https://armadillo.atmark-techno.com/forum/armadillo/16369
下記はあまり関係ないかもしれません。
https://armadillo.atmark-techno.com/forum/armadillo/15915
LCDまわりのH/W構成は下記の通り。
Armadillo-460 のLCDコネクタ端子からFFCで、自作のLVDS変換基板に接続。
変換基板上にはDS90C385AのLVDS変換チップがあり、
変換後のデータをTM104SDH01(Tianma)のLCD(800x600)にLVDSで接続して使用。
解像度設定は下記の通り。
mxcfb_modedb.c
"G104AGE_L02", 60, 800, 600, 25000, 114, 112, 10, 15, 30, 3,
0, /* sync */
FB_VMODE_NONINTERLACED, /* vmode */
0, /* flag */
(G104AGE-L02 と TM104SDH01 はデータシート上互換性あり)
基本的に、上記のH/W環境と解像度設定で行っています。
画像の乱れは png_display と Xfbdev を動かしていない状態でも発生しているので、これらは関係ないかもしれません。
(アルマジロのロゴを差し替えた際に発生したと思っておりましたが。その後小さいアルマジロのロゴに戻した状態でも発生していることがわかりました。)
このような内容で分かりますでしょうか?
よろしくお願いいたします。
at_mizo
溝渕です。
> このような内容で分かりますでしょうか?
了解です。
https://armadillo.atmark-techno.com/forum/armadillo/16486
で描画したロゴが乱れるという意味ですね。
Armadillo-460に搭載のSoC(i.MX257)の仕様では、Pixel clock periodは最小22.5nsなので、Pixel clockは最大約44.4MHzとなります。
TM104SDH01の現在の設定だと、Pixel clockは約39.8MHzなので問題無さそうですね。
ただ、ユーザーランドから画面描画しない(Linux kernelで描画し続けている)状態でも画面の乱れが生じるとのことで、これだけを考えると(CPU処理能力の可能性は低く、)バス関連の問題かなとは思います。
なので、問題切り分けの為に、現在60fpsとしているframe rateを一旦30fpsにして動作確認してみてもらえますか?
ちなみにですが、Armadillo <-> LCD間にノイズ等は乗らない事は確認できていますか?
tomi_vhi
渡邊です。
>描画したロゴが乱れるという意味ですね。
起動時に表示させたロゴが乱れます。
正常に表示されているロゴの所々に短い横線がまばらに入るイメージです。
同期ズレのようには見えません。
"G104AGE_L02", 60, 800, 600, 25000, 114, 112, 10, 15, 30, 3, の60になっている所でしょうか?
これを30に変えてもfbsetに変化はありませんでした。
(画面の乱れも変わらず)
60、30のとき、どちらも下記のfbsetの表示
mode "800x600-60" # D: 40.000 MHz, H: 37.879 kHz, V: 60.317 Hz geometry 800 600 800 1200 16 timings 25000 114 112 10 15 30 3 accel false rgba 5/11,6/5,5/0,0/0 endmode
ちなみに解像度を800x480に変えても変わりませんでした。画面が乱れます。
(画面は 800x480 表示になる。 fbset でも 800x480 になる)
よろしくお願いいたします。
at_mizo
溝渕です。
> "G104AGE_L02", 60, 800, 600, 25000, 114, 112, 10, 15, 30, 3, の60になっている所でしょうか?
> これを30に変えてもfbsetに変化はありませんでした。
> (画面の乱れも変わらず)
各フィールドの意味は次の通りです。
include/linux/fb.h: struct fb_videomode { const char *name; /* optional */ u32 refresh; /* optional */ u32 xres; u32 yres; u32 pixclock; u32 left_margin; u32 right_margin; u32 upper_margin; u32 lower_margin; u32 hsync_len; u32 vsync_len; u32 sync; u32 vmode; u32 flag; };
"optional"となっている通り、恐らくこの値は使われません(または参考値として扱われます)。恐らくpixclockの部分の変更が必要だと思います。
tomi_vhi
渡邊です。
pixclock は、25000 ps => D: 40.000 MHz の部分だと思います。
因みに32895 ps => D: 30.4 MHz (LCDのMin値は 30MHz) でも画像は乱れます。
pixclock = 32895 のとき下記のようになりました。
mode "800x600-46" # D: 30.400 MHz, H: 28.788 kHz, V: 45.840 Hz geometry 800 600 800 1200 16 timings 32895 114 112 10 15 30 3 accel false rgba 5/11,6/5,5/0,0/0 endmode
午後からオシロが借りれるのでLCDデータの波形を確認してみます。
よろしくお願いいたします。
tomi_vhi
at_mizo
tomi_vhi
at_ohsawa
tomi_vhi
渡邊です。
色々試しましたが、状況は変わっていません。
下記のことが判明しておりますが、下記から何かわかりますでしょうか?
・同じLDE信号の仕様の別のLCD(TM121SDSG05 V1.0)に接続しましたが、症状は全く同じ。
・22MHzまでクロックを落とすと、症状はなくなる。(LCDのMINは 30MHz なので実力で動いている)
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
console.png |
at_ohsawa
tomi_vhi
渡邊です。
LVDS側の波形と、LVDS周辺の電源の波形を撮りましたので添付します。(クロックは、40MHz)
測定個所は、LCDケーブルに接続するコネクタ部分です。
(LVDS側の波形は、マイナス側をGNDとしてプラス側を測定)
前回から変えたところがあります。
5V電源に33uF、3.3V電源に22uFの電解コンデンサをそれぞれ追加しています。
また、LVDS出力(LVDS transmitter IC)とコネクタ部分までのクロックとデータライン3つは、
できるだけ同じ長さにして、差動信号同士でツイストして接続するように変更しています。
上記の対策をしましたが症状は変わっていません。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
wave.png |
at_ohsawa
電源のノイズは目立ってなさそうですね。
しかし信号側がかなり鈍っているようです。オシロのサンプリング能力が十分か不明なのと、
同期して測定していないのでなんとも言えませんが、LVDS基板を依然基板をバラックで
組んでいるいるのであれば、信号品質的に鈍ったことでクロックと同期が取れてない
可能性がありそうです。
クロックを下げた場合に緩和されるのも、立ち上がり時間に余裕が出るからと考えると可能性が高いです。
(ただ前述の通りオシロの能力が十分か不明なのと、クロックと信号を同期して取っていないので仮定です)
dot clock30MHzとして、1clock中に7bit転送する場合の転送速度は210MHzになるので、インピーダンス
整合された基板を使う必要がありそうです。
tomi_vhi
tomi_vhi
渡邊です。
どうも、ドットクロックを25MHzに設定した場合は、30MHzに勝手に変わって出力されるようです。
クロックとデータを同時に測定しました。
黄色がLVDS_CLK+、青色がLVDS_OUT0+です。
(前回の写真のプローブの状態で使用。プローブのGNDは、近くのGNDに接続)
左(クロック30MHz)が画面の乱れ発生、右(クロック24MHz)が画面の乱れなしの状態です。
立ち上がり切ると、立上げ時の画面を出しても乱れが極端に少なくなるので、LVDS側の問題であるかいまだに疑問を持っています。
これらから何が原因であるかわかりますでしょうか?
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
cs.png |
at_matsuzaka
松坂です。
すみません、ノイズの影響ではないようです。
hakei.jpgを見るとドットクロックが早すぎるため、本来矩形波のところが正弦波になってしまっているようです。
そのためタイミングがずれ、画面の乱れが発生しているものと思われます。
Armadillo-460では、SoCのLCDインターフェースピンとFFCコネクタの間にノイズ低減のための33Ωのダンピング抵抗がシリーズ接続されています。
その影響と配線経路上のキャパシタンスにより正弦波になっているものと思われます。
Armadillo-460側でダンピング抵抗を調整することができないため、現状はドットクロックを落として使用していただく必要があります。
大変申し訳ありません。
at_matsuzaka
tomi_vhi
at_matsuzaka
松坂です。
確認ありがとうございました、お手数かけてすみませんでした。
こちらで未接続時のドットクロック40MHzの波形を確認したところ添付画像となりました。
(SoCから見てダンピング抵抗後で測定)
LVDS変換ICには、極力この波形の状態で入力できるよう、回路等のご検討をお願いいたします。
・FFCケーブル含め可能な限り短く配線していただく
・LVDS変換IC付近でバッファを挿入し、波形を成形し直していただく等
以上、宜しくお願いいたします。
ファイル | ファイルの説明 |
---|---|
2023-08-30_08h25_12.png | ダンピング抵抗後のLSCLK 40MHz波形 |
tomi_vhi
渡邊です。
LCD_LSCLK(DCLK)、LCD_HSYN(HSYNC)、LCD_VSYN(VSYNC)、LCD_OE_ACD(DE) の信号部において、
LVDS のICの手前側(コネクタの近く)にバッファを入れましたが、現象は変わりませんでした。
LCD_LSCLK(DCLK) 以外は、前回とあまり変わりません。
波形はバッファの出力部で撮っています。(DCLK は形が違ったので入力部も撮影しました)
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
lcx244.png |
at_matsuzaka
松坂です。
> LVDS のICの手前側(コネクタの近く)にバッファを入れましたが、現象は変わりませんでした。
変わらないということは、SoC側が出している波形自体が、LVDSトランスミッタが要求するCLK仕様から外れている可能性があります。
LVDSトランスミッタは、CLK信号を元にPLL回路でLVDS送信のタイミングを生成しているため、一般的なロジック回路と比べ電源ラインに乗るノイズやクロックの仕様が厳しいです。
LVDSトランスミッタの仕様をご確認いただき、実際のCLKデューティー比などがICの仕様内に収まっているかどうかご確認をお願いします。
tomi_vhi
渡邊です
> 変わらないということは、SoC側が出している波形自体が、LVDSトランスミッタが要求するCLK仕様から外れている可能性があります。
LVDSトランスミッタ(DS90C385A)のデータシートを見てみました。
ドットクロックですが、High、Low 共に 0.35T(MIN)、0.64T(MAX) と書かれています。(Typ は 0.5T)
実際のクロック(40MHz)は、ざっくり調べたところ Low 側が 0.28T、High 側が 0.72T と、High 側が長く出力されているように見えます。
(つまりは範囲から外れている)
なぜ、このような歪なクロックになっているのでしょうか?
また、30MHz でもNGなのですが、こちらは0.35T~0.65Tの範囲に入っています。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
dclk_30mhz.jpg |
at_matsuzaka
松坂です。
> なぜ、このような歪なクロックになっているのでしょうか?
imx25の仕様と思われます。
クロックの分周(PCD)を偶数(1/2, 1/4..)にしないとデューティ比が崩れてしまうようです。
NXP Communityを確認したところ、以下の情報を見つけました。
■How to change Duty of LSCLK of i.MX25
https://community.nxp.com/t5/i-MX-Processors/How-to-change-Duty-of-LSCL…
カーネルのソースコードから、ドットクロックの元になるクロックが120MHzになっており、
そこから分周しており40MHzと30MHzの場合でデューティ比に違が出るようです。
LSCLK=40MHzの場合は、120MHzの1/3(奇数)のため、デューティ比が崩れてしまう
LSCLK=30MHzの場合は、120MHzの1/4(偶数)のため、デューティ比が崩れない
tomi_vhi
at_matsuzaka
松坂です。
> 画面が乱れる原因は何が考えられますか?
LSCLKにパルスの欠損やジッタは発生していないでしょうか?
LVDSコンバータはLSCLKのパルスを元にPLL回路でLVDSのためのクロックを生成しているため、
LSCLKには「絶えず」「正確に」発振してもらうことが必要になります。
下記NXPフォーラムのスレッドにも記載されているような、LSCLKの欠損や、LSCLKのジッタが発生してしまうとLVDSコンバータのPLL回路の動作に影響が出る可能性があります。
https://community.nxp.com/t5/i-MX-Processors/About-dropout-of-LSCLK-of-…
https://community.nxp.com/t5/i-MX-Processors/AA104SH02-T1-display-probl…
tomi_vhi
at_matsuzaka
松坂です。
確認していただいた状況からしますと、パラレルRGB側の信号は問題となるようなところはなさそうですね。
そうなりますと、LVDSトランスミッタの回路、LVDSケーブル、LCDモニタ側で問題が発生している可能性があります。
おもに問題になりやすい箇所は
* 配線
* 電源品質
になります。
配線は、今よりも短くしていただく、LCDパネルとLVDS回路間の電源ラインを強化していただくなど、
LCDモニタに供給している電源、LVDSトランスミッタに供給している電源をArmadilloからではなく、
安定化電源などに切り替えた場合に症状は改善しないかなど、ご確認をお願いいたします。
at_matsuzaka
tomi_vhi
tomi_vhi
tomi_vhi
at_matsuzaka
松坂です。
> LVDSケーブル、LCDモニタは、元々繋いでいたCPU基板に繋ぐと正常に表示するので、この2つは問題ないと思います。
ほかの装置とのつながりでは問題ないとすれば、正常に動作する構成と今回の構成で違う部分が影響している可能性があります。
* LVDSケーブルに印加する信号(LVDSトランスミッタICが違ったり、ICに供給する電源品質、信号電圧)の違い
** ICを同じものに変えてみる
** ICに供給する電源をArmadillo-460の3.3Vではなく、安定化電源に変えてみる
** 電源に接続するバイパスコンデンサはICの動作周波数に見合った周波数特性のものを使う
* LVDS変換回路の構成(インピーダンスコントロールされたプリント基板上での配線または手配線のユニバーサル基板)の違い
* LCDモジュールに供給する電源経路の違い
** LCDモジュールに供給する電源を安定化電源に変えてみる
ドットクロックを上げるとNGとなることから、LCDモジュールまでの信号経路のどこかにそのクロックだと耐えられない部分などがあるのではと思われます。
tomi_vhi
at_matsuzaka
tomi_vhi
at_mizo
溝渕です。
今迄の内容を纏めると、以下の場合に乱れが減少しています。
- OSが立ち上がりきった後
- ドットクロックを下げた場合
以上より、DRAMの帯域不足またはバス調停の問題によって乱れが生じている可能性があります。
いくつか対策が考えられます。LCD以外のデバイスを極力動かさないという方針で、以下を試してみてください。
- USBデバイスを接続している場合は抜いてみる
- 起動スクリプトを減らす(Ethernetの設定等)
- その他、動作するアプリケーション(デーモン含む)を減らす
もしこれで状況が改善するならば、ハードウェア(波形等)が問題である可能性は非常に低くなります。
また、バス調停に関し、LCDの優先度を上げる事ができます。
Armadillo を保守モードで起動して、次のように起動してください。
hermit> frob hermit:frob> poke 0xb8003000 0x00000001 hermit:frob> peek 0xb8003000 *0xb8003000 == 0x00000001 hermit:frob> q hermit> boot
LCDコントローラが優先調停されるようになるので、乱れが改善される可能性があります。
at_mizo
溝渕です。
もう1点、LCDコントローラのDMA関連設定値が(帯域確保を目的とした場合に効率が)良く無い可能性があります。
添付のパッチをLinuxカーネルに適用し、画面の乱れが改善されないか確認していただけますか?
ファイル | ファイルの説明 |
---|---|
linux-2.6.26-at31_mx2fb.patch |
tomi_vhi
at_mizo
溝渕です。
> このパッチを充てると、他に何か悪影響は出ないでしょうか?
恐らく無いかと思います。
DMAバースト長が長くなって効率的にDMAを行うことができるようになる事で、今迄underrunが生じていた分のデータも送信できるようになりました。そうなるとLCDが占有する帯域が太くなり、他の帯域は相対的に細くなる可能性があります。
LCD同等の応答性能を必要とする機能を利用している場合は、そちらの方で問題が生じるかもしれません。
パッチの妥当性については、mainlineのLinuxカーネルでは該当レジスタはユーザーが任意の値に設定可能となっている為、変更する事については問題無いと判断しています。
tomi_vhi
tomi_vhi
2023年8月1日 11時14分
渡邊です。
すみません。製品を選択し忘れました。
Armadillo-460 です。