[Armadillo:07439] Re: Armadillo-440 :異なる解像度(SVGA)のLCD接続について

Takenoshita Koyo email@hidden
2011年 7月 29日 (金) 15:49:59 JST


竹之下です。

> お手数ですが、この内容で合っているか?確認していただけますでしょうか?
合っていると思います。

以下、検算です。

> 次のURLにあるHowtoを参照しています。
> http://armadillo.atmark-techno.com/howto/a440-custom-lcd-and-touch-panel
同じ事例なのですが、「Armadillo実践開発ガイド 第3部」により詳しい解説があります。
http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-3_ja-2.1.0/ch02.html#__18

基本的には、データシートの値を「図2.100 LCDパネルタイミング情報の計算式」に当てはめていけば良いです。
> ドットクロック = 水平同期周波数 × (水平解像度 + 左マージン + 右マージン + 水平同期期間) ・・・(式1)
> 水平同期周波数 = 垂直同期周波数 × (垂直解像度 + 上マージン + 下マージン + 垂直同期期間) ・・・(式2)

データシートの書き方が各社マチマチなので、どの数値をどこに当てはめれば良いか
毎回悩みますが、今回は以下のようになるでしょう。

項目				データシート記載の値	struct fb_videomodeのメンバ名	値
ドットクロック(fCLK=1/tCLK)	40[MHz]			pixclock			25,000[pico_secs/clock]
水平同期期間(tH)		[tCLK]			なし
水平解像度(tHA)			800[tCLK]		xres				800[clock/line]
水平同期期間(tHB)		256[tCLK]		hsync_len			256[clock/line]
左マージン			記載なし		left_margin			0[clock/line]
右マージン			記載なし		right_margin			0[clock/line]
垂直同期周波数(fV)		60[Hz]			refresh				60[frame/sec]
垂直解像度(tVA)			600[tH]			yres				600[line/frame]
垂直同期期間(tVB)		28[tH]			vsync_len			28[line/frame]
上マージン			記載なし		upper_margin			0[line/frame]
下マージン			記載なし		lower_margin			0[line/frame]

これを、式2に当てはめると以下のようになります。
水平同期周波数 = 垂直同期周波数×(垂直解像度 + 上マージン + 下マージン + 垂直同期期間)
               = 60[frame/sec] * (600[line/frame] + 0 + 28[line/frame] + 0)
               = 37,680 [line/sec]

さらに、式1に当てはめると以下のようになります。
ドットクロック        = 水平同期周波数×(水平解像度 + 左マージン + 右マージン + 水平同期期間)
40[MHz]               = 37,680 [line/sec] * (800[clock/line] + 0 + 0 + 256[clock/line])
40,000,000[clock/sec] ≒ 39,790,080 [clock/sec]

最終的な計算結果は、水口さんのものと同じです。

> ここで、ひとつ質問です。
> 上記配列のhsとvsの項ですが、コメント行と数値が合ってないように思われま
> す。
> もし、コメントの順であれば、参照値では160,45になるのでは?
> ここを間違うと画像が流れてしまいそうです。
> 確認をお願いします。
逆ですね。。
間違いです。

> その他、マージンおよびsync/flagについての考え方についてもお聞かせいただきた
> く(多分このままでいいと思いますが)。
マージンは、フロントポーチ/バックポーチとも呼ばれるものです。
アナログな表示器(CRTなど)の時代には、綺麗に/正しく表示されるように
フロントポーチ/バックポーチの期間に色々と工夫していたみたいです。
(すみません、このあたりのことについては詳しくないです。)

同期・映像表示の基礎
http://www.geocities.jp/dvid_direct/main_900.html

最近のLCD(液晶)では、フロントポーチ/バックポーチについては
記載がないものが多いので、0としています。

syncには、同期信号の特性を指定します。水平/垂直同期信号が共にアクティブ・
ローの場合は、0のままで構いません。水平同期信号がアクティブ・ハイの場合は、
FB_SYNC_HOR_HIGH_ACT を指定します。その他指定可能な値は、
linux-2.6.26-at/include/linux/fb.h に一覧があります。

flagは、使用していないので何も設定しないで構いません。

なお、struct fb_videomode mxcfb_modedb[] にメンバを追加した場合、
忘れずに struct mxcfb_mode_disp mxcfb_mode_disp_db[] にもメンバを
追加してください。「Armadillo実践開発ガイド 第3部」には、こちらに
ついても説明があります。

(2011年07月29日 10:09), Masahiko Mizuguchi wrote:
> お世話様です。東静電気の水口と申します。
> 今回初めて組込みlinuxを扱います(WebサーバーではLinuxを使用していますが)。
> 
> Armadillo-440にSVGA(800x600)のLCD接続を試みています。
> 当方、S/W担当のため、カーネルのビルドについての情報収集中です。
> 下記に当方の理解と、導いた数値を記載しました。
> お手数ですが、この内容で合っているか?確認していただけますでしょうか?
> 
> 
> 次のURLにあるHowtoを参照しています。
> http://armadillo.atmark-techno.com/howto/a440-custom-lcd-and-touch-panel
> 
> 
> 自分の理解としては、次のとおりかと。
> 
> 1:クロックから、1ドットあたりのpS(ピコ秒)を出しておく。
> 今回は40MHzでしたので、25000ps/dotになります。
> 
> 
> 2:クロックから1秒あたりの総ドット数を出しておく。
> 使用するLCDのスペックから、クロックを拾い、1秒あたりに処理できる総ドット数
> を求めておきます。
> これは、次のステップ以降でチェックのために参照します。
> 今回は40MHzでしたので、40,000,000dot/Secになります。
> 
> 
> 3:ドット数をSpecから拾っておく。
> 今回は800x600のLCDですので、表内のH方向のDisplayperiodは800、V方向は600とな
> ります。
> 後、Non-DisplayのH/V方向ドットについては、LCDのスペックの該当する項目から取
> 得します。
> (今回は、H:256、V:28という数字を見つけました)
> 
> 
> 4:一画面の画素数にリフレッシュレートを掛けて、1秒間の総処理画素数を取得す
> る。
> (3)の数値の表示・非表示のドットをそれぞれH/Vで足した数字を用意します。
> 今回は、H:1056(=800+256)、V:628(=600+28)と算出しました。
> これをH*Vで計算すると、次の数字になります。
> 663,168(=1056*628)
> 
> LCDのスペックからリフレッシュレートを探します。
> 今回は60Hzでした。
> 
> これら数値から、1秒間の総処理画素数を算出します。
> 39,790,080(=663168*60)
> この数値が(2)の数値に収まり、なおかつ差が少ないことを確認します。
> 問題ない数値と判断しました。
> 
> 
> 5:これら数値をカーネルビルドの配列要素に置き換える。
> 参照URLにあった配列の各要素に導いた数値を置いてみました。
> {
>          /* name                           rfsh xres yres dotclk lm rm um lm
> hs  vs */
> //      "FG100410DNCWBGT1",   60, 640, 480, 39683, 0, 0, 0, 0, 45, 160,
>           "Name(TBD)",                   60, 800, 600, 25000, 0, 0, 0, 0,
> 28, 256,
>          0, /* sync */
>          FB_VMODE_NONINTERLACED, /* vmode */
>          0, /* flag */
> },
> 
> ここで、ひとつ質問です。
> 上記配列のhsとvsの項ですが、コメント行と数値が合ってないように思われま
> す。
> もし、コメントの順であれば、参照値では160,45になるのでは?
> ここを間違うと画像が流れてしまいそうです。
> 確認をお願いします。
> その他、マージンおよびsync/flagについての考え方についてもお聞かせいただきた
> く(多分このままでいいと思いますが)。
> 
> 
> なお、上記数値を導くのに使用したスペックの一部を添付します(数値は標準値を使
> 用)。
> (See attached file: 信号タイミング表_20110727.JPG)
> 
> 以上
> 
> 水口@東静電気
> 
> 
> 
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo


-- 
Koyo Takenoshita




armadillo メーリングリストの案内