FC2カウンター FPGAの部屋 MT9D111のお勉強6
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

MT9D111のお勉強6

MT9D111のお勉強5で大体、MT9D111の勉強は良いかな?と思ったのだが、おるさんに教えていただいて、まだまだ理解が足りないことがわかった。もう少し勉強してみたいと思う。

Start-Up and Usage (148ページ)
スタートアップシーケンスを下に示す。
 1. Power-up
 2. Hardware reset
 3. Configure and enable PLL
 4. Configure pad slew rate
 5. Configure preview mode
 6. Configure and enable auto focus
 7. Configure capture mode
 8. Perform lock or capture

1.は電源ONしたということだ。

2.Hard Reset Sequence (149ページ)
電源ONの後はリセットする必要がある。電源が安定したらRESET#(アクティブ・ロー)をアサートする。RESET#をリリースしてから、24クロック後にI2Cがコマンドを受けられる状態になる。
 1.すべての電源が規格内に入ってくるまで待つ
 2.クロックを入力
 3.RESET# (active LOW)を少なくとも1us の間アサートする
 4.RESET# (active LOW)をディアサート(クロックは入れておく)
 5.24クロック後にI2Cインターフェースが使用可能になる。

下にFigure 33を引用する。
MT9D111_8_121219.png

2.Soft Reset Sequence (150ページ)
 1.もしPLLを使っていれば、PLLをバイパスする。(R0x65:0=0xA000, PLL Bypass, Power-down PLL During Standby, 通常の場合はPLLがPower-downしない設定になっている)
 2.R0xC3:1=0x0501 を設定して、MCUリセットを実行する。(bit0 が reset microcontroller.)
 3.R0x0D:0=0x0021 に設定することでソフトリセットをイネーブル。Bit5のReset SOC とBit0の sensor core reset を行う。
 4.R0x0D:0=0x0000 に設定することで、リセットをディスエーブル。
 5.24クロック後にI2Cインターフェースが使用可能になる。

3.Enable PLL
入力クロックがどうなっているかわからないので、デフォルトではPLLはディスエーブルされている。PLLはM,N,Pの値で出力周波数が決定される。
 1.PLL出力周波数を設定する。(R0x66-67:0 M, N, Pを設定)
 2.PLLの電源ON。(R0x65:0[14] = 0)
 3.PLLのセットリング時間( > 150us)待つ。
 4.PLLバイパスを解除する。(R0x65:2[15] = 0)

4.Configure Pad Slew (151ページ)
DOUT, PIXCLK, FRAME_VALID, and LINE_VALID、SDATA and SCLKのスルーレートを R10:1 で指定する。

5.Configure Preview Mode
デフォルトのプレビューのイメージサイズは800x600で、80MHzの内部クロックで30fpsで動作する。mode.output_width_A と mode.output_height_A (ファームウエアのID = 7)を変更し、seq.cmd=5 (ファームウエアのID=1, Offs=3, 値5)のREFRESHコマンドを発行することでサイズを変更できる。(プレビューはスキップ1で1画素ずつスキップしている)
例として、160x120 LCD RGBのプレビュー画面を設定する。
 • mode.output_width_A=160
 • mode.output_width_B=120
 • mode.out_format_A=0x20
 • seq.cmd=5
プレビューコントラスト、明るさ、ガンマ、フレームレート、および多くの他のパラメータもここでロードすることができます。この時点で既知である場合、ユーザーは、キャプチャのパラメータをプログラムすることができます。必要であれば、ここで、AE / WB/ AFロックコマンドを設定します。

7.Configure Capture Mode
キャプチャーのパラーターがわかっていれば(ビデオ、静止、圧縮、解像度)、modeとother drivers を設定する。

8.Perform Lock or Capture
Figure 32を引用する。
MT9D111_9_121219.png

・Sequencer Driver
 ・シーケンサ = ステートマシン
 ・preview, capture などの状態を持つ。
 ・シーケンサは previewing, preview lock, capture, などの処理を実行している。
 ・シーケンサに特定の処理を実行されるためには、cmd内のプログラム番号を設定する。
 ・解像度を変更および/またはフレームをキャプチャする時に、ホストはステートをモニタする必要がある。
 ・各ステートの構成は、 (see "Firmware Driver Variables" on page 68)
 ・プログラムを実行する前に、プログラムをカスタマイズするためにステート設定を設定する。例えば、圧縮されたフレームをキャプチャーするために、captureステート設定で圧縮をイネーブルする。

通常のシナリオを下に示す。
 1.ハードウェア・リセット後のモード変数設定
  a.プレビュー用センサ・イメージ・サイスの設定
  b.ディスプレイ・イメージ・サイズの設定
  c.FIFO to smooth data rate の設定
 2.プレビュー・モードの設定
  a.自動露出、自動ホワイト・バランス、オート・フォーカス速度のセット
 3.センサ・リフレッシュ・コマンドの実行
 4.シャッターボタンを押されるまでのプレビューで動作
  a.シャッターボタンを半押しした時は、ロック・プログラムを実行
   i. previewステートでの設定で、自動露出、自動ホワイト・バランス、オート・フォーカスをディスエーブル
   ii.高速設定のためにPreviewLeaveステートで設定を行う
   iii.ロック・プログラムを実行
   iv.PreviewLeaveステートを通ったロック・プログラムは、ロックを実行して、Previewステートに遷移する
  b.シャッターボタンが押されたら、キャプチャー・プログラムを実行する
   i.すでにロックモードだったら、PreviewLeaveステートをディスエーブルして、キャプチャー・プログラムを実行する
   ii.ロックステートではなく、オート・フォーカスなどの幾つかの設定が必要な場合は、PreviewLeaveステートで設定する
   iii.キャプチャー・プログラムを実行する。PreviewLeaveへの遷移は、設定を実行して、キャプチャーへのモード変更を進める
 5.Captureフレーム
  a.イメージ・サイズ、圧縮、ビデオか写真かなどのキャプチャー・モード変数は設定されている
  b.フレームを取得するキャプチャー・ステートの時は、ステート変数をモニタする
オプションで、 Capture Enter or Preview Leaveでブランクの出力をすることが出来る。これは、キャプチャーのために正しいフレームを取得する助けになる。

・ステートマシンの遷移は、Driver Variables−Sequencer Driver (ID = 1) Offs = 3 (cmd)(70ページ)
 0 — Run
 1 — Do Preview
 2 — Do Capture
 3 — Do Standby
 4 — Do lock
 5 — Refresh
 6 — Refresh mode
・もしくは、Driver Variables−Sequencer Driver (ID = 1) Offs = 5 (stepMode)
 Bit 0—Step mode On/Off (1 = On)
 Bit 1—1 forces the sequencer to do next step
  1. 2012年12月19日 05:57 |
  2. CMOSイメージセンサ
  3. | トラックバック:0
  4. | コメント:4

コメント

シーケンサの動作

この辺りは記憶があいまいなのですが、基本的にシーケンサは停止できないはずです(停止すると画も止まった?)
例えばCapture Modeにして、Runで繰り返してFlash制御(Caputureでないと出力されない)をやったように記憶しています。
画像の調整に関しては、このシーケンサとの付き合いが必須となります。
  1. 2012/12/19(水) 17:50:44 |
  2. URL |
  3. おる #qbIq4rIg
  4. [ 編集 ]

了解しました。ありがとうございます。もう少し、マニュアルを読み進めてみます。本当に貴重なアドバイスをありがとうございます。
また、質問するかもしれません。その際は、よろしくお願い致します。
  1. 2012/12/19(水) 20:37:01 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

Linux用かPXA用に本センサのドライバがあって、このあたり以降はそちらを優先して使うことになりました。なので、自分がわかる範囲はシーケンサの動きをトレースするところまでです。
初期状態でもAEやAWBはかなり優秀なんで、そのまま出てくるデータだけでもいろいろ出来ると思います。
頑張ってください。
  1. 2012/12/20(木) 12:09:49 |
  2. URL |
  3. おる #qbIq4rIg
  4. [ 編集 ]

おるさん、本当にありがとうございました。最初はほとんどデフォルトの状態、800x600 30fps RGB565で使ってみようと思っています。
  1. 2012/12/20(木) 20:47:06 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/2337-2fd8f18c
この記事にトラックバックする(FC2ブログユーザー)