FC2カウンター FPGAの部屋 2022年08月
fc2ブログ

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

FPGAの部屋

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

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する9

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する8”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、axis2DMA4dwc IP のアドレスを 32 ビット・アドレスに変更し、Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行った。その後 Jupyter Notebook で動作を確認したところ、Jupyter Notebook に画像を表示できたが、色が違っていた。今回は、色の違いを修正するために、Red と Blue を入れ替えたところ、正常な色になった。

ブロック・デザインで、axis_subset_converter_2 を設定する。
ZYBO_Z7_PYNQ_241_220830.png

Extra Settings の TDATA Remap String を tdata[23:0] から tdata[7:0],tdata[15:8],tdata[23:16] に変更した。
つまり、最上位 8 ビットと最下位 8 ビットを入れ替えた。
ZYBO_Z7_PYNQ_242_220830.png

これで論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Sumarry を示す。
ZYBO_Z7_PYNQ_243_220830.png

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

cam_disp.ipynb を コピー & ペーストして、cam_disp_org.ipynb と名前を変更した。

Jupyte Notebook を実行していくと、カメラ画像を表示することができた。色も正常だ。
ZYBO_Z7_PYNQ_244_220830.png

どうやら色は BGR にする必要があるようだ。
  1. 2022年08月31日 05:27 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する8

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する7”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、デバッグをしたところ、axis2DMA4dwc IP のアドレスが 64 ビットアドレスだったため、AXI4 Master のアドレスの上 32 ビットだけアドレスを書き込んでいたので、DMA でアドレスが 0 番地になっていたのがバグの原因だった。今回は、axis2DMA4dwc IP のアドレスを 32 ビット・アドレスに変更し、Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行った。その後 Jupyter Notebook で動作を確認したところ、Jupyter Notebook に画像を表示できたが、色が違っていた。

Vitis HLS 2021.2 の axis2DMA4dwc プロジェクトで Solution メニューから Solution Settings... を選択し、ダイアログを表示された。
config_interface を展開して、m_axi_addr64 のチェックを外して、AXI4-Master のアドレス幅を 32 ビットに変更した。

C コードの合成を行った。結果を示す。
ZYBO_Z7_PYNQ_237_220828.png

S_AXILITE Registgers の最後の out_r が 32 ビット幅 1 個のみになっている。これで問題ない。

Export RTL を行って、IP にした。

Vitis HLS 2021.2 の axis2DMA4dwc IP を Vivado 2022.1 の cam_disp プロジェクトのディレクトリにある axis2DMA4dwc ディレクトリのファイルを削除して、コピー&ペーストした。
現在のブロック・デザインを示す。
ZYBO_Z7_PYNQ_240_220829.png

Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行った。

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

cam_disp.ipynb を コピー & ペーストして、cam_disp_org.ipynb と名前を変更した。

Jupyte Notebook を実行していくと、カメラ画像を表示することはできた。
しかし、色がおかしい。左上のオレンジ色は私の T シャツなのだが、その色は水色だ。R と B が入れ替わっているのかな?
ZYBO_Z7_PYNQ_238_220828.png

axis2DMA4dwc の AXI4 Master トランザクション波形を見ても、0x16f00000 番地からアクセスしているようだ。
ZYBO_Z7_PYNQ_239_220828.png

ただし、画像を表示できるのは 1 回だけだった。再度、カメラ画像をキャプチャして、Jupyte Notebook に表示しようとしたらカーネルがリセットされてしまう。

axis2dma.register_map.CTRL = 0x1
sobel1.register_map.CTRL = 0x1
dma2axis31.register_map.CTRL = 0x1

cam_image = Image.fromarray(buffer3)
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(cam_image)

  1. 2022年08月30日 04:26 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する7

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する6”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、axis2DMA4dwc IP を作成したので、axis2DMA IP を axis2DMA4dwc IP に交換した。Jupyter Notebook で実行してみたが途中で PYNQ が落ちてしまったようだ。今回は、デバッグをしたところ、axis2DMA4dwc IP のアドレスが 64 ビットアドレスだったため、AXI4 Master のアドレスの上 32 ビットだけアドレスを書き込んでいたので、DMA でアドレスが 0 番地になっていたのがバグの原因だった。

ブロック・デザインに System ILA を挿入した。
ZYBO_Z7_PYNQ_240_220829.png

これで Jupyter Notebook を実行しながら、波形を確認した。
axis2DMA4dwc の AWVALID でトリガを掛けた。
ZYBO_Z7_PYNQ_231_220828.png

axis4DMA4dwc の AXI4 インターフェースのトランザクションを見ると、アドレスが 0 番地になっている。これだと PYNQ Linux の領域に書き込んでしまい、Linux が落ちてしまう。これが原因だ。
ZYBO_Z7_PYNQ_232_220828.png

DMA2axis_3buf_1 の AXI4 インターフェースのトランザクションを見ると、正常だ。
ZYBO_Z7_PYNQ_233_220828.png

それじゃ原因は何か?ということで、buffer0, buffer1, buffer2, buffer3 の物理アドレスを表示してみたが、問題無さそうだ。。。
ZYBO_Z7_PYNQ_234_220828.png

axis2DMA4dwc の Vitis HLS 2021.2 の合成結果を見ると、アドレスが 64 ビット・アドレスになっていた。。。orz
ZYBO_Z7_PYNQ_236_220828.png

これが原因だ。。。64 ビット・アドレスの上 32 ビットにアドレスを書いたけど、ZYBO Z7-20 は 32 ビット・アドレスなので、書いた物理アドレスが無くなってしまったのだった。。。orz
  1. 2022年08月29日 05:09 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する6

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する5”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、Jupyter Notebook で動作の確認を行ったが、結局動作しなかった。ブロック・デザインを再検討した結果、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無かったことに気がついた。今回は、axis2DMA4dwc IP を作成したので、axis2DMA IP を axis2DMA4dwc IP に交換した。Jupyter Notebook で実行してみたが途中で PYNQ が落ちてしまったようだ。

cam_disp プロジェクト中の axis2DMA IP を axis2DMA4dwc IP に交換したブロック・デザインを示す。
ZYBO_Z7_PYNQ_227_220827.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_228_220827.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
ZYBO_Z7_PYNQ_229_220827.png

ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

cam_disp.ipynb を コピー & ペーストして、cam_disp_org.ipynb と名前を変更した。cam_disp.ipynb は今回変更したハードウェアに適合するように書き換えた。
具体的には

axis2dma = cam_disp.axis2DMA4dwc_0

と変更した。

Jupyter Notebook を実行していくと、

dma2axis31.register_map.CTRL = 0x1

で止まってしまった。
ZYBO_Z7_PYNQ_230_220827.png

このコードを実行すると、端末にフォーカスを向けてキーボードを押しても入力されない。。。
PYNQ Linux 自体が停止している感じだ。バスエラーなのだろうか?
  1. 2022年08月28日 00:11 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

axis2DMA4dwc IP の作成2

axis2DMA4dwc IP の作成1”の続き。

axis2DMA IP を TUSER を使用しないように作り変えることにしたということで、スタートに TUSER を使用しない axis2DMA4dwc IP を作成する。前回は、ソースコードとテストベンチ・コードを貼って、Vitis HLS 2022.1 の axis2DMA4dwc プロジェクトを作成した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーションを行った。C/RTL 協調シミュレーションのレイテンシが大きいので、Vitis HLS 2021.2 でも axis2DMA4dwc プロジェクトを作成し、C/RTL 協調シミュレーションを行ったところ、Vitis HLS 2021.2 の方がレイテンシが小さいので、こちらを採用することにした。

Vitis HLS 2022.1 で実装
C シミュレーションの結果を示す。
ZYBO_Z7_PYNQ_214_220824.png

solution1/csim/build ディレクトリには、test.jpg が生成された。
ZYBO_Z7_PYNQ_215_220824.png

C コードの合成を行った。結果を示す。
ZYBO_Z7_PYNQ_216_220824.png
ZYBO_Z7_PYNQ_217_220824.png

C/RTL 協調シミュレーションを行った。結果を示す。
レイテンシは 559801 クロックだった。1.16 クロック/ピクセルだった。余り性能が良くない気がする。
ZYBO_Z7_PYNQ_219_220824.png

1 行分の C/RTL 協調シミュレーション波形を示す。
ZYBO_Z7_PYNQ_218_220824.png

Export RTL を行った。

Implemenation を行った。結果を示す。
ZYBO_Z7_PYNQ_220_220824.png

Vitis HLS 2021.2 で実装
C/RTL 協調シミュレーションのレイテンシが大きいので、Vitis HLS 2021.2 でも axis2DMA4dwc プロジェクトを作成して、C コードの合成を行って、C/RTL 協調シミュレーションを行った。結果を示す。
レイテンシは 490801 クロックだった。1.02 クロック/ピクセルとなる。Vitis HLS 2022.1 よりもレイテンシが短いので、Vitis HLS 2021.2 を採用することにする。
ZYBO_Z7_PYNQ_224_220826.png

1 行分の C/RTL 協調シミュレーション波形を示す。
ZYBO_Z7_PYNQ_225_220826.png

Export RTL を行った。

Implementation の結果を示す。問題ないようだ。
ZYBO_Z7_PYNQ_226_220826.png
  1. 2022年08月26日 04:44 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

axis2DMA4dwc IP の作成1

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する5”で、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無いということが分かった。そこで、axis2DMA IP を TUSER を使用しないように作り変えることにした。
そういう訳で、スタートに TUSER を使用しない axis2DMA4dwc IP を作成する。

最初にソースコードの axis2DMA4dwc.cpp を示す。

// axis2DMA4dwc.cpp
// 2022/08/24 by marsee
//

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <stdint.h>

int axis2DMA4dwc(hls::stream<ap_axis<32,1,1,1> >& ins,
         int32_t row_size, int32_t col_size, ap_int<32> *out){
#pragma HLS INTERFACE mode=m_axi depth=480000 port=out offset=slave
#pragma HLS INTERFACE mode=s_axilite port=col_size
#pragma HLS INTERFACE mode=s_axilite port=row_size
#pragma HLS INTERFACE mode=axis register_mode=both port=ins register
#pragma HLS INTERFACE mode=s_axilite port=return

    ap_axis<32,1,1,1> val;

    for(int y=0; y<row_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=480 max=1080 avg=600
        for(int x=0; x<col_size; x++){
#pragma HLS LOOP_TRIPCOUNT min=640 max=1920 avg=800
            ins >> val;
            out[y*col_size+x] = val.data;
        }
    }

    return(0);
}


テストベンチの axis2DMA4dwc_tb.cpp を示す。

// axis2DMA4dwc_tb.cpp
// 2022/08/24 by marsee
//

#include <iostream>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"

#include "pict_data.h"

char OUTPUT_PICT_FILE[] = "test.jpg";

int axis2DMA4dwc(hls::stream<ap_axis<32,1,1,1> >& ins,
         int32_t row_size, int32_t col_size, ap_int<32> *out);

int main(){
    hls::stream<ap_axis<32,1,1,1> > ins;
    ap_axis<32,1,1,1> axisp;
    ap_int<32> *wr_pict;

    for(int y=0; y<Y_SIZE; y++){
        for(int x=0; x<X_SIZE; x++){
            axisp.data = (ap_int<32>)pict_file_array[y][x][0] | ((ap_int<32>)pict_file_array[y][x][1])<<8 | ((ap_int<32>)pict_file_array[y][x][2])<<16;

            if(y==0 && x==0)
                axisp.user = 1;
            else
                axisp.user = 0;

            if(x == X_SIZE-1)
                axisp.last = 1;
            else
                axisp.last = 0;

            ins << axisp;
        }
    }

    if((wr_pict =(ap_int<32> *)malloc(sizeof(ap_int<32>) * (X_SIZE * Y_SIZE))) == NULL){
        fprintf(stderr, "Can't allocate wr_pict memory\n");
        exit(1);
    }

    axis2DMA4dwc(ins, Y_SIZE, X_SIZE, wr_pict);

    cv::Mat img(Y_SIZE, X_SIZE, CV_8UC3);
    cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
    for (int y=0; y<Y_SIZE; y++){
        for (int x=0; x<X_SIZE; x++){
            ap_int<32> data = wr_pict[y*X_SIZE+x];
            cv::Vec3b pixel;
            pixel[0] = data & 0xff; // blue
            pixel[1] = (data >> 8) & 0xff; // green
            pixel[2] = (data >> 16) & 0xff; // red
            dst_vec3b(y,x) = pixel;
        }
    }

    cv::imwrite(OUTPUT_PICT_FILE, img);

    return(0);
}


なお、pict_data.h は画像をヘッダファイルにしたもので、”Vitis HLS 2021.2 を使用して画像ファイルを C のヘッダファイルに変換する”で作成したヘッダ・ファイルだ。

ZYBO Z7-20 用の Vitis HLS 2022.1 で作成した axis2DMA4dwc プロジェクトを示す。
ZYBO_Z7_PYNQ_211_220824.png

ZYBO Z7-20 用なので、Solution メニューから Solution Settings... を選択し、ダイアログを表示された。
config_interface を展開して、m_axi_addr64 のチェックを外して、AXI4-Master のアドレス幅を 32 ビットに変更した。
ZYBO_Z7_PYNQ_212_220824.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、設定を行った。
Project Settings (axis2DMA2st) ダイアログが開く。
左のウインドウで Simulation をクリックする。
axis2DMA2_tb.cpp の CFLAGS を設定する。(設定方法は、Edit CFLAGS... ボタンをクリックする)
axis2DMA2_tb.cpp の CFLAGS に

-I/usr/local/include

を設定した。

Linker Flags に

-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc

を設定した。
ZYBO_Z7_PYNQ_213_220824.png
  1. 2022年08月25日 04:21 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する5

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する4”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、メモリ帯域の負荷が増えるけど、DMA2axis_3buf IP と sobel_axis_RGB24 IP をもう 1 個ずつ実装して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、Jupyter Notebook で動作の確認を行ったが、結局動作しなかった。ブロック・デザインを再検討した結果、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無かったことに気がついた。これが原因だと思う。

ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

cam_disp.ipynb を コピー & ペーストして、cam_disp_org.ipynb と名前を変更した。cam_disp.ipynb は今回変更したハードウェアに適合するように書き換えた。

書き換えた cam_disp.ipynb を実行したが、やはり、カメラ画像は真っ黒だった。
ZYBO_Z7_PYNQ_208_220824.png

どうもおかしい。
Vivado の cam_disp_bd ブロック・デザインを見直すと、AXI4-Stream Data Width Converter の AXI4-Stream 入出力に TUSER が無かった。orz
ZYBO_Z7_PYNQ_209_220824.png

axis_dwidth_converter_0 の設定を見ても TUSER が 0 になっている。
ZYBO_Z7_PYNQ_210_220824.png

TUSER に 1 が来た時に axis2DMA IP がスタートするので、これでは、ずーと TUSER に 1 が来るのを axis2DMA IP が待ってしまって DMA Write がスタートしない。。。

しかし、AXI4-Stream Data Width Converter の設定の TUSER を ON にしてもバイトごとの値となっているので、1 に設定しても Slave 側は 3 ビット、Master 側は 4 ビットになりそうだ。これは困った。。。

そうだ、TUSER を使わなくても問題ないので、axis2DMA IP を修正しよう。

最後に cam_disp.ipynb の Python コード部分を貼っておく。

# cam_disp.py
# 2022/08/05 by marsee
# 2022/08/14 : Added Sobel filter.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay
import time

# Download bitstream
cam_disp = Overlay("./cam_disp.bit")

# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
paracam_inf = cam_disp.paracam_inf_axis_0
bmpd_cont = cam_disp.bitmap_disp_cont_axis_0
cam_iic = cam_disp.axi_iic_0
sobel0 = cam_disp.sobel_axis_RGB24_0
sobel1 = cam_disp.sobel_axis_RGB24_1
dma2axis30 = cam_disp.DMA2axis_3buf_0
dma2axis31 = cam_disp.DMA2axis_3buf_1
axis2dma = cam_disp.axis2DMA_0

def cam_i2c_init(cam_iic):
    cam_iic.write(0x100, 0x2)   # reset tx fifo ,address is 0x100, i2c_control_reg
    cam_iic.write(0x100, 0x1)   # enable i2c

def cam_i2x_write_sync():
    time.sleep(0.001) # 1ms wait

def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
    cam_iic.write(0x108, bin(0x100 | (device_addr & 0xfe)))   # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    cam_iic.write(0x108, bin((write_addr >> 8) & 0xff))      # address upper byte
    cam_iic.write(0x108, bin(write_addr & 0xff)) # address lower byte
    cam_iic.write(0x108, bin(0x200 | (write_data & 0xff)))   # data
    cam_i2x_write_sync()

def cam_reg_set(cam_iic, device_addr):
    cam_i2c_write(cam_iic, device_addr, 0x3103, 0x93)
    cam_i2c_write(cam_iic, device_addr, 0x3008, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x3017, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x3018, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc2)
    cam_i2c_write(cam_iic, device_addr, 0x3615, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x5c)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3005, 0xb7)
    cam_i2c_write(cam_iic, device_addr, 0x3006, 0x43)
    cam_i2c_write(cam_iic, device_addr, 0x3007, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3011, 0x08) # 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(cam_iic, device_addr, 0x3010, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x460c, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x370c, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3602, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3612, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x3634, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3613, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3622, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3604, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0xa7)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x4000, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x401d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3600, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3606, 0x3f)
    cam_i2c_write(cam_iic, device_addr, 0x3c01, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x5020, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x79)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x0a)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5080, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x300e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x4610, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x471d, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x4708, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x3710, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3632, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3631, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61) # RGB565
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x73)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3824, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0xc1)
    cam_i2c_write(cam_iic, device_addr, 0x3705, 0xdb)
    cam_i2c_write(cam_iic, device_addr, 0x370a, 0x81)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3827, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a1a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a13, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a18, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a19, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x350c, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x350d, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3500, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3030, 0x0b)
    cam_i2c_write(cam_iic, device_addr, 0x3a02, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a03, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a04, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a14, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a15, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a16, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0x98)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x589b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x589a, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x4e)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x538a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538b, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x538c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538d, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538f, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xab)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x65)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x71)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x87)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x91)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x9a)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0xaa)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xcd)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xdd)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xea)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x86)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0x5b)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0x3b)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xed)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0xa5)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x3406, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04) # 0x04
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8) # 0xf8
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0xbd)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x68)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x02) # 0x02
    cam_i2c_write(cam_iic, device_addr, 0x3633, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0xb2)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x370b, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x3c00, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xFF)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5503, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0xE1)
    cam_i2c_write(cam_iic, device_addr, 0x538A, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538B, 0x2B)
    cam_i2c_write(cam_iic, device_addr, 0x538C, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538D, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538E, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538F, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xB3)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xA6)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x49)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x56)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x76)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x88)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0x96)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xcc)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0xee)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0xd8)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xb3)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0x90)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b1, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54b2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b3, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b4, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54b5, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x54b6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b7, 0xdf)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5587, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5588, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x558a, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x5589, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0xcf)
    cam_i2c_write(cam_iic, device_addr, 0x5800, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5801, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x5802, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5803, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5804, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5805, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5806, 0x29)
    cam_i2c_write(cam_iic, device_addr, 0x5807, 0x38)
    cam_i2c_write(cam_iic, device_addr, 0x5808, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x5809, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x580a, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x580b, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580c, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x580d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580e, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x580f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5810, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5811, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5812, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x5813, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5814, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5815, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5816, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5817, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5818, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5819, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x581a, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x581b, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581c, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581d, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x581e, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x581f, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5820, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x5821, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5822, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5823, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5824, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5825, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x5826, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x5827, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5828, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5829, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x582a, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x582b, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582c, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x582d, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582e, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x582f, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5830, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5831, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5832, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5833, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5834, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5835, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5836, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5837, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5838, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x5839, 0x39)
    cam_i2c_write(cam_iic, device_addr, 0x583a, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x583b, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x583c, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x583d, 0x23)
    cam_i2c_write(cam_iic, device_addr, 0x583e, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x583f, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x5840, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5841, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5842, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5843, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5844, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5845, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5846, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5847, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5848, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5849, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584a, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584b, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x584c, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584e, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x584f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5850, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5851, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5852, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5853, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5854, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5855, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5856, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5857, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5858, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5859, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x585a, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585b, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585c, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585d, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x585e, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x585f, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5860, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5861, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5862, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5863, 0x7)
    cam_i2c_write(cam_iic, device_addr, 0x5864, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5865, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5866, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5867, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5868, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5869, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x586a, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x586b, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x586c, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586d, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x586f, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5870, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5871, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5872, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5873, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5874, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x5875, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5876, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5877, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5878, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5879, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x587a, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x587b, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x587c, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587d, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587e, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x587f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5880, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5881, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5882, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5883, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5884, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5885, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5886, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5887, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5180, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0x9c)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x34)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x4c)
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5196, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5198, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5199, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x519a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x519b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x519c, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x519d, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x519e, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3800, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3802, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0x58)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0x81) # No Mirror
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xa7)

    cam_i2c_write(cam_iic, device_addr, 0x4740, 0x21)

    cam_i2c_write(cam_iic, device_addr, 0x501e, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5002, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61)

# frame buffer alocate
height = 600
width = 800
buffer0 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer1 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer2 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer3 = allocate(shape=(height, width, 3), dtype=np.uint8, cacheable=1)

# frame buffer resister set
vflip_dmaw.register_map.fb0_1 = buffer0.physical_address
vflip_dmaw.register_map.fb0_2 = 0
vflip_dmaw.register_map.fb1_1 = buffer1.physical_address
vflip_dmaw.register_map.fb1_2 = 0
vflip_dmaw.register_map.fb2_1 = buffer2.physical_address
vflip_dmaw.register_map.fb2_2 = 0

dma2axis30.register_map.fb0 = buffer0.physical_address
dma2axis30.register_map.fb1 = buffer1.physical_address
dma2axis30.register_map.fb2 = buffer2.physical_address
dma2axis30.register_map.mode = 0 # DMA_WRITE_MODE

dma2axis31.register_map.fb0 = buffer0.physical_address
dma2axis31.register_map.fb1 = buffer1.physical_address
dma2axis31.register_map.fb2 = buffer2.physical_address
dma2axis31.register_map.mode = 0 # DMA_WRITE_MODE

sobel0.register_map.row_size = height
sobel0.register_map.col_size = width
sobel0.register_map.function_r = 0 # ORG_IMGwAxiVdma

sobel1.register_map.row_size = height
sobel1.register_map.col_size = width
sobel1.register_map.function_r = 0 # ORG_IMGwAxiVdma

axis2dma.register_map.out_r = buffer3.physical_address
axis2dma.register_map.row_size = height
axis2dma.register_map.col_size = width

# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81

# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)

# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)

# bitmap_disp_cont start
bmpd_cont.write(0x0, 0x0)

# sobel_axis_RGB24 start
sobel0.register_map.CTRL = 0x81

# dma2axis_3buf start and auto repeat
dma2axis30.register_map.CTRL = 0x81

# image capture
axis2dma.register_map.CTRL = 0x81

print(axis2dma.register_map.CTRL)

sobel1.register_map.CTRL = 0x81

print(sobel1.register_map.CTRL)

dma2axis31.register_map.CTRL = 0x81

print(dma2axis31.register_map.CTRL)

print(axis2dma.register_map.CTRL)
print(sobel1.register_map.CTRL)
print(dma2axis31.register_map.CTRL)

cam_image = Image.fromarray(buffer3)
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(cam_image)

#sobel filter on for camera image
sobel0.register_map.function_r = 1 # SOBELwAxiVdma

# sobel filter off for camera image
sobel0.register_map.function_r = 0 # ORG_IMGwAxiVdma

#sobel fliter on for image capture
sobel1.register_map.function_r = 1 # SOBELwAxiVdma
axis2dma.register_map.CTRL = 0x1
sobel1.register_map.CTRL = 0x1
dma2axis31.register_map.CTRL = 0x1

#sobel fliter off for image capture
sobel1.register_map.function_r = 0 # ORG_IMGwAxiVdma
axis2dma.register_map.CTRL = 0x1
sobel1.register_map.CTRL = 0x1
dma2axis31.register_map.CTRL = 0x1

  1. 2022年08月24日 04:09 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する4

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する3”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、Jupyter Notebook に表示されたカメラ画像が真っ黒だった原因を追求するために System ILA を入れて、波形を確認したが、axis2DMA IP の DMA Write が出ていなかった。今回は、メモリ帯域の負荷が増えるけど、DMA2axis_3buf IP と sobel_axis_RGB24 IP をもう 1 個ずつ実装した。

cam_disp_bd ブロック・デザインを示す。
DMA2axis_3buf_1, sobel_axis_RGB24_1, axis_subset_converter_1 が追加されている。
ZYBO_Z7_PYNQ_205_220823.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_206_220823.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
ZYBO_Z7_PYNQ_207_220823.png
  1. 2022年08月23日 05:17 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する3

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する2”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、ビットストリームと hwh ファイルを ZYBO Z7-20 の PYNQ LInux 上にアップロードして、Jupyter Notebook を起動して動作を確認したところ、Jupyter Notebook に表示されたカメラ画像が真っ黒だった。今回は、原因を追求するために System ILA を入れて、波形を確認したが、axis2DMA IP の DMA Write が出ていなかった。

axis2DMA IP の周辺に Debug を指定して、System ILA を入れた。
ZYBO_Z7_PYNQ_199_220821.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
ZYBO_Z7_PYNQ_200_220822.png

ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。
ZYBO_Z7_PYNQ_201_220822.png

cam_disp.ipynb ファイルを起動した。

cam_disp.bit ファイルをダウンロードするところまで実行して、Vivado で ILA ダッシュボードを起動した。

axis2DMA IP を起動するところまで Jupyter Notebook の実行を進めた。
ZYBO_Z7_PYNQ_202_220822.png

ここまで実行を進めても axis2DMA IP の AXI4 Master インターフェースの AWVALID でトリガが掛からない。
ZYBO_Z7_PYNQ_203_220822.png

axis2DMA IP の AXI4-Stream 入力の TUSER だったらトリガが掛かる。
ZYBO_Z7_PYNQ_204_220822.png

なぜ、axis2DMA IP の AXI4-Stream 入力の TUSER は出ていても AXI4 Master インターフェースの AWVALID でトリガが掛からないのはなぜだろう?
もしかして、slot 1 と slot 2 が同じインターフェース名だけど、同じところ見ているのだろうか?
メモリ帯域の負荷が増えるけど、DMA2axis_3buf IP と sobel_axis_RGB24 IP をもう 1 個ずつ実装してみようか?
  1. 2022年08月22日 05:14 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する2

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する1”の続き。

Jupyter Notebook にカメラ画像を表示しようということで、前回は、cam_disp_bd ブロック・デザインに axis2DMA IP を追加した。今回は、前回作成したビットストリームと hwh ファイルを ZYBO Z7-20 の PYNQ LInux 上にアップロードして、Jupyter Notebook を起動して動作を確認したところ、Jupyter Notebook に表示されたカメラ画像が真っ黒だった。axis2DMA IP に AXI4-Stream データが渡っていないのだろうか?

ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

Jupyter Notebook ファイルの cam_disp.ipynb ファイルに axis2DMA IP の制御用コードと Jupyter Notebook にカメラ画像を表示するコードを追加した。

cam_disp.ipynb を実行していったところ、真っ黒な画像が表示された。
ZYBO_Z7_PYNQ_198_220821.png

なお、カメラ画像はディスプレイに表示されている。このカメラ - ディスプレイ表示パスに問題は無いようだ。

cam_disp.ipynb の python コードを貼っておく。

# cam_disp.py
# 2022/08/05 by marsee
# 2022/08/14 : Added Sobel filter.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay
import time

# Download bitstream
cam_disp = Overlay("./cam_disp.bit")

# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
dma2axis3 = cam_disp.DMA2axis_3buf_0
paracam_inf = cam_disp.paracam_inf_axis_0
bmpd_cont = cam_disp.btimap_disp_cont_axis_0
cam_iic = cam_disp.cam_iic_0
sobel = cam_disp.sobel_axis_RGB24_0
axis2dma = cam_disp.axis2DMA_0

def cam_i2c_init(cam_iic):
    cam_iic.write(0x100, 0x2)   # reset tx fifo ,address is 0x100, i2c_control_reg
    cam_iic.write(0x100, 0x1)   # enable i2c

def cam_i2x_write_sync():
    time.sleep(0.001) # 1ms wait

def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
    cam_iic.write(0x108, bin(0x100 | (device_addr & 0xfe)))   # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    cam_iic.write(0x108, bin((write_addr >> 8) & 0xff))      # address upper byte
    cam_iic.write(0x108, bin(write_addr & 0xff)) # address lower byte
    cam_iic.write(0x108, bin(0x200 | (write_data & 0xff)))   # data
    cam_i2x_write_sync()

def cam_reg_set(cam_iic, device_addr):
    cam_i2c_write(cam_iic, device_addr, 0x3103, 0x93)
    cam_i2c_write(cam_iic, device_addr, 0x3008, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x3017, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x3018, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc2)
    cam_i2c_write(cam_iic, device_addr, 0x3615, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x5c)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3005, 0xb7)
    cam_i2c_write(cam_iic, device_addr, 0x3006, 0x43)
    cam_i2c_write(cam_iic, device_addr, 0x3007, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3011, 0x08) # 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(cam_iic, device_addr, 0x3010, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x460c, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x370c, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3602, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3612, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x3634, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3613, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3622, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3604, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0xa7)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x4000, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x401d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3600, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3606, 0x3f)
    cam_i2c_write(cam_iic, device_addr, 0x3c01, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x5020, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x79)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x0a)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5080, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x300e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x4610, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x471d, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x4708, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x3710, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3632, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3631, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61) # RGB565
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x73)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3824, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0xc1)
    cam_i2c_write(cam_iic, device_addr, 0x3705, 0xdb)
    cam_i2c_write(cam_iic, device_addr, 0x370a, 0x81)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3827, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a1a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a13, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a18, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a19, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x350c, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x350d, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3500, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3030, 0x0b)
    cam_i2c_write(cam_iic, device_addr, 0x3a02, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a03, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a04, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a14, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a15, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a16, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0x98)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x589b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x589a, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x4e)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x538a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538b, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x538c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538d, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538f, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xab)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x65)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x71)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x87)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x91)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x9a)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0xaa)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xcd)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xdd)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xea)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x86)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0x5b)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0x3b)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xed)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0xa5)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x3406, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04) # 0x04
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8) # 0xf8
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0xbd)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x68)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x02) # 0x02
    cam_i2c_write(cam_iic, device_addr, 0x3633, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0xb2)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x370b, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x3c00, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xFF)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5503, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0xE1)
    cam_i2c_write(cam_iic, device_addr, 0x538A, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538B, 0x2B)
    cam_i2c_write(cam_iic, device_addr, 0x538C, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538D, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538E, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538F, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xB3)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xA6)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x49)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x56)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x76)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x88)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0x96)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xcc)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0xee)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0xd8)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xb3)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0x90)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b1, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54b2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b3, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b4, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54b5, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x54b6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b7, 0xdf)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5587, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5588, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x558a, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x5589, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0xcf)
    cam_i2c_write(cam_iic, device_addr, 0x5800, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5801, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x5802, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5803, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5804, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5805, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5806, 0x29)
    cam_i2c_write(cam_iic, device_addr, 0x5807, 0x38)
    cam_i2c_write(cam_iic, device_addr, 0x5808, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x5809, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x580a, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x580b, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580c, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x580d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580e, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x580f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5810, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5811, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5812, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x5813, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5814, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5815, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5816, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5817, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5818, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5819, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x581a, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x581b, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581c, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581d, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x581e, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x581f, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5820, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x5821, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5822, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5823, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5824, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5825, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x5826, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x5827, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5828, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5829, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x582a, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x582b, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582c, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x582d, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582e, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x582f, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5830, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5831, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5832, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5833, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5834, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5835, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5836, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5837, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5838, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x5839, 0x39)
    cam_i2c_write(cam_iic, device_addr, 0x583a, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x583b, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x583c, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x583d, 0x23)
    cam_i2c_write(cam_iic, device_addr, 0x583e, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x583f, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x5840, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5841, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5842, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5843, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5844, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5845, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5846, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5847, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5848, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5849, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584a, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584b, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x584c, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584e, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x584f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5850, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5851, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5852, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5853, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5854, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5855, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5856, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5857, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5858, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5859, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x585a, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585b, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585c, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585d, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x585e, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x585f, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5860, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5861, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5862, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5863, 0x7)
    cam_i2c_write(cam_iic, device_addr, 0x5864, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5865, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5866, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5867, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5868, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5869, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x586a, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x586b, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x586c, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586d, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x586f, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5870, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5871, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5872, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5873, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5874, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x5875, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5876, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5877, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5878, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5879, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x587a, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x587b, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x587c, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587d, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587e, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x587f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5880, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5881, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5882, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5883, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5884, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5885, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5886, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5887, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5180, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0x9c)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x34)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x4c)
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5196, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5198, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5199, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x519a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x519b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x519c, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x519d, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x519e, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3800, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3802, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0x58)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0x81) # No Mirror
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xa7)

    cam_i2c_write(cam_iic, device_addr, 0x4740, 0x21)

    cam_i2c_write(cam_iic, device_addr, 0x501e, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5002, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61)

# frame buffer alocate
height = 600
width = 800
buffer0 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer1 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer2 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer3 = allocate(shape=(height, width, 3), dtype=np.uint8, cacheable=1)

# frame buffer resister set
vflip_dmaw.register_map.fb0_1 = buffer0.physical_address
vflip_dmaw.register_map.fb0_2 = 0
vflip_dmaw.register_map.fb1_1 = buffer1.physical_address
vflip_dmaw.register_map.fb1_2 = 0
vflip_dmaw.register_map.fb2_1 = buffer2.physical_address
vflip_dmaw.register_map.fb2_2 = 0

dma2axis3.register_map.fb0 = buffer0.physical_address
dma2axis3.register_map.fb1 = buffer1.physical_address
dma2axis3.register_map.fb2 = buffer2.physical_address
dma2axis3.register_map.mode = 0 # DMA_WRITE_MODE

sobel.register_map.row_size = height
sobel.register_map.col_size = width
sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma

axis2dma.register_map.out_r = buffer3.physical_address
axis2dma.register_map.row_size = height
axis2dma.register_map.col_size = width

# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81

# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)

# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)

# bitmap_disp_cont start
bmpd_cont.write(0x0, 0x0)

# sobel_axis_RGB24 start
sobel.register_map.CTRL = 0x81

# dma2axis_3buf start and auto repeat
dma2axis3.register_map.CTRL = 0x81

axis2dma.register_map.CTRL = 0x1

print(axis2dma.register_map.CTRL)

cam_image = Image.fromarray(buffer3)
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(cam_image)

#sobel filter on
sobel.register_map.function_r = 1 # SOBELwAxiVdma

# sobel filter off
sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma

  1. 2022年08月21日 04:31 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールする2

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールする1”の続き。

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールしてみようということで、前回は、make の 80 % まで make できたがそれ以上は難しいようだった。今回は、cmake のオプションを変更して、ビルドの負荷を軽くして make して見たところ成功した。

最初に make clean した。
make clean

cmake のオプションを変更して、cmake を行った。
cmake -S /home/xilinx/opencv/opencv-3.4.16 -B /home/xilinx/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=OFF -D WITH_VTK=OFF -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF -D WITH_FFMPEG=OFF
ZYBO_Z7_PYNQ_190_220819.png

ZYBO_Z7_PYNQ_191_220819.png

make を行って成功した。
make -j2
ZYBO_Z7_PYNQ_192_220819.png

良かったよ。。。
make が完了するまでに 10 時間程度は掛かったようだ。

sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

ZYBO_Z7_PYNQ_193_220819.png

ZYBO_Z7_PYNQ_194_220819.png

OpenCV の動作を見てみよう。
opencv/opencv-3.4.16/samples/python ディレクトリに入った。
demo.py を起動した。
cd ../opencv/opencv-3.4.16/samples/python
python3 demo.py

ZYBO_Z7_PYNQ_197_220819.png

OpenCV Demo ダイアログが表示された。
asift を選択して、Run ボタンをクリックした。
ZYBO_Z7_PYNQ_195_220819.png

asift の結果のダイアログが表示された。
ZYBO_Z7_PYNQ_196_220819.jpg

OpenCV の動作に問題は無いようだ。

cmake のログを貼っておく。

xilinx@pynq:~/opencv/build$ cmake -S /home/xilinx/opencv/opencv-3.4.16 -B /home/xilinx/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=OFF -D WITH_VTK=OFF -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF -D WITH_FFMPEG=OFF
-- Detected processor: armv7l
-- Looking for ccache - found (/usr/bin/ccache)
-- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found suitable version "1.2.11", minimum required is "1.2.3") 
-- Could NOT find Jasper (missing: JASPER_LIBRARIES) (found version "1.900.1")
-- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found version "1.2.11") 
-- Found OpenEXR: /usr/lib/arm-linux-gnueabihf/libIlmImf.so
-- Checking for module 'gtk+-3.0'
--   No package 'gtk+-3.0' found
-- Checking for modules 'gstreamer-base-1.0;gstreamer-video-1.0;gstreamer-app-1.0;gstreamer-riff-1.0;gstreamer-pbutils-1.0'
--   No package 'gstreamer-base-1.0' found
--   No package 'gstreamer-video-1.0' found
--   No package 'gstreamer-app-1.0' found
--   No package 'gstreamer-riff-1.0' found
--   No package 'gstreamer-pbutils-1.0' found
-- Checking for modules 'gstreamer-base-0.10;gstreamer-video-0.10;gstreamer-app-0.10;gstreamer-riff-0.10;gstreamer-pbutils-0.10'
--   No package 'gstreamer-base-0.10' found
--   No package 'gstreamer-video-0.10' found
--   No package 'gstreamer-app-0.10' found
--   No package 'gstreamer-riff-0.10' found
--   No package 'gstreamer-pbutils-0.10' found
-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
-- Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR) 
-- A library with LAPACK API found.
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
-- Could NOT find Pylint (missing: PYLINT_EXECUTABLE) 
-- Could NOT find Flake8 (missing: FLAKE8_EXECUTABLE) 
-- Carotene: NEON is not available, disabling carotene...
-- OpenCV Python: during development append to PYTHONPATH: /home/xilinx/opencv/build/python_loader
-- freetype2:   YES (ver 23.1.17)
-- harfbuzz:    YES (ver 2.6.4)
-- Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version "")
-- Module opencv_ovis disabled because OGRE3D was not found
-- CERES support is disabled. Ceres Solver for reconstruction API is required.
-- Checking for module 'tesseract'
--   No package 'tesseract' found
-- Tesseract:   NO
-- Allocator metrics storage type: 'int'
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.ssse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.fp16.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin512.avx512_skx.cpp
-- Excluding from source files list: modules/imgproc/src/corner.avx.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.sse4_1.cpp
-- Excluding from source files list: modules/imgproc/src/resize.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/resize.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx512_skx.cpp
-- Excluding from source files list: modules/features2d/src/fast.avx2.cpp
-- Excluding from source files list: modules/objdetect/src/haar.avx.cpp
-- CERES support is disabled. Ceres Solver for reconstruction API is required.
-- 
-- General configuration for OpenCV 3.4.16 =====================================
--   Version control:               unknown
-- 
--   Extra modules:
--     Location (extra):            /home/xilinx/opencv/opencv_contrib/modules
--     Version control (extra):     unknown
-- 
--   Platform:
--     Timestamp:                   2022-08-17T20:33:50Z
--     Host:                        Linux 5.4.0-xilinx-v2020.2 armv7l
--     CMake:                       3.16.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
-- 
--   CPU/HW features:
--     Baseline:
--       requested:                 DETECT
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++11:                       YES
--     C++ Compiler:                /usr/bin/g++  (ver 9.3.0)
--     C++ flags (Release):         -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/gcc
--     C flags (Release):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed  
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed  
--     ccache:                      YES
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann freetype fuzzy hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python3 reg rgbd saliency sfm shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java matlab ovis python2 viz
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI: 
--     GTK+:                        YES (ver 2.24.32)
--       GThread :                  YES (ver 2.64.2)
--       GtkGlExt:                  NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/arm-linux-gnueabihf/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/arm-linux-gnueabihf/libwebp.so (ver encoder: 0x020e)
--     PNG:                         /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/arm-linux-gnueabihf/libtiff.so (ver 42 / 4.1.0)
--     JPEG 2000:                   build (ver 1.900.1)
--     OpenEXR:                     /usr/lib/arm-linux-gnueabihf/libImath.so /usr/lib/arm-linux-gnueabihf/libIlmImf.so /usr/lib/arm-linux-gnueabihf/libIex.so /usr/lib/arm-linux-gnueabihf/libHalf.so /usr/lib/arm-linux-gnueabihf/libIlmThread.so (ver 2_3)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (ver 2.2.5)
--     GStreamer:                   NO
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.7)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/xilinx/opencv/opencv-3.4.16/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3.8 (ver 3.8.2)
--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython3.8.so (ver 3.8.2)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.17.4)
--     install path:                lib/python3.8/site-packages/cv2/python-3.8
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xilinx/opencv/build


make install のログを貼っておく。

xilinx@pynq:~/opencv/build$ sudo make install
[sudo] password for xilinx: 
[  0%] Built target gen-pkgconfig
[  0%] Built target ittnotify
[  5%] Built target opencv_core
[  9%] Built target opencv_imgproc
[ 12%] Built target libjasper
[ 13%] Built target opencv_imgcodecs
[ 14%] Built target opencv_videoio
[ 14%] Built target opencv_highgui
[ 14%] Built target opencv_ts
[ 17%] Built target opencv_perf_core
[ 19%] Built target opencv_test_core
[ 19%] Built target opencv_flann
[ 19%] Built target opencv_test_flann
[ 21%] Built target opencv_perf_imgproc
[ 25%] Built target opencv_test_imgproc
[ 26%] Built target opencv_ml
[ 27%] Built target opencv_test_ml
[ 27%] Built target opencv_phase_unwrapping
[ 27%] Built target opencv_test_phase_unwrapping
[ 28%] Built target opencv_photo
[ 28%] Built target opencv_perf_photo
[ 29%] Built target opencv_test_photo
[ 30%] Built target opencv_plot
[ 31%] Built target opencv_reg
[ 31%] Built target opencv_perf_reg
[ 31%] Built target opencv_test_reg
[ 32%] Built target opencv_surface_matching
[ 32%] Built target opencv_video
[ 33%] Built target opencv_perf_video
[ 34%] Built target opencv_test_video
[ 34%] Built target opencv_xphoto
[ 34%] Built target opencv_perf_xphoto
[ 35%] Built target opencv_test_xphoto
[ 40%] Built target libprotobuf
[ 45%] Built target opencv_dnn
[ 45%] Built target opencv_perf_dnn
[ 46%] Built target opencv_test_dnn
[ 48%] Built target opencv_features2d
[ 49%] Built target opencv_perf_features2d
[ 50%] Built target opencv_test_features2d
[ 50%] Built target opencv_freetype
[ 50%] Built target opencv_fuzzy
[ 51%] Built target opencv_test_fuzzy
[ 52%] Built target opencv_hfs
[ 53%] Built target opencv_img_hash
[ 53%] Built target opencv_test_img_hash
[ 53%] Built target opencv_perf_imgcodecs
[ 54%] Built target opencv_test_imgcodecs
[ 54%] Built target opencv_line_descriptor
[ 55%] Built target opencv_perf_line_descriptor
[ 55%] Built target opencv_test_line_descriptor
[ 56%] Built target opencv_saliency
[ 56%] Built target opencv_shape
[ 56%] Built target opencv_test_shape
[ 56%] Built target opencv_text
[ 56%] Built target opencv_test_text
[ 57%] Built target opencv_test_videoio
[ 57%] Built target opencv_perf_videoio
[ 59%] Built target opencv_calib3d
[ 59%] Built target opencv_perf_calib3d
[ 61%] Built target opencv_test_calib3d
[ 63%] Built target opencv_datasets
[ 63%] Built target opencv_test_highgui
[ 64%] Built target quirc
[ 65%] Built target opencv_objdetect
[ 65%] Built target opencv_perf_objdetect
[ 65%] Built target opencv_test_objdetect
[ 65%] Built target opencv_rgbd
[ 65%] Built target opencv_test_rgbd
[ 65%] Built target opencv_stereo
[ 65%] Built target opencv_perf_stereo
[ 66%] Built target opencv_test_stereo
[ 67%] Built target opencv_structured_light
[ 67%] Built target opencv_test_structured_light
[ 67%] Built target opencv_superres
[ 67%] Built target opencv_perf_superres
[ 68%] Built target opencv_test_superres
[ 71%] Built target opencv_tracking
[ 71%] Built target opencv_perf_tracking
[ 71%] Built target opencv_test_tracking
[ 72%] Built target opencv_videostab
[ 72%] Built target opencv_test_videostab
[ 74%] Built target opencv_xfeatures2d
[ 75%] Built target opencv_perf_xfeatures2d
[ 76%] Built target opencv_test_xfeatures2d
[ 78%] Built target opencv_ximgproc
[ 79%] Built target opencv_perf_ximgproc
[ 80%] Built target opencv_test_ximgproc
[ 81%] Built target opencv_xobjdetect
[ 81%] Built target opencv_waldboost_detector
[ 82%] Built target opencv_aruco
[ 82%] Built target opencv_test_aruco
[ 82%] Built target opencv_bgsegm
[ 82%] Built target opencv_test_bgsegm
[ 83%] Built target opencv_bioinspired
[ 83%] Built target opencv_perf_bioinspired
[ 84%] Built target opencv_test_bioinspired
[ 85%] Built target opencv_ccalib
[ 85%] Built target opencv_dnn_objdetect
[ 86%] Built target opencv_dpm
[ 87%] Built target opencv_face
[ 88%] Built target opencv_test_face
[ 89%] Built target opencv_optflow
[ 90%] Built target opencv_perf_optflow
[ 91%] Built target opencv_test_optflow
[ 91%] Built target numeric
[ 92%] Built target multiview
[ 92%] Built target correspondence
[ 93%] Built target opencv_sfm
[ 94%] Built target opencv_test_sfm
[ 95%] Built target opencv_stitching
[ 96%] Built target opencv_perf_stitching
[ 96%] Built target opencv_test_stitching
[ 96%] Built target gen_opencv_python_source
[ 96%] Built target opencv_python3
[ 97%] Built target opencv_traincascade
[ 98%] Built target opencv_createsamples
[ 98%] Built target opencv_annotation
[ 98%] Built target opencv_visualisation
[ 99%] Built target opencv_interactive-calibration
[100%] Built target opencv_version
Install the project...
-- Install configuration: "RELEASE"
-- Installing: /usr/local/share/licenses/opencv3/opencl-headers-LICENSE.txt
-- Installing: /usr/local/include/opencv2/cvconfig.h
-- Installing: /usr/local/include/opencv2/opencv_modules.hpp
-- Installing: /usr/local/lib/pkgconfig/opencv.pc
-- Installing: /usr/local/share/OpenCV/OpenCVModules.cmake
-- Installing: /usr/local/share/OpenCV/OpenCVModules-release.cmake
-- Installing: /usr/local/share/OpenCV/OpenCVConfig-version.cmake
-- Installing: /usr/local/share/OpenCV/OpenCVConfig.cmake
-- Installing: /usr/local/bin/setup_vars_opencv3.sh
-- Installing: /usr/local/share/OpenCV/valgrind.supp
-- Installing: /usr/local/share/OpenCV/valgrind_3rdparty.supp
-- Installing: /usr/local/share/licenses/opencv3/jasper-LICENSE
-- Installing: /usr/local/share/licenses/opencv3/jasper-README
-- Installing: /usr/local/share/licenses/opencv3/jasper-copyright
-- Installing: /usr/local/share/licenses/opencv3/protobuf-LICENSE
-- Installing: /usr/local/share/licenses/opencv3/protobuf-README.md
-- Installing: /usr/local/share/licenses/opencv3/quirc-LICENSE
-- Installing: /usr/local/share/licenses/opencv3/ittnotify-LICENSE.BSD
-- Installing: /usr/local/share/licenses/opencv3/ittnotify-LICENSE.GPL
-- Installing: /usr/local/include/opencv/cv.h
-- Installing: /usr/local/include/opencv/cv.hpp
-- Installing: /usr/local/include/opencv/cvaux.h
-- Installing: /usr/local/include/opencv/cvaux.hpp
-- Installing: /usr/local/include/opencv/cvwimage.h
-- Installing: /usr/local/include/opencv/cxcore.h
-- Installing: /usr/local/include/opencv/cxcore.hpp
-- Installing: /usr/local/include/opencv/cxeigen.hpp
-- Installing: /usr/local/include/opencv/cxmisc.h
-- Installing: /usr/local/include/opencv/highgui.h
-- Installing: /usr/local/include/opencv/ml.h
-- Installing: /usr/local/include/opencv2/opencv.hpp
-- Installing: /usr/local/lib/libopencv_core.so.3.4.16
-- Installing: /usr/local/lib/libopencv_core.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_core.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_core.so
-- Installing: /usr/local/include/opencv2/core.hpp
-- Installing: /usr/local/include/opencv2/core/affine.hpp
-- Installing: /usr/local/include/opencv2/core/async.hpp
-- Installing: /usr/local/include/opencv2/core/base.hpp
-- Installing: /usr/local/include/opencv2/core/bindings_utils.hpp
-- Installing: /usr/local/include/opencv2/core/bufferpool.hpp
-- Installing: /usr/local/include/opencv2/core/check.hpp
-- Installing: /usr/local/include/opencv2/core/core.hpp
-- Installing: /usr/local/include/opencv2/core/core_c.h
-- Installing: /usr/local/include/opencv2/core/cuda.hpp
-- Installing: /usr/local/include/opencv2/core/cuda.inl.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/block.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/border_interpolate.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/color.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/common.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/datamov_utils.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/color_detail.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/reduce.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/reduce_key_val.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/transform_detail.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/type_traits_detail.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/detail/vec_distance_detail.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/dynamic_smem.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/emulation.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/filters.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/funcattrib.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/functional.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/limits.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/reduce.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/saturate_cast.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/scan.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/simd_functions.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/transform.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/type_traits.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/utility.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/vec_distance.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/vec_math.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/vec_traits.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/warp.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/warp_reduce.hpp
-- Installing: /usr/local/include/opencv2/core/cuda/warp_shuffle.hpp
-- Installing: /usr/local/include/opencv2/core/cuda_stream_accessor.hpp
-- Installing: /usr/local/include/opencv2/core/cuda_types.hpp
-- Installing: /usr/local/include/opencv2/core/cv_cpu_dispatch.h
-- Installing: /usr/local/include/opencv2/core/cv_cpu_helper.h
-- Installing: /usr/local/include/opencv2/core/cvdef.h
-- Installing: /usr/local/include/opencv2/core/cvstd.hpp
-- Installing: /usr/local/include/opencv2/core/cvstd.inl.hpp
-- Installing: /usr/local/include/opencv2/core/detail/async_promise.hpp
-- Installing: /usr/local/include/opencv2/core/detail/exception_ptr.hpp
-- Installing: /usr/local/include/opencv2/core/directx.hpp
-- Installing: /usr/local/include/opencv2/core/eigen.hpp
-- Installing: /usr/local/include/opencv2/core/fast_math.hpp
-- Installing: /usr/local/include/opencv2/core/hal/hal.hpp
-- Installing: /usr/local/include/opencv2/core/hal/interface.h
-- Installing: /usr/local/include/opencv2/core/hal/intrin.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_avx.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_avx512.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_cpp.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_forward.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_msa.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_neon.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_sse.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_sse_em.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_vsx.hpp
-- Installing: /usr/local/include/opencv2/core/hal/intrin_wasm.hpp
-- Installing: /usr/local/include/opencv2/core/hal/msa_macros.h
-- Installing: /usr/local/include/opencv2/core/hal/simd_utils.impl.hpp
-- Installing: /usr/local/include/opencv2/core/ippasync.hpp
-- Installing: /usr/local/include/opencv2/core/mat.hpp
-- Installing: /usr/local/include/opencv2/core/mat.inl.hpp
-- Installing: /usr/local/include/opencv2/core/matx.hpp
-- Installing: /usr/local/include/opencv2/core/neon_utils.hpp
-- Installing: /usr/local/include/opencv2/core/ocl.hpp
-- Installing: /usr/local/include/opencv2/core/ocl_genbase.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/ocl_defs.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/opencl_info.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/opencl_svm.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_clamdblas.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_clamdfft.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_clamdblas.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_clamdfft.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_core.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_gl.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp
-- Installing: /usr/local/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp
-- Installing: /usr/local/include/opencv2/core/opengl.hpp
-- Installing: /usr/local/include/opencv2/core/operations.hpp
-- Installing: /usr/local/include/opencv2/core/optim.hpp
-- Installing: /usr/local/include/opencv2/core/ovx.hpp
-- Installing: /usr/local/include/opencv2/core/persistence.hpp
-- Installing: /usr/local/include/opencv2/core/ptr.inl.hpp
-- Installing: /usr/local/include/opencv2/core/saturate.hpp
-- Installing: /usr/local/include/opencv2/core/simd_intrinsics.hpp
-- Installing: /usr/local/include/opencv2/core/softfloat.hpp
-- Installing: /usr/local/include/opencv2/core/sse_utils.hpp
-- Installing: /usr/local/include/opencv2/core/traits.hpp
-- Installing: /usr/local/include/opencv2/core/types.hpp
-- Installing: /usr/local/include/opencv2/core/types_c.h
-- Installing: /usr/local/include/opencv2/core/utility.hpp
-- Installing: /usr/local/include/opencv2/core/utils/allocator_stats.hpp
-- Installing: /usr/local/include/opencv2/core/utils/allocator_stats.impl.hpp
-- Installing: /usr/local/include/opencv2/core/utils/filesystem.hpp
-- Installing: /usr/local/include/opencv2/core/utils/instrumentation.hpp
-- Installing: /usr/local/include/opencv2/core/utils/logger.defines.hpp
-- Installing: /usr/local/include/opencv2/core/utils/logger.hpp
-- Installing: /usr/local/include/opencv2/core/utils/tls.hpp
-- Installing: /usr/local/include/opencv2/core/utils/trace.hpp
-- Installing: /usr/local/include/opencv2/core/va_intel.hpp
-- Installing: /usr/local/include/opencv2/core/version.hpp
-- Installing: /usr/local/include/opencv2/core/vsx_utils.hpp
-- Installing: /usr/local/include/opencv2/core/wimage.hpp
-- Installing: /usr/local/share/licenses/opencv3/SoftFloat-COPYING.txt
-- Installing: /usr/local/lib/libopencv_flann.so.3.4.16
-- Installing: /usr/local/lib/libopencv_flann.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_flann.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_flann.so
-- Installing: /usr/local/include/opencv2/flann.hpp
-- Installing: /usr/local/include/opencv2/flann/all_indices.h
-- Installing: /usr/local/include/opencv2/flann/allocator.h
-- Installing: /usr/local/include/opencv2/flann/any.h
-- Installing: /usr/local/include/opencv2/flann/autotuned_index.h
-- Installing: /usr/local/include/opencv2/flann/composite_index.h
-- Installing: /usr/local/include/opencv2/flann/config.h
-- Installing: /usr/local/include/opencv2/flann/defines.h
-- Installing: /usr/local/include/opencv2/flann/dist.h
-- Installing: /usr/local/include/opencv2/flann/dummy.h
-- Installing: /usr/local/include/opencv2/flann/dynamic_bitset.h
-- Installing: /usr/local/include/opencv2/flann/flann.hpp
-- Installing: /usr/local/include/opencv2/flann/flann_base.hpp
-- Installing: /usr/local/include/opencv2/flann/general.h
-- Installing: /usr/local/include/opencv2/flann/ground_truth.h
-- Installing: /usr/local/include/opencv2/flann/hdf5.h
-- Installing: /usr/local/include/opencv2/flann/heap.h
-- Installing: /usr/local/include/opencv2/flann/hierarchical_clustering_index.h
-- Installing: /usr/local/include/opencv2/flann/index_testing.h
-- Installing: /usr/local/include/opencv2/flann/kdtree_index.h
-- Installing: /usr/local/include/opencv2/flann/kdtree_single_index.h
-- Installing: /usr/local/include/opencv2/flann/kmeans_index.h
-- Installing: /usr/local/include/opencv2/flann/linear_index.h
-- Installing: /usr/local/include/opencv2/flann/logger.h
-- Installing: /usr/local/include/opencv2/flann/lsh_index.h
-- Installing: /usr/local/include/opencv2/flann/lsh_table.h
-- Installing: /usr/local/include/opencv2/flann/matrix.h
-- Installing: /usr/local/include/opencv2/flann/miniflann.hpp
-- Installing: /usr/local/include/opencv2/flann/nn_index.h
-- Installing: /usr/local/include/opencv2/flann/object_factory.h
-- Installing: /usr/local/include/opencv2/flann/params.h
-- Installing: /usr/local/include/opencv2/flann/random.h
-- Installing: /usr/local/include/opencv2/flann/result_set.h
-- Installing: /usr/local/include/opencv2/flann/sampling.h
-- Installing: /usr/local/include/opencv2/flann/saving.h
-- Installing: /usr/local/include/opencv2/flann/simplex_downhill.h
-- Installing: /usr/local/include/opencv2/flann/timer.h
-- Installing: /usr/local/lib/libopencv_imgproc.so.3.4.16
-- Installing: /usr/local/lib/libopencv_imgproc.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_imgproc.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_imgproc.so
-- Installing: /usr/local/include/opencv2/imgproc.hpp
-- Installing: /usr/local/include/opencv2/imgproc/detail/distortion_model.hpp
-- Installing: /usr/local/include/opencv2/imgproc/hal/hal.hpp
-- Installing: /usr/local/include/opencv2/imgproc/hal/interface.h
-- Installing: /usr/local/include/opencv2/imgproc/imgproc.hpp
-- Installing: /usr/local/include/opencv2/imgproc/imgproc_c.h
-- Installing: /usr/local/include/opencv2/imgproc/types_c.h
-- Installing: /usr/local/lib/libopencv_ml.so.3.4.16
-- Installing: /usr/local/lib/libopencv_ml.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_ml.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_ml.so
-- Installing: /usr/local/include/opencv2/ml.hpp
-- Installing: /usr/local/include/opencv2/ml/ml.hpp
-- Installing: /usr/local/include/opencv2/ml/ml.inl.hpp
-- Installing: /usr/local/lib/libopencv_phase_unwrapping.so.3.4.16
-- Installing: /usr/local/lib/libopencv_phase_unwrapping.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_phase_unwrapping.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_phase_unwrapping.so
-- Installing: /usr/local/include/opencv2/phase_unwrapping.hpp
-- Installing: /usr/local/include/opencv2/phase_unwrapping/histogramphaseunwrapping.hpp
-- Installing: /usr/local/include/opencv2/phase_unwrapping/phase_unwrapping.hpp
-- Installing: /usr/local/share/OpenCV/samples/phase_unwrapping/unwrap.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/phase_unwrapping
-- Installing: /usr/local/lib/libopencv_photo.so.3.4.16
-- Installing: /usr/local/lib/libopencv_photo.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_photo.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_photo.so
-- Installing: /usr/local/include/opencv2/photo.hpp
-- Installing: /usr/local/include/opencv2/photo/cuda.hpp
-- Installing: /usr/local/include/opencv2/photo/photo.hpp
-- Installing: /usr/local/include/opencv2/photo/photo_c.h
-- Installing: /usr/local/lib/libopencv_plot.so.3.4.16
-- Installing: /usr/local/lib/libopencv_plot.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_plot.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_plot.so
-- Installing: /usr/local/include/opencv2/plot.hpp
-- Installing: /usr/local/share/OpenCV/samples/plot/plot_demo.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/plot
-- Installing: /usr/local/lib/libopencv_reg.so.3.4.16
-- Installing: /usr/local/lib/libopencv_reg.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_reg.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_reg.so
-- Installing: /usr/local/include/opencv2/reg/map.hpp
-- Installing: /usr/local/include/opencv2/reg/mapaffine.hpp
-- Installing: /usr/local/include/opencv2/reg/mapper.hpp
-- Installing: /usr/local/include/opencv2/reg/mappergradaffine.hpp
-- Installing: /usr/local/include/opencv2/reg/mappergradeuclid.hpp
-- Installing: /usr/local/include/opencv2/reg/mappergradproj.hpp
-- Installing: /usr/local/include/opencv2/reg/mappergradshift.hpp
-- Installing: /usr/local/include/opencv2/reg/mappergradsimilar.hpp
-- Installing: /usr/local/include/opencv2/reg/mapperpyramid.hpp
-- Installing: /usr/local/include/opencv2/reg/mapprojec.hpp
-- Installing: /usr/local/include/opencv2/reg/mapshift.hpp
-- Installing: /usr/local/share/OpenCV/samples/reg/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/reg/LR_05.png
-- Installing: /usr/local/share/OpenCV/samples/reg/LR_06.png
-- Installing: /usr/local/share/OpenCV/samples/reg/home.png
-- Installing: /usr/local/share/OpenCV/samples/reg/map_test.cpp
-- Installing: /usr/local/share/OpenCV/samples/reg/reg_shift.py
-- Up-to-date: /usr/local/share/OpenCV/samples/reg
-- Installing: /usr/local/lib/libopencv_surface_matching.so.3.4.16
-- Installing: /usr/local/lib/libopencv_surface_matching.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_surface_matching.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_surface_matching.so
-- Installing: /usr/local/include/opencv2/surface_matching.hpp
-- Installing: /usr/local/include/opencv2/surface_matching/icp.hpp
-- Installing: /usr/local/include/opencv2/surface_matching/pose_3d.hpp
-- Installing: /usr/local/include/opencv2/surface_matching/ppf_helpers.hpp
-- Installing: /usr/local/include/opencv2/surface_matching/ppf_match_3d.hpp
-- Installing: /usr/local/include/opencv2/surface_matching/t_hash_int.hpp
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/ppf_icp.py
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/ppf_load_match.cpp
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/ppf_normal_computation.cpp
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/data
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/data/rs1_normals.ply
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/data/rs22_proc2.ply
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/data/parasaurolophus_low_normals2.ply
-- Installing: /usr/local/share/OpenCV/samples/surface_matching/data/parasaurolophus_6700.ply
-- Installing: /usr/local/lib/libopencv_video.so.3.4.16
-- Installing: /usr/local/lib/libopencv_video.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_video.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_video.so
-- Installing: /usr/local/include/opencv2/video.hpp
-- Installing: /usr/local/include/opencv2/video/background_segm.hpp
-- Installing: /usr/local/include/opencv2/video/tracking.hpp
-- Installing: /usr/local/include/opencv2/video/tracking_c.h
-- Installing: /usr/local/include/opencv2/video/video.hpp
-- Installing: /usr/local/lib/libopencv_xphoto.so.3.4.16
-- Installing: /usr/local/lib/libopencv_xphoto.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_xphoto.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_xphoto.so
-- Installing: /usr/local/include/opencv2/xphoto.hpp
-- Installing: /usr/local/include/opencv2/xphoto/bm3d_image_denoising.hpp
-- Installing: /usr/local/include/opencv2/xphoto/dct_image_denoising.hpp
-- Installing: /usr/local/include/opencv2/xphoto/inpainting.hpp
-- Installing: /usr/local/include/opencv2/xphoto/tonemap.hpp
-- Installing: /usr/local/include/opencv2/xphoto/white_balance.hpp
-- Installing: /usr/local/share/OpenCV/samples/xphoto/bm3d_image_denoising.cpp
-- Installing: /usr/local/share/OpenCV/samples/xphoto/color_balance.cpp
-- Installing: /usr/local/share/OpenCV/samples/xphoto/color_balance_benchmark.py
-- Installing: /usr/local/share/OpenCV/samples/xphoto/dct_image_denoising.cpp
-- Installing: /usr/local/share/OpenCV/samples/xphoto/inpainting.cpp
-- Installing: /usr/local/share/OpenCV/samples/xphoto/learn_color_balance.py
-- Up-to-date: /usr/local/share/OpenCV/samples/xphoto
-- Installing: /usr/local/lib/libopencv_dnn.so.3.4.16
-- Installing: /usr/local/lib/libopencv_dnn.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_dnn.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_dnn.so
-- Installing: /usr/local/include/opencv2/dnn.hpp
-- Installing: /usr/local/include/opencv2/dnn/all_layers.hpp
-- Installing: /usr/local/include/opencv2/dnn/dict.hpp
-- Installing: /usr/local/include/opencv2/dnn/dnn.hpp
-- Installing: /usr/local/include/opencv2/dnn/dnn.inl.hpp
-- Installing: /usr/local/include/opencv2/dnn/layer.details.hpp
-- Installing: /usr/local/include/opencv2/dnn/layer.hpp
-- Installing: /usr/local/include/opencv2/dnn/shape_utils.hpp
-- Installing: /usr/local/include/opencv2/dnn/utils/inference_engine.hpp
-- Installing: /usr/local/lib/libopencv_features2d.so.3.4.16
-- Installing: /usr/local/lib/libopencv_features2d.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_features2d.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_features2d.so
-- Installing: /usr/local/include/opencv2/features2d.hpp
-- Installing: /usr/local/include/opencv2/features2d/features2d.hpp
-- Installing: /usr/local/include/opencv2/features2d/hal/interface.h
-- Installing: /usr/local/lib/libopencv_freetype.so.3.4.16
-- Installing: /usr/local/lib/libopencv_freetype.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_freetype.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_freetype.so
-- Installing: /usr/local/include/opencv2/freetype.hpp
-- Installing: /usr/local/lib/libopencv_fuzzy.so.3.4.16
-- Installing: /usr/local/lib/libopencv_fuzzy.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_fuzzy.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_fuzzy.so
-- Installing: /usr/local/include/opencv2/fuzzy.hpp
-- Installing: /usr/local/include/opencv2/fuzzy/fuzzy_F0_math.hpp
-- Installing: /usr/local/include/opencv2/fuzzy/fuzzy_F1_math.hpp
-- Installing: /usr/local/include/opencv2/fuzzy/fuzzy_image.hpp
-- Installing: /usr/local/include/opencv2/fuzzy/types.hpp
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/fuzzy_filtering.cpp
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/fuzzy_inpainting.cpp
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/input.png
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/mask1.png
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/mask2.png
-- Installing: /usr/local/share/OpenCV/samples/fuzzy/mask3.png
-- Up-to-date: /usr/local/share/OpenCV/samples/fuzzy
-- Installing: /usr/local/lib/libopencv_hfs.so.3.4.16
-- Installing: /usr/local/lib/libopencv_hfs.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_hfs.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_hfs.so
-- Installing: /usr/local/include/opencv2/hfs.hpp
-- Installing: /usr/local/share/OpenCV/samples/hfs/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/hfs/example.cpp
-- Installing: /usr/local/share/OpenCV/samples/hfs/data
-- Installing: /usr/local/share/OpenCV/samples/hfs/data/002.jpg
-- Installing: /usr/local/share/OpenCV/samples/hfs/data/000.jpg
-- Installing: /usr/local/share/OpenCV/samples/hfs/data/001.jpg
-- Installing: /usr/local/lib/libopencv_img_hash.so.3.4.16
-- Installing: /usr/local/lib/libopencv_img_hash.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_img_hash.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_img_hash.so
-- Installing: /usr/local/include/opencv2/img_hash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/average_hash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/block_mean_hash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/color_moment_hash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/img_hash_base.hpp
-- Installing: /usr/local/include/opencv2/img_hash/marr_hildreth_hash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/phash.hpp
-- Installing: /usr/local/include/opencv2/img_hash/radial_variance_hash.hpp
-- Installing: /usr/local/share/OpenCV/samples/img_hash/hash_samples.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/img_hash
-- Installing: /usr/local/lib/libopencv_imgcodecs.so.3.4.16
-- Installing: /usr/local/lib/libopencv_imgcodecs.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_imgcodecs.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_imgcodecs.so
-- Installing: /usr/local/include/opencv2/imgcodecs.hpp
-- Installing: /usr/local/include/opencv2/imgcodecs/imgcodecs.hpp
-- Installing: /usr/local/include/opencv2/imgcodecs/imgcodecs_c.h
-- Installing: /usr/local/include/opencv2/imgcodecs/ios.h
-- Installing: /usr/local/lib/libopencv_line_descriptor.so.3.4.16
-- Installing: /usr/local/lib/libopencv_line_descriptor.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_line_descriptor.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_line_descriptor.so
-- Installing: /usr/local/include/opencv2/line_descriptor.hpp
-- Installing: /usr/local/include/opencv2/line_descriptor/descriptor.hpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/compute_descriptors.cpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/knn_matching.cpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/lines_extraction.cpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/lsd_lines_extraction.cpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/matching.cpp
-- Installing: /usr/local/share/OpenCV/samples/line_descriptor/radius_matching.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/line_descriptor
-- Installing: /usr/local/lib/libopencv_saliency.so.3.4.16
-- Installing: /usr/local/lib/libopencv_saliency.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_saliency.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_saliency.so
-- Installing: /usr/local/include/opencv2/saliency.hpp
-- Installing: /usr/local/include/opencv2/saliency/saliencyBaseClasses.hpp
-- Installing: /usr/local/include/opencv2/saliency/saliencySpecializedClasses.hpp
-- Installing: /usr/local/share/OpenCV/samples/saliency/computeSaliency.cpp
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8HSV.wS2.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8MAXBGR.wS1.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8I.wS1.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8HSV.wS1.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8I.wS2.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8MAXBGR.idx.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8I.idx.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8HSV.idx.yml.gz
-- Installing: /usr/local/share/OpenCV/samples/saliency/ObjectnessTrainedModel/ObjNessB2W8MAXBGR.wS2.yml.gz
-- Installing: /usr/local/lib/libopencv_shape.so.3.4.16
-- Installing: /usr/local/lib/libopencv_shape.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_shape.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_shape.so
-- Installing: /usr/local/include/opencv2/shape.hpp
-- Installing: /usr/local/include/opencv2/shape/emdL1.hpp
-- Installing: /usr/local/include/opencv2/shape/hist_cost.hpp
-- Installing: /usr/local/include/opencv2/shape/shape.hpp
-- Installing: /usr/local/include/opencv2/shape/shape_distance.hpp
-- Installing: /usr/local/include/opencv2/shape/shape_transformer.hpp
-- Installing: /usr/local/lib/libopencv_text.so.3.4.16
-- Installing: /usr/local/lib/libopencv_text.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_text.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_text.so
-- Installing: /usr/local/include/opencv2/text.hpp
-- Installing: /usr/local/include/opencv2/text/erfilter.hpp
-- Installing: /usr/local/include/opencv2/text/ocr.hpp
-- Installing: /usr/local/include/opencv2/text/textDetector.hpp
-- Installing: /usr/local/share/OpenCV/samples/text/OCRBeamSearch_CNN_model_data.xml.gz
-- Installing: /usr/local/share/OpenCV/samples/text/OCRHMM_knn_model_data.xml.gz
-- Installing: /usr/local/share/OpenCV/samples/text/OCRHMM_transitions_table.xml
-- Installing: /usr/local/share/OpenCV/samples/text/character_recognition.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/cropped_word_recognition.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/deeptextdetection.py
-- Installing: /usr/local/share/OpenCV/samples/text/detect_er_chars.py
-- Installing: /usr/local/share/OpenCV/samples/text/dictnet_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/end_to_end_recognition.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext01.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext02.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext03.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext04.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext05.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext06.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_char01.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_char02.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_char03.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word01.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word01_mask.png
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word02.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word02_mask.png
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word03.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word03_mask.png
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word04.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word04_mask.png
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word05.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_segmented_word05_mask.png
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_word01.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_word02.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_word03.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/scenetext_word04.jpg
-- Installing: /usr/local/share/OpenCV/samples/text/segmented_word_recognition.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/text_recognition_cnn.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/textbox.prototxt
-- Installing: /usr/local/share/OpenCV/samples/text/textbox_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/textdetection.cpp
-- Installing: /usr/local/share/OpenCV/samples/text/textdetection.py
-- Installing: /usr/local/share/OpenCV/samples/text/trained_classifierNM1.xml
-- Installing: /usr/local/share/OpenCV/samples/text/trained_classifierNM2.xml
-- Installing: /usr/local/share/OpenCV/samples/text/trained_classifier_erGrouping.xml
-- Installing: /usr/local/share/OpenCV/samples/text/webcam_demo.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/text
-- Installing: /usr/local/lib/libopencv_videoio.so.3.4.16
-- Installing: /usr/local/lib/libopencv_videoio.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_videoio.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_videoio.so
-- Installing: /usr/local/include/opencv2/videoio.hpp
-- Installing: /usr/local/include/opencv2/videoio/cap_ios.h
-- Installing: /usr/local/include/opencv2/videoio/registry.hpp
-- Installing: /usr/local/include/opencv2/videoio/videoio.hpp
-- Installing: /usr/local/include/opencv2/videoio/videoio_c.h
-- Installing: /usr/local/lib/libopencv_calib3d.so.3.4.16
-- Installing: /usr/local/lib/libopencv_calib3d.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_calib3d.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_calib3d.so
-- Installing: /usr/local/include/opencv2/calib3d.hpp
-- Installing: /usr/local/include/opencv2/calib3d/calib3d.hpp
-- Installing: /usr/local/include/opencv2/calib3d/calib3d_c.h
-- Installing: /usr/local/lib/libopencv_datasets.so.3.4.16
-- Installing: /usr/local/lib/libopencv_datasets.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_datasets.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_datasets.so
-- Installing: /usr/local/include/opencv2/datasets/ar_hmdb.hpp
-- Installing: /usr/local/include/opencv2/datasets/ar_sports.hpp
-- Installing: /usr/local/include/opencv2/datasets/dataset.hpp
-- Installing: /usr/local/include/opencv2/datasets/fr_adience.hpp
-- Installing: /usr/local/include/opencv2/datasets/fr_lfw.hpp
-- Installing: /usr/local/include/opencv2/datasets/gr_chalearn.hpp
-- Installing: /usr/local/include/opencv2/datasets/gr_skig.hpp
-- Installing: /usr/local/include/opencv2/datasets/hpe_humaneva.hpp
-- Installing: /usr/local/include/opencv2/datasets/hpe_parse.hpp
-- Installing: /usr/local/include/opencv2/datasets/ir_affine.hpp
-- Installing: /usr/local/include/opencv2/datasets/ir_robot.hpp
-- Installing: /usr/local/include/opencv2/datasets/is_bsds.hpp
-- Installing: /usr/local/include/opencv2/datasets/is_weizmann.hpp
-- Installing: /usr/local/include/opencv2/datasets/msm_epfl.hpp
-- Installing: /usr/local/include/opencv2/datasets/msm_middlebury.hpp
-- Installing: /usr/local/include/opencv2/datasets/or_imagenet.hpp
-- Installing: /usr/local/include/opencv2/datasets/or_mnist.hpp
-- Installing: /usr/local/include/opencv2/datasets/or_pascal.hpp
-- Installing: /usr/local/include/opencv2/datasets/or_sun.hpp
-- Installing: /usr/local/include/opencv2/datasets/pd_caltech.hpp
-- Installing: /usr/local/include/opencv2/datasets/pd_inria.hpp
-- Installing: /usr/local/include/opencv2/datasets/slam_kitti.hpp
-- Installing: /usr/local/include/opencv2/datasets/slam_tumindoor.hpp
-- Installing: /usr/local/include/opencv2/datasets/tr_chars.hpp
-- Installing: /usr/local/include/opencv2/datasets/tr_icdar.hpp
-- Installing: /usr/local/include/opencv2/datasets/tr_svt.hpp
-- Installing: /usr/local/include/opencv2/datasets/track_alov.hpp
-- Installing: /usr/local/include/opencv2/datasets/track_vot.hpp
-- Installing: /usr/local/include/opencv2/datasets/util.hpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/ar_hmdb.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/ar_hmdb_benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/ar_sports.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/fr_adience.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/fr_lfw.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/fr_lfw_benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/gr_chalearn.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/gr_skig.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/hpe_humaneva.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/hpe_parse.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/ir_affine.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/ir_robot.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/is_bsds.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/is_weizmann.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/msm_epfl.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/msm_middlebury.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/or_imagenet.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/or_mnist.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/or_pascal.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/or_sun.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/pd_caltech.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/pd_inria.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/slam_kitti.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/slam_tumindoor.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_chars.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_chars_benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_icdar.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_icdar_benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_svt.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/tr_svt_benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/datasets/track_vot.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/datasets
-- Installing: /usr/local/lib/libopencv_highgui.so.3.4.16
-- Installing: /usr/local/lib/libopencv_highgui.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_highgui.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_highgui.so
-- Installing: /usr/local/include/opencv2/highgui.hpp
-- Installing: /usr/local/include/opencv2/highgui/highgui.hpp
-- Installing: /usr/local/include/opencv2/highgui/highgui_c.h
-- Installing: /usr/local/lib/libopencv_objdetect.so.3.4.16
-- Installing: /usr/local/lib/libopencv_objdetect.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_objdetect.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_objdetect.so
-- Installing: /usr/local/include/opencv2/objdetect.hpp
-- Installing: /usr/local/include/opencv2/objdetect/detection_based_tracker.hpp
-- Installing: /usr/local/include/opencv2/objdetect/objdetect.hpp
-- Installing: /usr/local/include/opencv2/objdetect/objdetect_c.h
-- Installing: /usr/local/lib/libopencv_rgbd.so.3.4.16
-- Installing: /usr/local/lib/libopencv_rgbd.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_rgbd.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_rgbd.so
-- Installing: /usr/local/include/opencv2/rgbd.hpp
-- Installing: /usr/local/include/opencv2/rgbd/linemod.hpp
-- Installing: /usr/local/share/OpenCV/samples/rgbd/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/rgbd/linemod.cpp
-- Installing: /usr/local/share/OpenCV/samples/rgbd/odometry_evaluation.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/rgbd
-- Installing: /usr/local/lib/libopencv_stereo.so.3.4.16
-- Installing: /usr/local/lib/libopencv_stereo.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_stereo.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_stereo.so
-- Installing: /usr/local/include/opencv2/stereo.hpp
-- Installing: /usr/local/include/opencv2/stereo/descriptor.hpp
-- Installing: /usr/local/include/opencv2/stereo/stereo.hpp
-- Installing: /usr/local/share/OpenCV/samples/stereo/sample.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/stereo
-- Installing: /usr/local/lib/libopencv_structured_light.so.3.4.16
-- Installing: /usr/local/lib/libopencv_structured_light.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_structured_light.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_structured_light.so
-- Installing: /usr/local/include/opencv2/structured_light.hpp
-- Installing: /usr/local/include/opencv2/structured_light/graycodepattern.hpp
-- Installing: /usr/local/include/opencv2/structured_light/sinusoidalpattern.hpp
-- Installing: /usr/local/include/opencv2/structured_light/structured_light.hpp
-- Installing: /usr/local/share/OpenCV/samples/structured_light/cap_pattern.cpp
-- Installing: /usr/local/share/OpenCV/samples/structured_light/capsinpattern.cpp
-- Installing: /usr/local/share/OpenCV/samples/structured_light/pointcloud.cpp
-- Installing: /usr/local/share/OpenCV/samples/structured_light/projectorcalibration.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/structured_light
-- Installing: /usr/local/lib/libopencv_superres.so.3.4.16
-- Installing: /usr/local/lib/libopencv_superres.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_superres.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_superres.so
-- Installing: /usr/local/include/opencv2/superres.hpp
-- Installing: /usr/local/include/opencv2/superres/optical_flow.hpp
-- Installing: /usr/local/lib/libopencv_tracking.so.3.4.16
-- Installing: /usr/local/lib/libopencv_tracking.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_tracking.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_tracking.so
-- Installing: /usr/local/include/opencv2/tracking.hpp
-- Installing: /usr/local/include/opencv2/tracking/feature.hpp
-- Installing: /usr/local/include/opencv2/tracking/kalman_filters.hpp
-- Installing: /usr/local/include/opencv2/tracking/onlineBoosting.hpp
-- Installing: /usr/local/include/opencv2/tracking/onlineMIL.hpp
-- Installing: /usr/local/include/opencv2/tracking/tldDataset.hpp
-- Installing: /usr/local/include/opencv2/tracking/tracker.hpp
-- Installing: /usr/local/include/opencv2/tracking/tracking.hpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/benchmark.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/csrt.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/goturnTracker.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/kcf.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/multiTracker_dataset.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/multitracker.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/multitracker.py
-- Installing: /usr/local/share/OpenCV/samples/tracking/samples_utility.hpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/tracker.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/tracker.py
-- Installing: /usr/local/share/OpenCV/samples/tracking/tracker_dataset.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/tutorial_customizing_cn_tracker.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/tutorial_introduction_to_tracker.cpp
-- Installing: /usr/local/share/OpenCV/samples/tracking/tutorial_multitracker.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/tracking
-- Installing: /usr/local/lib/libopencv_videostab.so.3.4.16
-- Installing: /usr/local/lib/libopencv_videostab.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_videostab.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_videostab.so
-- Installing: /usr/local/include/opencv2/videostab.hpp
-- Installing: /usr/local/include/opencv2/videostab/deblurring.hpp
-- Installing: /usr/local/include/opencv2/videostab/fast_marching.hpp
-- Installing: /usr/local/include/opencv2/videostab/fast_marching_inl.hpp
-- Installing: /usr/local/include/opencv2/videostab/frame_source.hpp
-- Installing: /usr/local/include/opencv2/videostab/global_motion.hpp
-- Installing: /usr/local/include/opencv2/videostab/inpainting.hpp
-- Installing: /usr/local/include/opencv2/videostab/log.hpp
-- Installing: /usr/local/include/opencv2/videostab/motion_core.hpp
-- Installing: /usr/local/include/opencv2/videostab/motion_stabilizing.hpp
-- Installing: /usr/local/include/opencv2/videostab/optical_flow.hpp
-- Installing: /usr/local/include/opencv2/videostab/outlier_rejection.hpp
-- Installing: /usr/local/include/opencv2/videostab/ring_buffer.hpp
-- Installing: /usr/local/include/opencv2/videostab/stabilizer.hpp
-- Installing: /usr/local/include/opencv2/videostab/wobble_suppression.hpp
-- Installing: /usr/local/lib/libopencv_xfeatures2d.so.3.4.16
-- Installing: /usr/local/lib/libopencv_xfeatures2d.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_xfeatures2d.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_xfeatures2d.so
-- Installing: /usr/local/include/opencv2/xfeatures2d.hpp
-- Installing: /usr/local/include/opencv2/xfeatures2d/cuda.hpp
-- Installing: /usr/local/include/opencv2/xfeatures2d/nonfree.hpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/bagofwords_classification.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/export-boostdesc.py
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/gms_matcher.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/pct_signatures.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/pct_webcam.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/shape_transformation.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/surf_matcher.cpp
-- Installing: /usr/local/share/OpenCV/samples/xfeatures2d/video_homography.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/xfeatures2d
-- Installing: /usr/local/lib/libopencv_ximgproc.so.3.4.16
-- Installing: /usr/local/lib/libopencv_ximgproc.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_ximgproc.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_ximgproc.so
-- Installing: /usr/local/include/opencv2/ximgproc.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/brightedges.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/deriche_filter.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/disparity_filter.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/edge_drawing.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/edge_filter.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/edgeboxes.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/estimated_covariance.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/fast_hough_transform.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/fast_line_detector.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/fourier_descriptors.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/lsc.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/paillou_filter.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/peilin.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/ridgefilter.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/seeds.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/segmentation.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/slic.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/sparse_match_interpolator.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/structured_edge_detection.hpp
-- Installing: /usr/local/include/opencv2/ximgproc/weighted_median_filter.hpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/brightedgesexample.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/colorize.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/dericheSample.py
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/deriche_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/disparity_filtering.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/edge_drawing.py
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/edgeboxes_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/edgeboxes_demo.py
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/fast_hough_transform.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/filterdemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/findredlinedpolygonfromgooglemaps.py
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/fld_lines.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/fourier_descriptors_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/graphsegmentation_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/live_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/niblack_thresholding.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/paillou_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/peilin.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/peilin_plane.png
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/peilin_shape.png
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/polygonstanfordoutput.png
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/seeds.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/selectivesearchsegmentation_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/selectivesearchsegmentation_demo.py
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/slic.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/stanford.png
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/structured_edge_detection.cpp
-- Installing: /usr/local/share/OpenCV/samples/ximgproc/thinning.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/ximgproc
-- Installing: /usr/local/lib/libopencv_xobjdetect.so.3.4.16
-- Installing: /usr/local/lib/libopencv_xobjdetect.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_xobjdetect.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_xobjdetect.so
-- Installing: /usr/local/include/opencv2/xobjdetect.hpp
-- Installing: /usr/local/bin/opencv_waldboost_detector
-- Set runtime path of "/usr/local/bin/opencv_waldboost_detector" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_aruco.so.3.4.16
-- Installing: /usr/local/lib/libopencv_aruco.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_aruco.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_aruco.so
-- Installing: /usr/local/include/opencv2/aruco.hpp
-- Installing: /usr/local/include/opencv2/aruco/charuco.hpp
-- Installing: /usr/local/include/opencv2/aruco/dictionary.hpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/calibrate_camera.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/calibrate_camera_charuco.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/create_board.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/create_board_charuco.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/create_diamond.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/create_marker.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/detect_board.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/detect_board_charuco.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/detect_diamonds.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/detect_markers.cpp
-- Installing: /usr/local/share/OpenCV/samples/aruco/detector_params.yml
-- Installing: /usr/local/share/OpenCV/samples/aruco/tutorial_charuco_create_detect.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/aruco
-- Installing: /usr/local/lib/libopencv_bgsegm.so.3.4.16
-- Installing: /usr/local/lib/libopencv_bgsegm.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_bgsegm.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_bgsegm.so
-- Installing: /usr/local/include/opencv2/bgsegm.hpp
-- Installing: /usr/local/share/OpenCV/samples/bgsegm/bgfg.cpp
-- Installing: /usr/local/share/OpenCV/samples/bgsegm/evaluation.py
-- Installing: /usr/local/share/OpenCV/samples/bgsegm/viz.py
-- Installing: /usr/local/share/OpenCV/samples/bgsegm/viz_synthetic_seq.py
-- Up-to-date: /usr/local/share/OpenCV/samples/bgsegm
-- Installing: /usr/local/lib/libopencv_bioinspired.so.3.4.16
-- Installing: /usr/local/lib/libopencv_bioinspired.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_bioinspired.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_bioinspired.so
-- Installing: /usr/local/include/opencv2/bioinspired.hpp
-- Installing: /usr/local/include/opencv2/bioinspired/bioinspired.hpp
-- Installing: /usr/local/include/opencv2/bioinspired/retina.hpp
-- Installing: /usr/local/include/opencv2/bioinspired/retinafasttonemapping.hpp
-- Installing: /usr/local/include/opencv2/bioinspired/transientareassegmentationmodule.hpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/OpenEXRimages_HDR_Retina_toneMapping.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/retinaDemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/OpenEXRimages_HDR_Retina_toneMapping_video.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/retinaDemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/tutorial_code
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/tutorial_code/bioinspired
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/tutorial_code/bioinspired/retina_tutorial.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/cpp/OpenEXRimages_HDR_Retina_toneMapping.cpp
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/ocl
-- Installing: /usr/local/share/OpenCV/samples/bioinspired/ocl/retina_ocl.cpp
-- Installing: /usr/local/lib/libopencv_ccalib.so.3.4.16
-- Installing: /usr/local/lib/libopencv_ccalib.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_ccalib.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_ccalib.so
-- Installing: /usr/local/include/opencv2/ccalib.hpp
-- Installing: /usr/local/include/opencv2/ccalib/multicalib.hpp
-- Installing: /usr/local/include/opencv2/ccalib/omnidir.hpp
-- Installing: /usr/local/include/opencv2/ccalib/randpattern.hpp
-- Installing: /usr/local/share/OpenCV/samples/ccalib/multi_cameras_calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/ccalib/omni_calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/ccalib/omni_stereo_calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/ccalib/random_pattern_calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/ccalib/random_pattern_generator.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/ccalib
-- Installing: /usr/local/lib/libopencv_dnn_objdetect.so.3.4.16
-- Installing: /usr/local/lib/libopencv_dnn_objdetect.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_dnn_objdetect.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_dnn_objdetect.so
-- Installing: /usr/local/include/opencv2/core_detect.hpp
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/image_classification.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/obj_detect.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeNet_solver.prototxt
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/README.md
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeDet_solver.prototxt
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeNet_train_test.prototxt
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeNet_deploy.prototxt
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeDet_deploy.prototxt
-- Installing: /usr/local/share/OpenCV/samples/dnn_objdetect/data/SqueezeDet_train_test.prototxt
-- Installing: /usr/local/lib/libopencv_dpm.so.3.4.16
-- Installing: /usr/local/lib/libopencv_dpm.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_dpm.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_dpm.so
-- Installing: /usr/local/include/opencv2/dpm.hpp
-- Installing: /usr/local/share/OpenCV/samples/dpm/cascade_detect_camera.cpp
-- Installing: /usr/local/share/OpenCV/samples/dpm/cascade_detect_sequence.cpp
-- Installing: /usr/local/share/OpenCV/samples/dpm/data
-- Installing: /usr/local/share/OpenCV/samples/dpm/data/inriaperson.xml
-- Installing: /usr/local/lib/libopencv_face.so.3.4.16
-- Installing: /usr/local/lib/libopencv_face.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_face.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_face.so
-- Installing: /usr/local/include/opencv2/face.hpp
-- Installing: /usr/local/include/opencv2/face/bif.hpp
-- Installing: /usr/local/include/opencv2/face/face_alignment.hpp
-- Installing: /usr/local/include/opencv2/face/facemark.hpp
-- Installing: /usr/local/include/opencv2/face/facemarkAAM.hpp
-- Installing: /usr/local/include/opencv2/face/facemarkLBF.hpp
-- Installing: /usr/local/include/opencv2/face/facemark_train.hpp
-- Installing: /usr/local/include/opencv2/face/facerec.hpp
-- Installing: /usr/local/include/opencv2/face/mace.hpp
-- Installing: /usr/local/include/opencv2/face/predict_collector.hpp
-- Installing: /usr/local/share/OpenCV/samples/face/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/face/Facemark.java
-- Installing: /usr/local/share/OpenCV/samples/face/facemark_demo_aam.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facemark_demo_lbf.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facemark_lbf_fitting.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_eigenfaces.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_fisherfaces.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_lbph.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_save_load.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/facerec_video.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/landmarks_demo.py
-- Installing: /usr/local/share/OpenCV/samples/face/mace_webcam.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/sampleDetectLandmarks.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/sampleDetectLandmarksvideo.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/sample_config_file.xml
-- Installing: /usr/local/share/OpenCV/samples/face/sample_face_swapping.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/sample_train_landmark_detector.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/sample_train_landmark_detector2.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/samplewriteconfigfile.cpp
-- Installing: /usr/local/share/OpenCV/samples/face/etc
-- Installing: /usr/local/share/OpenCV/samples/face/etc/crop_face.py
-- Installing: /usr/local/share/OpenCV/samples/face/etc/at.txt
-- Installing: /usr/local/share/OpenCV/samples/face/etc/create_csv.py
-- Installing: /usr/local/lib/libopencv_optflow.so.3.4.16
-- Installing: /usr/local/lib/libopencv_optflow.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_optflow.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_optflow.so
-- Installing: /usr/local/include/opencv2/optflow.hpp
-- Installing: /usr/local/include/opencv2/optflow/motempl.hpp
-- Installing: /usr/local/include/opencv2/optflow/pcaflow.hpp
-- Installing: /usr/local/include/opencv2/optflow/sparse_matching_gpc.hpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/dis_opticalflow.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/gpc_evaluate.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/gpc_train.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/gpc_train_middlebury.py
-- Installing: /usr/local/share/OpenCV/samples/optflow/gpc_train_sintel.py
-- Installing: /usr/local/share/OpenCV/samples/optflow/motempl.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/motempl.py
-- Installing: /usr/local/share/OpenCV/samples/optflow/optical_flow_benchmark.py
-- Installing: /usr/local/share/OpenCV/samples/optflow/optical_flow_evaluation.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/pcaflow_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/optflow/simpleflow_demo.cpp
-- Up-to-date: /usr/local/share/OpenCV/samples/optflow
-- Installing: /usr/local/lib/libopencv_sfm.so.3.4.16
-- Installing: /usr/local/lib/libopencv_sfm.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_sfm.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_sfm.so
-- Installing: /usr/local/include/opencv2/sfm.hpp
-- Installing: /usr/local/include/opencv2/sfm/conditioning.hpp
-- Installing: /usr/local/include/opencv2/sfm/fundamental.hpp
-- Installing: /usr/local/include/opencv2/sfm/io.hpp
-- Installing: /usr/local/include/opencv2/sfm/numeric.hpp
-- Installing: /usr/local/include/opencv2/sfm/projection.hpp
-- Installing: /usr/local/include/opencv2/sfm/reconstruct.hpp
-- Installing: /usr/local/include/opencv2/sfm/robust.hpp
-- Installing: /usr/local/include/opencv2/sfm/simple_pipeline.hpp
-- Installing: /usr/local/include/opencv2/sfm/triangulation.hpp
-- Installing: /usr/local/share/OpenCV/3rdparty/lib/libcorrespondence.a
-- Installing: /usr/local/share/OpenCV/3rdparty/lib/libmultiview.a
-- Installing: /usr/local/share/OpenCV/3rdparty/lib/libnumeric.a
-- Installing: /usr/local/lib/libopencv_stitching.so.3.4.16
-- Installing: /usr/local/lib/libopencv_stitching.so.3.4
-- Set runtime path of "/usr/local/lib/libopencv_stitching.so.3.4.16" to "/usr/local/lib"
-- Installing: /usr/local/lib/libopencv_stitching.so
-- Installing: /usr/local/include/opencv2/stitching.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/autocalib.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/blenders.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/camera.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/exposure_compensate.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/matchers.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/motion_estimators.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/seam_finders.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/timelapsers.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/util.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/util_inl.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/warpers.hpp
-- Installing: /usr/local/include/opencv2/stitching/detail/warpers_inl.hpp
-- Installing: /usr/local/include/opencv2/stitching/warpers.hpp
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/__init__.py
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/load_config_py2.py
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/load_config_py3.py
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/config.py
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-arm-linux-gnueabihf.so
-- Set runtime path of "/usr/local/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-arm-linux-gnueabihf.so" to "/usr/local/lib"
-- Installing: /usr/local/lib/python3.8/site-packages/cv2/config-3.8.py
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalcatface.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalcatface_extended.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_fullbody.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_lefteye_2splits.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_licence_plate_rus_16stages.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_lowerbody.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_profileface.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_righteye_2splits.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_russian_plate_number.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_smile.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_upperbody.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalcatface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface_improved.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_profileface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_silverware.xml
-- Installing: /usr/local/bin/opencv_traincascade
-- Set runtime path of "/usr/local/bin/opencv_traincascade" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_createsamples
-- Set runtime path of "/usr/local/bin/opencv_createsamples" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_annotation
-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_visualisation
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib"
-- Installing: /usr/local/share/OpenCV/samples/./CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/./samples_utils.cmake
-- Installing: /usr/local/share/OpenCV/samples/data
-- Installing: /usr/local/share/OpenCV/samples/data/right07.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/WindowsLogo.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right02.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/orange.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/pca_test1.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/text_defocus.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/rubberwhale2.png
-- Installing: /usr/local/share/OpenCV/samples/data/letter-recognition.data
-- Installing: /usr/local/share/OpenCV/samples/data/blox.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/data01.xml
-- Installing: /usr/local/share/OpenCV/samples/data/opencv-logo-white.png
-- Installing: /usr/local/share/OpenCV/samples/data/left06.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/stereo_calib.xml
-- Installing: /usr/local/share/OpenCV/samples/data/pic2.png
-- Installing: /usr/local/share/OpenCV/samples/data/Blender_Suzanne1.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/graf3.png
-- Installing: /usr/local/share/OpenCV/samples/data/apple.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/pic5.png
-- Installing: /usr/local/share/OpenCV/samples/data/messi5.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left01.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/calibration.yml
-- Installing: /usr/local/share/OpenCV/samples/data/right13.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/ml.png
-- Installing: /usr/local/share/OpenCV/samples/data/aloeL.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/tree.avi
-- Installing: /usr/local/share/OpenCV/samples/data/right06.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/licenseplate_motion.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right05.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right11.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/intrinsics.yml
-- Installing: /usr/local/share/OpenCV/samples/data/right09.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/starry_night.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right04.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/box.png
-- Installing: /usr/local/share/OpenCV/samples/data/Blender_Suzanne2.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/LinuxLogo.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right08.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left09.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/aloeR.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/pic1.png
-- Installing: /usr/local/share/OpenCV/samples/data/ellipses.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left14.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/building.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/5.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/17.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/6.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/14.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/8.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/3.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/7.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/10.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/1.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/13.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/20.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/11.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/18.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/16.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/15.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/9.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/2.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/19.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/4.png
-- Installing: /usr/local/share/OpenCV/samples/data/shape_sample/12.png
-- Installing: /usr/local/share/OpenCV/samples/data/home.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/gradient.png
-- Installing: /usr/local/share/OpenCV/samples/data/box_in_scene.png
-- Installing: /usr/local/share/OpenCV/samples/data/left12.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/mask.png
-- Installing: /usr/local/share/OpenCV/samples/data/rubberwhale1.png
-- Installing: /usr/local/share/OpenCV/samples/data/left11.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/opencv-logo.png
-- Installing: /usr/local/share/OpenCV/samples/data/Megamind_bugy.avi
-- Installing: /usr/local/share/OpenCV/samples/data/left02.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/basketball2.png
-- Installing: /usr/local/share/OpenCV/samples/data/pic3.png
-- Installing: /usr/local/share/OpenCV/samples/data/digits.png
-- Installing: /usr/local/share/OpenCV/samples/data/board.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/pic4.png
-- Installing: /usr/local/share/OpenCV/samples/data/vtest.avi
-- Installing: /usr/local/share/OpenCV/samples/data/butterfly.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/imageTextN.png
-- Installing: /usr/local/share/OpenCV/samples/data/aero1.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/notes.png
-- Installing: /usr/local/share/OpenCV/samples/data/dnn
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/classification_classes_ILSVRC2012.txt
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/object_detection_classes_yolov3.txt
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/object_detection_classes_pascal_voc.txt
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/enet-classes.txt
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/action_recongnition_kinetics.txt
-- Installing: /usr/local/share/OpenCV/samples/data/dnn/object_detection_classes_coco.txt
-- Installing: /usr/local/share/OpenCV/samples/data/right03.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/stuff.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right01.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/imageTextR.png
-- Installing: /usr/local/share/OpenCV/samples/data/HappyFish.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left05.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/aloeGT.png
-- Installing: /usr/local/share/OpenCV/samples/data/baboon.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/detect_blob.png
-- Installing: /usr/local/share/OpenCV/samples/data/left08.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/chessboard.png
-- Installing: /usr/local/share/OpenCV/samples/data/Megamind.avi
-- Installing: /usr/local/share/OpenCV/samples/data/lena_tmpl.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right12.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left07.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/aero3.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/right.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left04.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/basketball1.png
-- Installing: /usr/local/share/OpenCV/samples/data/pic6.png
-- Installing: /usr/local/share/OpenCV/samples/data/cards.png
-- Installing: /usr/local/share/OpenCV/samples/data/tmpl.png
-- Installing: /usr/local/share/OpenCV/samples/data/left_intrinsics.yml
-- Installing: /usr/local/share/OpenCV/samples/data/left13.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/fruits.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/graf1.png
-- Installing: /usr/local/share/OpenCV/samples/data/lena.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/text_motion.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/left03.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/H1to3p.xml
-- Installing: /usr/local/share/OpenCV/samples/data/left.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/templ.png
-- Installing: /usr/local/share/OpenCV/samples/data/right14.jpg
-- Installing: /usr/local/share/OpenCV/samples/data/sudoku.png
-- Installing: /usr/local/share/OpenCV/samples/data/smarties.png
-- Installing: /usr/local/share/OpenCV/samples/data/chicky_512.png
-- Installing: /usr/local/share/OpenCV/samples/cpp/3calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/cpp/application_trace.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/asift.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/bgfg_segm.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/calibration.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/camshiftdemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/cloning_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/cloning_gui.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/connected_components.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/contours2.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/convexhull.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/cout_mat.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/create_mask.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/dbt_face_detection.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/delaunay2.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/demhist.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/detect_blob.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/detect_mser.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/dft.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/digits.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/distrans.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/drawing.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/edge.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/em.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/facedetect.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/facial_features.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/falsecolor.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/fback.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/ffilldemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/filestorage.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/fitellipse.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/flann_search_dataset.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/grabcut.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/image.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/image_alignment.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/imagelist_creator.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/imagelist_reader.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/inpaint.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/intelligent_scissors.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/intersectExample.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/kalman.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/kmeans.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/laplace.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/letter_recog.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/lkdemo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/logistic_regression.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/lsd_lines.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/mask_tmpl.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/matchmethod_orb_akaze_brisk.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/minarea.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/morphology2.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/neural_network.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/npr_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/opencv_version.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/pca.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/peopledetect.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/phase_corr.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/points_classifier.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/polar_transforms.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/qrcode.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/segment_objects.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/select3dobj.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/shape_example.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/simd_basic.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/smiledetect.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/squares.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/stereo_calib.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/stereo_match.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/stitching.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/stitching_detailed.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/text_skewness_correction.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/train_HOG.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/train_svmsgd.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/travelsalesman.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/tree_engine.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/tvl1_optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_basic.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_camera.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_gphoto2_autofocus.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_gstreamer_pipeline.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_image_sequence.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_intelperc.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_openni.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videocapture_starter.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videostab.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/videowriter_basic.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/warpPerspective_demo.cpp
-- Installing: /usr/local/share/OpenCV/samples/cpp/watershed.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/dnn/classification.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/colorization.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/common.hpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/custom_layers.hpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/human_parsing.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/object_detection.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/openpose.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/segmentation.cpp
-- Installing: /usr/local/share/OpenCV/samples/dnn/text_detection.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/gpu/alpha_comp.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/bgfg_segm.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/cascadeclassifier.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/farneback_optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/generalized_hough.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/hog.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/houghlines.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/morphology.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/multi.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/pyrlk_optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/stereo_match.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/stereo_multi.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/super_resolution.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/surf_keypoint_matcher.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/video_reader.cpp
-- Installing: /usr/local/share/OpenCV/samples/gpu/video_writer.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/tapi/bgfg_segm.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/camshift.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/clahe.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/dense_optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/hog.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/opencl_custom_kernel.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/pyrlk_optical_flow.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/squares.cpp
-- Installing: /usr/local/share/OpenCV/samples/tapi/ufacedetect.cpp
-- Installing: /usr/local/share/OpenCV/samples/opencl/CMakeLists.txt
-- Installing: /usr/local/share/OpenCV/samples/opencl/opencl-opencv-interop.cpp
-- Installing: /usr/local/share/OpenCV/samples/python/_coverage.py
-- Installing: /usr/local/share/OpenCV/samples/python/_doc.py
-- Installing: /usr/local/share/OpenCV/samples/python/asift.py
-- Installing: /usr/local/share/OpenCV/samples/python/browse.py
-- Installing: /usr/local/share/OpenCV/samples/python/calibrate.py
-- Installing: /usr/local/share/OpenCV/samples/python/camera_calibration_show_extrinsics.py
-- Installing: /usr/local/share/OpenCV/samples/python/camshift.py
-- Installing: /usr/local/share/OpenCV/samples/python/coherence.py
-- Installing: /usr/local/share/OpenCV/samples/python/color_histogram.py
-- Installing: /usr/local/share/OpenCV/samples/python/common.py
-- Installing: /usr/local/share/OpenCV/samples/python/contours.py
-- Installing: /usr/local/share/OpenCV/samples/python/deconvolution.py
-- Installing: /usr/local/share/OpenCV/samples/python/demo.py
-- Installing: /usr/local/share/OpenCV/samples/python/dft.py
-- Installing: /usr/local/share/OpenCV/samples/python/digits.py
-- Installing: /usr/local/share/OpenCV/samples/python/digits_adjust.py
-- Installing: /usr/local/share/OpenCV/samples/python/digits_video.py
-- Installing: /usr/local/share/OpenCV/samples/python/distrans.py
-- Installing: /usr/local/share/OpenCV/samples/python/drawing.py
-- Installing: /usr/local/share/OpenCV/samples/python/edge.py
-- Installing: /usr/local/share/OpenCV/samples/python/facedetect.py
-- Installing: /usr/local/share/OpenCV/samples/python/feature_homography.py
-- Installing: /usr/local/share/OpenCV/samples/python/find_obj.py
-- Installing: /usr/local/share/OpenCV/samples/python/fitline.py
-- Installing: /usr/local/share/OpenCV/samples/python/floodfill.py
-- Installing: /usr/local/share/OpenCV/samples/python/gabor_threads.py
-- Installing: /usr/local/share/OpenCV/samples/python/gaussian_mix.py
-- Installing: /usr/local/share/OpenCV/samples/python/grabcut.py
-- Installing: /usr/local/share/OpenCV/samples/python/hist.py
-- Installing: /usr/local/share/OpenCV/samples/python/houghcircles.py
-- Installing: /usr/local/share/OpenCV/samples/python/houghlines.py
-- Installing: /usr/local/share/OpenCV/samples/python/inpaint.py
-- Installing: /usr/local/share/OpenCV/samples/python/kalman.py
-- Installing: /usr/local/share/OpenCV/samples/python/kmeans.py
-- Installing: /usr/local/share/OpenCV/samples/python/laplace.py
-- Installing: /usr/local/share/OpenCV/samples/python/lappyr.py
-- Installing: /usr/local/share/OpenCV/samples/python/letter_recog.py
-- Installing: /usr/local/share/OpenCV/samples/python/lk_homography.py
-- Installing: /usr/local/share/OpenCV/samples/python/lk_track.py
-- Installing: /usr/local/share/OpenCV/samples/python/logpolar.py
-- Installing: /usr/local/share/OpenCV/samples/python/morphology.py
-- Installing: /usr/local/share/OpenCV/samples/python/mosse.py
-- Installing: /usr/local/share/OpenCV/samples/python/mouse_and_match.py
-- Installing: /usr/local/share/OpenCV/samples/python/mser.py
-- Installing: /usr/local/share/OpenCV/samples/python/opencv_version.py
-- Installing: /usr/local/share/OpenCV/samples/python/opt_flow.py
-- Installing: /usr/local/share/OpenCV/samples/python/peopledetect.py
-- Installing: /usr/local/share/OpenCV/samples/python/plane_ar.py
-- Installing: /usr/local/share/OpenCV/samples/python/plane_tracker.py
-- Installing: /usr/local/share/OpenCV/samples/python/qrcode.py
-- Installing: /usr/local/share/OpenCV/samples/python/squares.py
-- Installing: /usr/local/share/OpenCV/samples/python/stereo_match.py
-- Installing: /usr/local/share/OpenCV/samples/python/text_skewness_correction.py
-- Installing: /usr/local/share/OpenCV/samples/python/texture_flow.py
-- Installing: /usr/local/share/OpenCV/samples/python/tst_scene_render.py
-- Installing: /usr/local/share/OpenCV/samples/python/turing.py
-- Installing: /usr/local/share/OpenCV/samples/python/video.py
-- Installing: /usr/local/share/OpenCV/samples/python/video_threaded.py
-- Installing: /usr/local/share/OpenCV/samples/python/video_v4l2.py
-- Installing: /usr/local/share/OpenCV/samples/python/watershed.py

  1. 2022年08月20日 03:53 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールする1

ZYBO Z7-20 の PYNQ 2.7 に OpenCV 3.4.16 をインストールしてみよう。

参考にするのは、”Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.16 をインストールする”だ。
だいたいこの通りにやってみたのが、ZYBO Z7-20 は KV260 に比べてプロセッサも能力が低いし、メモリも少ないので、make できなかった。

OpenCV 3.4.16 を wget して、opencv ディレクトリを作成し、名前を 3.4.16.zip から opencv-3.4.16.zip に変更しながら、移動した。
wget https://github.com/opencv/opencv/archive/3.4.16.zip
mkdir opencv
mv 3.4.16.zip opencv/opencv-3.4.16.zip
cd opencv/

ZYBO_Z7_PYNQ_183_220818.png

opencv_contrib を wget して、名前を 3.4.16.zip から opencv_contrib-3.4.16.zip に変更した。
wget https://github.com/opencv/opencv_contrib/archive/3.4.16.zip
mv 3.4.16.zip opencv_contrib-3.4.16.zip

ZYBO_Z7_PYNQ_184_220818.png

opencv-3.4.16.zip を解凍し、 opencv-3.4.16 ディレクトリを opencv ディレクトリとしてシンボリック・リンクする。
opencv_contrib-3.4.16.zip を解凍し、opencv_contrib-3.4.16 ディレクトリを opencv_contrib ディレクトリとしてシンボリック・リンクする。
環境変数の設定を行った。
unzip -q opencv-3.4.16.zip
ln -s opencv-3.4.16 opencv
unzip -q opencv_contrib-3.4.16.zip
ln -s opencv_contrib-3.4.16 opencv_contrib
export CC=gcc
export CXX=g++

ZYBO_Z7_PYNQ_185_220818.png

build ディレクトリを作成し、 build ディレクトリに cd した。
cmake を実行したらエラーだった。
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_VTK=ON -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF

ZYBO_Z7_PYNQ_186_220818.png

検索してみると”[OpenCV]cmake実行時のエラー”がヒットした。
[OpenCV]cmake実行時のエラー”によると、ソースのpathとbuildのpathを指定すれば cmake が通るそうだ。

cmake にソース・パスとビルド・ディレクトリ・パスを追加して実行したら通った。
cmake -S /home/xilinx/opencv/opencv-3.4.16 -B /home/xilinx/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_VTK=ON -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF
ZYBO_Z7_PYNQ_187_220818.png

ZYBO_Z7_PYNQ_188_220818.png

make を行ったが、まる 1 日経っても 80 % から進んでいない。。。これはどれだけ日にちを掛けてもダメなようだ。
ZYBO_Z7_PYNQ_189_220818.png

cmake のログを貼っておく。

xilinx@pynq:~/opencv/build$ cmake -S /home/xilinx/opencv/opencv-3.4.16 -B /home/xilinx/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_VTK=ON -D INSTALL_C_EXAMPLES=ON -D PYTHON3_EXECUTABLE=/usr/bin/python3.8 -D PYTHON_INCLUDE_DIR=/usr/include/python3.8 -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=OFF
-- The CXX compiler identification is GNU 9.3.0
-- The C compiler identification is GNU 9.3.0
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Detected processor: armv7l
-- Performing Test HAVE_CXX11 (check file: cmake/checks/cxx11.cpp)
-- Performing Test HAVE_CXX11 - Success
-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.18", minimum required is "2.7") 
-- Could NOT find PythonLibs: Found unsuitable version "3.8.2", but required is exact version "2.7.18" (found /usr/lib/arm-linux-gnueabihf/libpython2.7.so)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy.distutils
-- Found PythonInterp: /usr/bin/python3.8 (found suitable version "3.8.2", minimum required is "3.2") 
-- Found PythonLibs: /usr/lib/arm-linux-gnueabihf/libpython3.8.so (found suitable exact version "3.8.2") 
-- Looking for ccache - found (/usr/bin/ccache)
-- Performing Test HAVE_CXX_FSIGNED_CHAR
-- Performing Test HAVE_CXX_FSIGNED_CHAR - Success
-- Performing Test HAVE_C_FSIGNED_CHAR
-- Performing Test HAVE_C_FSIGNED_CHAR - Success
-- Performing Test HAVE_CXX_FFAST_MATH
-- Performing Test HAVE_CXX_FFAST_MATH - Success
-- Performing Test HAVE_C_FFAST_MATH
-- Performing Test HAVE_C_FFAST_MATH - Success
-- Performing Test HAVE_CXX_W
-- Performing Test HAVE_CXX_W - Success
-- Performing Test HAVE_C_W
-- Performing Test HAVE_C_W - Success
-- Performing Test HAVE_CXX_WALL
-- Performing Test HAVE_CXX_WALL - Success
-- Performing Test HAVE_C_WALL
-- Performing Test HAVE_C_WALL - Success
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE
-- Performing Test HAVE_CXX_WERROR_RETURN_TYPE - Success
-- Performing Test HAVE_C_WERROR_RETURN_TYPE
-- Performing Test HAVE_C_WERROR_RETURN_TYPE - Success
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_WERROR_NON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_C_WERROR_NON_VIRTUAL_DTOR
-- Performing Test HAVE_C_WERROR_NON_VIRTUAL_DTOR - Failed
-- Performing Test HAVE_CXX_WERROR_ADDRESS
-- Performing Test HAVE_CXX_WERROR_ADDRESS - Success
-- Performing Test HAVE_C_WERROR_ADDRESS
-- Performing Test HAVE_C_WERROR_ADDRESS - Success
-- Performing Test HAVE_CXX_WERROR_SEQUENCE_POINT
-- Performing Test HAVE_CXX_WERROR_SEQUENCE_POINT - Success
-- Performing Test HAVE_C_WERROR_SEQUENCE_POINT
-- Performing Test HAVE_C_WERROR_SEQUENCE_POINT - Success
-- Performing Test HAVE_CXX_WFORMAT
-- Performing Test HAVE_CXX_WFORMAT - Success
-- Performing Test HAVE_C_WFORMAT
-- Performing Test HAVE_C_WFORMAT - Success
-- Performing Test HAVE_CXX_WERROR_FORMAT_SECURITY
-- Performing Test HAVE_CXX_WERROR_FORMAT_SECURITY - Success
-- Performing Test HAVE_C_WERROR_FORMAT_SECURITY
-- Performing Test HAVE_C_WERROR_FORMAT_SECURITY - Success
-- Performing Test HAVE_CXX_WMISSING_DECLARATIONS
-- Performing Test HAVE_CXX_WMISSING_DECLARATIONS - Success
-- Performing Test HAVE_C_WMISSING_DECLARATIONS
-- Performing Test HAVE_C_WMISSING_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WMISSING_PROTOTYPES
-- Performing Test HAVE_CXX_WMISSING_PROTOTYPES - Failed
-- Performing Test HAVE_C_WMISSING_PROTOTYPES
-- Performing Test HAVE_C_WMISSING_PROTOTYPES - Success
-- Performing Test HAVE_CXX_WSTRICT_PROTOTYPES
-- Performing Test HAVE_CXX_WSTRICT_PROTOTYPES - Failed
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES - Success
-- Performing Test HAVE_CXX_WUNDEF
-- Performing Test HAVE_CXX_WUNDEF - Success
-- Performing Test HAVE_C_WUNDEF
-- Performing Test HAVE_C_WUNDEF - Success
-- Performing Test HAVE_CXX_WINIT_SELF
-- Performing Test HAVE_CXX_WINIT_SELF - Success
-- Performing Test HAVE_C_WINIT_SELF
-- Performing Test HAVE_C_WINIT_SELF - Success
-- Performing Test HAVE_CXX_WPOINTER_ARITH
-- Performing Test HAVE_CXX_WPOINTER_ARITH - Success
-- Performing Test HAVE_C_WPOINTER_ARITH
-- Performing Test HAVE_C_WPOINTER_ARITH - Success
-- Performing Test HAVE_CXX_WSHADOW
-- Performing Test HAVE_CXX_WSHADOW - Success
-- Performing Test HAVE_C_WSHADOW
-- Performing Test HAVE_C_WSHADOW - Success
-- Performing Test HAVE_CXX_WSIGN_PROMO
-- Performing Test HAVE_CXX_WSIGN_PROMO - Success
-- Performing Test HAVE_C_WSIGN_PROMO
-- Performing Test HAVE_C_WSIGN_PROMO - Failed
-- Performing Test HAVE_CXX_WUNINITIALIZED
-- Performing Test HAVE_CXX_WUNINITIALIZED - Success
-- Performing Test HAVE_C_WUNINITIALIZED
-- Performing Test HAVE_C_WUNINITIALIZED - Success
-- Performing Test HAVE_CXX_WSUGGEST_OVERRIDE
-- Performing Test HAVE_CXX_WSUGGEST_OVERRIDE - Success
-- Performing Test HAVE_C_WSUGGEST_OVERRIDE
-- Performing Test HAVE_C_WSUGGEST_OVERRIDE - Failed
-- Performing Test HAVE_CXX_WNO_DELETE_NON_VIRTUAL_DTOR
-- Performing Test HAVE_CXX_WNO_DELETE_NON_VIRTUAL_DTOR - Success
-- Performing Test HAVE_C_WNO_DELETE_NON_VIRTUAL_DTOR
-- Performing Test HAVE_C_WNO_DELETE_NON_VIRTUAL_DTOR - Failed
-- Performing Test HAVE_CXX_WNO_UNNAMED_TYPE_TEMPLATE_ARGS
-- Performing Test HAVE_CXX_WNO_UNNAMED_TYPE_TEMPLATE_ARGS - Failed
-- Performing Test HAVE_C_WNO_UNNAMED_TYPE_TEMPLATE_ARGS
-- Performing Test HAVE_C_WNO_UNNAMED_TYPE_TEMPLATE_ARGS - Failed
-- Performing Test HAVE_CXX_WNO_COMMENT
-- Performing Test HAVE_CXX_WNO_COMMENT - Success
-- Performing Test HAVE_C_WNO_COMMENT
-- Performing Test HAVE_C_WNO_COMMENT - Success
-- Performing Test HAVE_CXX_WIMPLICIT_FALLTHROUGH_3
-- Performing Test HAVE_CXX_WIMPLICIT_FALLTHROUGH_3 - Success
-- Performing Test HAVE_C_WIMPLICIT_FALLTHROUGH_3
-- Performing Test HAVE_C_WIMPLICIT_FALLTHROUGH_3 - Success
-- Performing Test HAVE_CXX_WNO_STRICT_OVERFLOW
-- Performing Test HAVE_CXX_WNO_STRICT_OVERFLOW - Success
-- Performing Test HAVE_C_WNO_STRICT_OVERFLOW
-- Performing Test HAVE_C_WNO_STRICT_OVERFLOW - Success
-- Performing Test HAVE_CXX_FDIAGNOSTICS_SHOW_OPTION
-- Performing Test HAVE_CXX_FDIAGNOSTICS_SHOW_OPTION - Success
-- Performing Test HAVE_C_FDIAGNOSTICS_SHOW_OPTION
-- Performing Test HAVE_C_FDIAGNOSTICS_SHOW_OPTION - Success
-- Performing Test HAVE_CXX_PTHREAD
-- Performing Test HAVE_CXX_PTHREAD - Success
-- Performing Test HAVE_C_PTHREAD
-- Performing Test HAVE_C_PTHREAD - Success
-- Performing Test HAVE_CXX_FOMIT_FRAME_POINTER
-- Performing Test HAVE_CXX_FOMIT_FRAME_POINTER - Success
-- Performing Test HAVE_C_FOMIT_FRAME_POINTER
-- Performing Test HAVE_C_FOMIT_FRAME_POINTER - Success
-- Performing Test HAVE_CXX_FFUNCTION_SECTIONS
-- Performing Test HAVE_CXX_FFUNCTION_SECTIONS - Success
-- Performing Test HAVE_C_FFUNCTION_SECTIONS
-- Performing Test HAVE_C_FFUNCTION_SECTIONS - Success
-- Performing Test HAVE_CXX_FDATA_SECTIONS
-- Performing Test HAVE_CXX_FDATA_SECTIONS - Success
-- Performing Test HAVE_C_FDATA_SECTIONS
-- Performing Test HAVE_C_FDATA_SECTIONS - Success
-- Performing Test HAVE_CXX_MFPU_VFPV3
-- Performing Test HAVE_CXX_MFPU_VFPV3 - Success
-- Performing Test HAVE_CPU_NEON_SUPPORT (check file: cmake/checks/cpu_neon.cpp)
-- Performing Test HAVE_CPU_NEON_SUPPORT - Failed
-- Performing Test HAVE_CXX_MFPU_NEON (check file: cmake/checks/cpu_neon.cpp)
-- Performing Test HAVE_CXX_MFPU_NEON - Success
-- Performing Test HAVE_CPU_FP16_SUPPORT (check file: cmake/checks/cpu_fp16.cpp)
-- Performing Test HAVE_CPU_FP16_SUPPORT - Failed
-- Performing Test HAVE_CXX_MFPU_NEON_FP16_MFP16_FORMAT_IEEE (check file: cmake/checks/cpu_fp16.cpp)
-- Performing Test HAVE_CXX_MFPU_NEON_FP16_MFP16_FORMAT_IEEE - Success
-- Performing Test HAVE_CPU_BASELINE_FLAGS
-- Performing Test HAVE_CPU_BASELINE_FLAGS - Success
-- Performing Test HAVE_CXX_FVISIBILITY_HIDDEN
-- Performing Test HAVE_CXX_FVISIBILITY_HIDDEN - Success
-- Performing Test HAVE_C_FVISIBILITY_HIDDEN
-- Performing Test HAVE_C_FVISIBILITY_HIDDEN - Success
-- Performing Test HAVE_CXX_FVISIBILITY_INLINES_HIDDEN
-- Performing Test HAVE_CXX_FVISIBILITY_INLINES_HIDDEN - Success
-- Performing Test HAVE_C_FVISIBILITY_INLINES_HIDDEN
-- Performing Test HAVE_C_FVISIBILITY_INLINES_HIDDEN - Failed
-- Performing Test HAVE_LINK_AS_NEEDED
-- Performing Test HAVE_LINK_AS_NEEDED - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for posix_memalign
-- Looking for posix_memalign - found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for memalign
-- Looking for memalign - found
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found suitable version "1.2.11", minimum required is "1.2.3") 
-- Found JPEG: /usr/lib/arm-linux-gnueabihf/libjpeg.so (found version "80") 
-- Found TIFF: /usr/lib/arm-linux-gnueabihf/libtiff.so (found version "4.1.0") 
-- Found WebP: /usr/lib/arm-linux-gnueabihf/libwebp.so  
-- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR) 
-- Performing Test HAVE_C_WNO_IMPLICIT_FUNCTION_DECLARATION
-- Performing Test HAVE_C_WNO_IMPLICIT_FUNCTION_DECLARATION - Success
-- Performing Test HAVE_C_WNO_UNINITIALIZED
-- Performing Test HAVE_C_WNO_UNINITIALIZED - Success
-- Performing Test HAVE_C_WNO_MISSING_PROTOTYPES
-- Performing Test HAVE_C_WNO_MISSING_PROTOTYPES - Success
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_PARAMETER
-- Performing Test HAVE_C_WNO_UNUSED_BUT_SET_PARAMETER - Success
-- Performing Test HAVE_C_WNO_MISSING_DECLARATIONS
-- Performing Test HAVE_C_WNO_MISSING_DECLARATIONS - Success
-- Performing Test HAVE_C_WNO_UNUSED
-- Performing Test HAVE_C_WNO_UNUSED - Success
-- Performing Test HAVE_C_WNO_SHADOW
-- Performing Test HAVE_C_WNO_SHADOW - Success
-- Performing Test HAVE_C_WNO_SIGN_COMPARE
-- Performing Test HAVE_C_WNO_SIGN_COMPARE - Success
-- Performing Test HAVE_C_WNO_POINTER_COMPARE
-- Performing Test HAVE_C_WNO_POINTER_COMPARE - Success
-- Performing Test HAVE_C_WNO_ABSOLUTE_VALUE
-- Performing Test HAVE_C_WNO_ABSOLUTE_VALUE - Success
-- Performing Test HAVE_C_WNO_IMPLICIT_FALLTHROUGH
-- Performing Test HAVE_C_WNO_IMPLICIT_FALLTHROUGH - Success
-- Performing Test HAVE_C_WNO_UNUSED_PARAMETER
-- Performing Test HAVE_C_WNO_UNUSED_PARAMETER - Success
-- Performing Test HAVE_C_WNO_STRICT_PROTOTYPES
-- Performing Test HAVE_C_WNO_STRICT_PROTOTYPES - Success
-- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found version "1.2.11") 
-- Found PNG: /usr/lib/arm-linux-gnueabihf/libpng.so (found version "1.6.37") 
-- Looking for /usr/include/libpng/png.h
-- Looking for /usr/include/libpng/png.h - found
-- Found OpenEXR: /usr/lib/arm-linux-gnueabihf/libIlmImf.so
-- Checking for module 'gtk+-3.0'
--   No package 'gtk+-3.0' found
-- Checking for module 'gtk+-2.0'
--   Found gtk+-2.0, version 2.24.32
-- Checking for module 'gthread-2.0'
--   Found gthread-2.0, version 2.64.2
-- Checking for modules 'gstreamer-base-1.0;gstreamer-video-1.0;gstreamer-app-1.0;gstreamer-riff-1.0;gstreamer-pbutils-1.0'
--   No package 'gstreamer-base-1.0' found
--   No package 'gstreamer-video-1.0' found
--   No package 'gstreamer-app-1.0' found
--   No package 'gstreamer-riff-1.0' found
--   No package 'gstreamer-pbutils-1.0' found
-- Checking for modules 'gstreamer-base-0.10;gstreamer-video-0.10;gstreamer-app-0.10;gstreamer-riff-0.10;gstreamer-pbutils-0.10'
--   No package 'gstreamer-base-0.10' found
--   No package 'gstreamer-video-0.10' found
--   No package 'gstreamer-app-0.10' found
--   No package 'gstreamer-riff-0.10' found
--   No package 'gstreamer-pbutils-0.10' found
-- Checking for module 'libdc1394-2'
--   Found libdc1394-2, version 2.2.5
-- Looking for linux/videodev.h
-- Looking for linux/videodev.h - not found
-- Looking for linux/videodev2.h
-- Looking for linux/videodev2.h - found
-- Looking for sys/videoio.h
-- Looking for sys/videoio.h - not found
-- Checking for modules 'libavcodec;libavformat;libavutil;libswscale'
--   Found libavcodec, version 58.54.100
--   Found libavformat, version 58.29.100
--   Found libavutil, version 56.31.100
--   Found libswscale, version 5.5.100
-- Checking for module 'libavresample'
--   Found libavresample, version 4.0.0
-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
-- Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR) 
-- Looking for sgemm_
-- Looking for sgemm_ - not found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Looking for dgemm_
-- Looking for dgemm_ - found
-- Found BLAS: /usr/lib/arm-linux-gnueabihf/libf77blas.so;/usr/lib/arm-linux-gnueabihf/libatlas.so  
-- Looking for cheev_
-- Looking for cheev_ - not found
-- Looking for cheev_
-- Looking for cheev_ - found
-- A library with LAPACK API found.
-- Performing Test HAVE_CXX_WNO_DEPRECATED
-- Performing Test HAVE_CXX_WNO_DEPRECATED - Success
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES
-- Performing Test HAVE_CXX_WNO_MISSING_PROTOTYPES - Failed
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_MISSING_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WNO_SHADOW
-- Performing Test HAVE_CXX_WNO_SHADOW - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_PARAMETER
-- Performing Test HAVE_CXX_WNO_UNUSED_PARAMETER - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_LOCAL_TYPEDEFS
-- Performing Test HAVE_CXX_WNO_UNUSED_LOCAL_TYPEDEFS - Success
-- Performing Test HAVE_CXX_WNO_SIGN_COMPARE
-- Performing Test HAVE_CXX_WNO_SIGN_COMPARE - Success
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO
-- Performing Test HAVE_CXX_WNO_SIGN_PROMO - Success
-- Performing Test HAVE_CXX_WNO_UNDEF
-- Performing Test HAVE_CXX_WNO_UNDEF - Success
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_UNDEFINED_COMPARE
-- Performing Test HAVE_CXX_WNO_TAUTOLOGICAL_UNDEFINED_COMPARE - Failed
-- Performing Test HAVE_CXX_WNO_IGNORED_QUALIFIERS
-- Performing Test HAVE_CXX_WNO_IGNORED_QUALIFIERS - Success
-- Performing Test HAVE_CXX_WNO_EXTRA
-- Performing Test HAVE_CXX_WNO_EXTRA - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_FUNCTION
-- Performing Test HAVE_CXX_WNO_UNUSED_FUNCTION - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_CONST_VARIABLE
-- Performing Test HAVE_CXX_WNO_UNUSED_CONST_VARIABLE - Success
-- Performing Test HAVE_CXX_WNO_SHORTEN_64_TO_32
-- Performing Test HAVE_CXX_WNO_SHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF
-- Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF - Success
-- Performing Test HAVE_CXX_WNO_ENUM_COMPARE_SWITCH
-- Performing Test HAVE_CXX_WNO_ENUM_COMPARE_SWITCH - Failed
-- Performing Test HAVE_CXX_WNO_SUGGEST_OVERRIDE
-- Performing Test HAVE_CXX_WNO_SUGGEST_OVERRIDE - Success
-- Performing Test HAVE_CXX_WNO_INCONSISTENT_MISSING_OVERRIDE
-- Performing Test HAVE_CXX_WNO_INCONSISTENT_MISSING_OVERRIDE - Failed
-- Performing Test HAVE_CXX_WNO_IMPLICIT_FALLTHROUGH
-- Performing Test HAVE_CXX_WNO_IMPLICIT_FALLTHROUGH - Success
-- Performing Test HAVE_CXX_WNO_ARRAY_BOUNDS
-- Performing Test HAVE_CXX_WNO_ARRAY_BOUNDS - Success
-- Performing Test HAVE_CXX_WNO_CLASS_MEMACCESS
-- Performing Test HAVE_CXX_WNO_CLASS_MEMACCESS - Success
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
-- Could NOT find Pylint (missing: PYLINT_EXECUTABLE) 
-- Could NOT find Flake8 (missing: FLAKE8_EXECUTABLE) 
-- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
-- Performing Test HAVE_C_WNO_UNUSED_VARIABLE
-- Performing Test HAVE_C_WNO_UNUSED_VARIABLE - Success
-- Carotene: NEON is not available, disabling carotene...
-- Looking for dlerror in dl
-- Looking for dlerror in dl - found
-- Performing Test HAVE_C_WNO_UNDEF
-- Performing Test HAVE_C_WNO_UNDEF - Success
-- OpenCV Python: during development append to PYTHONPATH: /home/xilinx/opencv/build/python_loader
-- Checking for module 'freetype2'
--   Found freetype2, version 23.1.17
-- Checking for module 'harfbuzz'
--   Found harfbuzz, version 2.6.4
-- freetype2:   YES (ver 23.1.17)
-- harfbuzz:    YES (ver 2.6.4)
-- Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version "")
-- Module opencv_ovis disabled because OGRE3D was not found
-- Checking SFM glog/gflags deps... TRUE
-- CERES support is disabled. Ceres Solver for reconstruction API is required.
-- Checking for module 'tesseract'
--   No package 'tesseract' found
-- Tesseract:   NO
-- Allocator metrics storage type: 'int'
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.ssse3.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.fp16.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx512_skx.cpp
-- Excluding from source files list: <BUILD>/modules/core/test/test_intrin512.avx512_skx.cpp
-- Excluding from source files list: modules/imgproc/src/corner.avx.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/imgwarp.sse4_1.cpp
-- Excluding from source files list: modules/imgproc/src/resize.avx2.cpp
-- Excluding from source files list: modules/imgproc/src/resize.sse4_1.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx2.cpp
-- Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx512_skx.cpp
-- Excluding from source files list: modules/features2d/src/fast.avx2.cpp
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS - Success
-- Performing Test HAVE_CXX_WNO_OVERLOADED_VIRTUAL
-- Performing Test HAVE_CXX_WNO_OVERLOADED_VIRTUAL - Success
-- Excluding from source files list: modules/objdetect/src/haar.avx.cpp
-- xfeatures2d/boostdesc: Download: boostdesc_bgm.i
-- xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
-- xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i
-- xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
-- xfeatures2d/boostdesc: Download: boostdesc_lbgm.i
-- xfeatures2d/vgg: Download: vgg_generated_48.i
-- xfeatures2d/vgg: Download: vgg_generated_64.i
-- xfeatures2d/vgg: Download: vgg_generated_80.i
-- xfeatures2d/vgg: Download: vgg_generated_120.i
-- data: Download: face_landmark_model.dat
-- CERES support is disabled. Ceres Solver for reconstruction API is required.
-- Performing Test HAVE_CXX_WNO_UNUSED_BUT_SET_VARIABLE
-- Performing Test HAVE_CXX_WNO_UNUSED_BUT_SET_VARIABLE - Success
-- Performing Test HAVE_CXX_WNO_DEPRECATED_COPY
-- Performing Test HAVE_CXX_WNO_DEPRECATED_COPY - Success
-- Performing Test HAVE_CXX_WNO_UNUSED_PRIVATE_FIELD
-- Performing Test HAVE_CXX_WNO_UNUSED_PRIVATE_FIELD - Failed
-- 
-- General configuration for OpenCV 3.4.16 =====================================
--   Version control:               unknown
-- 
--   Extra modules:
--     Location (extra):            /home/xilinx/opencv/opencv_contrib/modules
--     Version control (extra):     unknown
-- 
--   Platform:
--     Timestamp:                   2022-08-17T20:33:50Z
--     Host:                        Linux 5.4.0-xilinx-v2020.2 armv7l
--     CMake:                       3.16.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
-- 
--   CPU/HW features:
--     Baseline:
--       requested:                 DETECT
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++11:                       YES
--     C++ Compiler:                /usr/bin/g++  (ver 9.3.0)
--     C++ flags (Release):         -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/gcc
--     C flags (Release):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed  
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed  
--     ccache:                      YES
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann freetype fuzzy hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python3 reg rgbd saliency sfm shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java matlab ovis python2 viz
--     Applications:                tests perf_tests examples apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI: 
--     GTK+:                        YES (ver 2.24.32)
--       GThread :                  YES (ver 2.64.2)
--       GtkGlExt:                  NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/arm-linux-gnueabihf/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/arm-linux-gnueabihf/libwebp.so (ver encoder: 0x020e)
--     PNG:                         /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/arm-linux-gnueabihf/libtiff.so (ver 42 / 4.1.0)
--     JPEG 2000:                   build (ver 1.900.1)
--     OpenEXR:                     /usr/lib/arm-linux-gnueabihf/libImath.so /usr/lib/arm-linux-gnueabihf/libIlmImf.so /usr/lib/arm-linux-gnueabihf/libIex.so /usr/lib/arm-linux-gnueabihf/libHalf.so /usr/lib/arm-linux-gnueabihf/libIlmThread.so (ver 2_3)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (ver 2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (ver 58.54.100)
--       avformat:                  YES (ver 58.29.100)
--       avutil:                    YES (ver 56.31.100)
--       swscale:                   YES (ver 5.5.100)
--       avresample:                YES (ver 4.0.0)
--     GStreamer:                   NO
--     libv4l/libv4l2:              NO
--     v4l/v4l2:                    linux/videodev2.h
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.7)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/xilinx/opencv/opencv-3.4.16/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3.8 (ver 3.8.2)
--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython3.8.so (ver 3.8.2)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.17.4)
--     install path:                lib/python3.8/site-packages/cv2/python-3.8
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xilinx/opencv/build
xilinx@pynq:~/opencv/build$ 

  1. 2022年08月19日 09:43 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 の PYNQ 2.7 上で Jupyter Notebook に画像を表示する1

axis2DMA IP の作成1”と”axis2DMA IP の作成2”で作成した axis2DMA IP を”PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する1”のブロック・デザインに追加して、Jupyter Notebook にカメラ画像を表示しよう。

Viavdo 2022.1 の cam_disp プロジェクトに axis2DMA ディレクトリを作成して、前回作成した export.zip の中身を入れた。
ZYBO_Z7_PYNQ_175_220817.png

IP Catalig に axis2DMA IP を登録した。
ZYBO_Z7_PYNQ_176_220817.png

cam_disp_bd ブロック・デザインに AXI4-Stream Broadcaster と AXI4-Stream Data Width Converter 、 axis2DMA を追加して、配線した。
ZYBO_Z7_PYNQ_177_220817.png

axis_broadcaster_0 の設定を示す。
ZYBO_Z7_PYNQ_180_220817.png

ZYBO_Z7_PYNQ_181_220817.png

axis_dwidth_converter_0 の設定を示す。
Master Interface TDATA Width (bytes) は 4 に設定した。
ZYBO_Z7_PYNQ_182_220817.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_178_220817.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。結果を示す。
ZYBO_Z7_PYNQ_179_220817.png
  1. 2022年08月17日 09:28 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

axis2DMA IP の作成2

axis2DMA IP の作成1”の続き。

ZYBO Z7-20 用の AXI4-Stream から DMA Write する axis2DMA IP を作成するということで、前回はソースコードとテストベンチ・コードを貼って、Vitis HLS 2022.1 の axis2DMA プロジェクトを作成した。今回は、C シミュレーション、C コードの合成を行ったところで、リソース使用量が多くなっていたので、ソースコードを修正して C コードの合成を行った。C/RTL 協調シミュレーション、Export RTL 、Implemenation を行った。

C シミュレーションを行った。
ZYBO_Z7_PYNQ_167_220816.png

axis2DMA/solution1/csim/build ディレクトリに test.jpg が生成された。
ZYBO_Z7_PYNQ_168_220816.png

C コードの合成をした所、リソース使用量が多かった。
ZYBO_Z7_PYNQ_169_220816.png

そこで、ソースコード axis2DMA.cpp の

#pragma HLS PIPELINE II=1 rewind

を削除した。

// axis2DMA.cpp
// 2022/08/15 by marsee
//

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <stdint.h>

int axis2DMA2(hls::stream<ap_axis<32,1,1,1> >& ins,
         int32_t row_size, int32_t col_size, ap_int<32> *out){
#pragma HLS INTERFACE mode=m_axi depth=480000 port=out offset=slave
#pragma HLS INTERFACE mode=s_axilite port=col_size
#pragma HLS INTERFACE mode=s_axilite port=row_size
#pragma HLS INTERFACE mode=axis register_mode=both port=ins register
#pragma HLS INTERFACE mode=s_axilite port=return

    ap_axis<32,1,1,1> val;

    Loop1 : do {    // user が 1 になった時にスタート
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
        ins >> val;
    } while(val.user == 0);

    for(int y=0; y<row_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=480 max=1080 avg=600
        for(int x=0; x<col_size; x++){
#pragma HLS LOOP_TRIPCOUNT min=640 max=1920 avg=800
            if(!(y==0 && x==0)){
                ins >> val;
            }
            out[y*col_size+x] = val.data;
        }
    }

    return(0);
}


もう一度、C コードの合成を行った。今度はリソース使用量は少ない。
ZYBO_Z7_PYNQ_170_220816.png
ZYBO_Z7_PYNQ_171_220816.png

C/RTL 協調シミュレーションを行った。
ZYBO_Z7_PYNQ_172_220816.png

レイテンシは 559804 クロックだった。
559804/480000 ≒ 1.17 だった。

C/RTL 協調シミュレーションの波形の一部を示す。
ZYBO_Z7_PYNQ_173_220816.png

Export RTL を行った。
solution1/impl ディレクトリに export.zip が生成された。

Implementation を行った。(solution2 にしてある)
問題無さそうだ。
ZYBO_Z7_PYNQ_174_220816.png
  1. 2022年08月16日 05:17 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

axis2DMA IP の作成1

AXI4-Stream から DMA Write する axis2DMA IP を作成する。ZYBO Z7-20 用だ。

Vitis HLS 2022.1 の axis2DMA プロジェクトを示す。
ZYBO_Z7_PYNQ_165_220815.png

ソースコードの axis2DMA.cpp を示す。

// axis2DMA.cpp
// 2022/08/15 by marsee
//

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <stdint.h>

int axis2DMA2(hls::stream<ap_axis<32,1,1,1> >& ins,
   int32_t row_size, int32_t col_size, ap_int<32> *out){
#pragma HLS INTERFACE mode=m_axi depth=480000 port=out offset=slave
#pragma HLS INTERFACE mode=s_axilite port=col_size
#pragma HLS INTERFACE mode=s_axilite port=row_size
#pragma HLS INTERFACE mode=axis register_mode=both port=ins register
#pragma HLS INTERFACE mode=s_axilite port=return

    ap_axis<32,1,1,1> val;

    Loop1 : do {    // user が 1 になった時にスタート
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
  ins >> val;
    } while(val.user == 0);

    for(int y=0; y<row_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=480 max=1080 avg=600
        for(int x=0; x<col_size; x++){
#pragma HLS PIPELINE II=1 rewind
#pragma HLS LOOP_TRIPCOUNT min=640 max=1920 avg=800
            if(!(y==0 && x==0)){
    ins >> val;
            }
            out[y*col_size+x] = val.data;
        }
    }

    return(0);
}


テストベンチの axis2DMA_tb.cpp を示す。

// axis2DMA_tb.cpp
// 2022/08/15 by marsee
//

#include <iostream>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"

#include "pict_data.h"

char OUTPUT_PICT_FILE[] = "test.jpg";

int axis2DMA2(hls::stream<ap_axis<32,1,1,1> >& ins,
   int32_t row_size, int32_t col_size, ap_int<32> *out);

int main(){
    hls::stream<ap_axis<32,1,1,1> > ins;
    ap_axis<32,1,1,1> axisp;
    ap_int<32> *wr_pict;

    for(int y=0; y<Y_SIZE; y++){
        for(int x=0; x<X_SIZE; x++){
            axisp.data = (ap_int<32>)pict_file_array[y][x][0] | ((ap_int<32>)pict_file_array[y][x][1])<<8 | ((ap_int<32>)pict_file_array[y][x][2])<<16;

            if(y==0 && x==0)
                axisp.user = 1;
            else
                axisp.user = 0;

            if(x == X_SIZE-1)
                axisp.last = 1;
            else
                axisp.last = 0;

            ins << axisp;
        }
    }

    if((wr_pict =(ap_int<32> *)malloc(sizeof(ap_int<32>) * (X_SIZE * Y_SIZE))) == NULL){
        fprintf(stderr, "Can't allocate wr_pict memory\n");
        exit(1);
    }

    axis2DMA2(ins, Y_SIZE, X_SIZE, wr_pict);

    cv::Mat img(Y_SIZE, X_SIZE, CV_8UC3);
    cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
    for (int y=0; y<Y_SIZE; y++){
        for (int x=0; x<X_SIZE; x++){
            ap_int<32> data = wr_pict[y*X_SIZE+x];
            cv::Vec3b pixel;
            pixel[0] = data & 0xff; // blue
            pixel[1] = (data >> 8) & 0xff; // green
            pixel[2] = (data >> 16) & 0xff; // red
            dst_vec3b(y,x) = pixel;
        }
    }

    cv::imwrite(OUTPUT_PICT_FILE, img);

    return(0);
}


なお、pict_data.h は画像をヘッダファイルにしたもので、”Vitis HLS 2021.2 を使用して画像ファイルを C のヘッダファイルに変換する”で作成したヘッダ・ファイルだ。

ZYBO Z7-20 用なので、Solution メニューから Solution Settings... を選択し、ダイアログを表示された。
config_interface を展開して、m_axi_addr64 のチェックを外して、AXI4-Master のアドレス幅を 32 ビットに変更した。
ZYBO_Z7_PYNQ_166_220815.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、設定を行った。
Project Settings (axis2DMA2st) ダイアログが開く。
左のウインドウで Simulation をクリックする。
axis2DMA2_tb.cpp の CFLAGS を設定する。(設定方法は、Edit CFLAGS... ボタンをクリックする)
axis2DMA2_tb.cpp の CFLAGS に

-I/usr/local/include

を設定した。

Linker Flags に

-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc


を設定した。
ZYBO_Z7_PYNQ_164_220815.png
  1. 2022年08月15日 06:36 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する3

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する2”の続き。

ZYBO Z7-20 の PYNQ 上でカメラ画像を表示することができたので、ソーベル・フィルタを追加して、エッジをリアルタイムに表示させてみようということで、前回は、ハードウェアをエクスポートし、Vitis でアプリケーション・ソフトウェアを修正して、ベアメタル・アプリケーションとして、ソーベル・フィルタを動作させた。今回は、ソーベル・フィルタを PYNQ 上で動作させることができた。

まずは、ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。

Jupyter Notebook ファイルの cam_disp.ipynb ファイルにソーベル・フィルタ制御用コードを追加した。
ZYBO_Z7_PYNQ_163_220813.png

カメラ元画像が表示された。(以前の画像です。sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma の時)
ZYBO_Z7_PYNQ_161_220813.jpg

sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma
を実行すると、ソーベル・フィルタ画像が表示された。(暗いので、私が映っています)
ZYBO_Z7_PYNQ_162_220813.jpg

cam_disp.ipynb の Python コードを貼っておく。

# cam_disp.py
# 2022/08/05 by marsee
# 2022/08/14 : Added Sobel filter.

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay
import time

# Download bitstream
cam_disp = Overlay("./cam_disp.bit")

# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
dma2axis3 = cam_disp.DMA2axis_3buf_0
paracam_inf = cam_disp.paracam_inf_axis_0
bmpd_cont = cam_disp.btimap_disp_cont_axis_0
cam_iic = cam_disp.cam_iic_0
sobel = cam_disp.sobel_axis_RGB24_0

def cam_i2c_init(cam_iic):
cam_iic.write(0x100, 0x2) # reset tx fifo ,address is 0x100, i2c_control_reg
cam_iic.write(0x100, 0x1) # enable i2c

def cam_i2x_write_sync():
time.sleep(0.001) # 1ms wait

def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
cam_iic.write(0x108, bin(0x100 | (device_addr & 0xfe))) # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
cam_iic.write(0x108, bin((write_addr >> 8) & 0xff)) # address upper byte
cam_iic.write(0x108, bin(write_addr & 0xff)) # address lower byte
cam_iic.write(0x108, bin(0x200 | (write_data & 0xff))) # data
cam_i2x_write_sync()

def cam_reg_set(cam_iic, device_addr):
cam_i2c_write(cam_iic, device_addr, 0x3103, 0x93)
cam_i2c_write(cam_iic, device_addr, 0x3008, 0x82)
cam_i2c_write(cam_iic, device_addr, 0x3017, 0x7f)
cam_i2c_write(cam_iic, device_addr, 0x3018, 0xfc)
cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc2)
cam_i2c_write(cam_iic, device_addr, 0x3615, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x3000, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3001, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3002, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3003, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3000, 0xf8)
cam_i2c_write(cam_iic, device_addr, 0x3001, 0x48)
cam_i2c_write(cam_iic, device_addr, 0x3002, 0x5c)
cam_i2c_write(cam_iic, device_addr, 0x3003, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3004, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x3005, 0xb7)
cam_i2c_write(cam_iic, device_addr, 0x3006, 0x43)
cam_i2c_write(cam_iic, device_addr, 0x3007, 0x37)
cam_i2c_write(cam_iic, device_addr, 0x3011, 0x08) # 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(cam_iic, device_addr, 0x3010, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x460c, 0x22)
cam_i2c_write(cam_iic, device_addr, 0x3815, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x370d, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x370c, 0xa0)
cam_i2c_write(cam_iic, device_addr, 0x3602, 0xfc)
cam_i2c_write(cam_iic, device_addr, 0x3612, 0xff)
cam_i2c_write(cam_iic, device_addr, 0x3634, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3613, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3605, 0x7c)
cam_i2c_write(cam_iic, device_addr, 0x3621, 0x09)
cam_i2c_write(cam_iic, device_addr, 0x3622, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3604, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x3603, 0xa7)
cam_i2c_write(cam_iic, device_addr, 0x3603, 0x27)
cam_i2c_write(cam_iic, device_addr, 0x4000, 0x21)
cam_i2c_write(cam_iic, device_addr, 0x401d, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3600, 0x54)
cam_i2c_write(cam_iic, device_addr, 0x3605, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x3606, 0x3f)
cam_i2c_write(cam_iic, device_addr, 0x3c01, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
cam_i2c_write(cam_iic, device_addr, 0x5020, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x5181, 0x79)
cam_i2c_write(cam_iic, device_addr, 0x5182, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5185, 0x22)
cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x5001, 0xff)
cam_i2c_write(cam_iic, device_addr, 0x5500, 0x0a)
cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
cam_i2c_write(cam_iic, device_addr, 0x5080, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x300e, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x4610, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x471d, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x4708, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x3710, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x3632, 0x41)
cam_i2c_write(cam_iic, device_addr, 0x3702, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x3620, 0x37)
cam_i2c_write(cam_iic, device_addr, 0x3631, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x3808, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3809, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x380a, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x380b, 0xe0)
cam_i2c_write(cam_iic, device_addr, 0x380e, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x380f, 0xd0)
cam_i2c_write(cam_iic, device_addr, 0x501f, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61) # RGB565
cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x3501, 0x73)
cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x3824, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x3501, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x350b, 0x7f)
cam_i2c_write(cam_iic, device_addr, 0x380c, 0x0c)
cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x380e, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x3818, 0xc1)
cam_i2c_write(cam_iic, device_addr, 0x3705, 0xdb)
cam_i2c_write(cam_iic, device_addr, 0x370a, 0x81)
cam_i2c_write(cam_iic, device_addr, 0x3801, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x3621, 0xc7)
cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
cam_i2c_write(cam_iic, device_addr, 0x3803, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x3827, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3804, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x3805, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3806, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
cam_i2c_write(cam_iic, device_addr, 0x3a1a, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x3a13, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x3a18, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3a19, 0x7c)
cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x12)
cam_i2c_write(cam_iic, device_addr, 0x3a09, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x0f)
cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xa0)
cam_i2c_write(cam_iic, device_addr, 0x3004, 0xff)
cam_i2c_write(cam_iic, device_addr, 0x350c, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x350d, 0xd0)
cam_i2c_write(cam_iic, device_addr, 0x3500, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3501, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3502, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x350a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x528b, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x528d, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x528e, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x528f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5290, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5297, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5299, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529b, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529d, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529f, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x3030, 0x0b)
cam_i2c_write(cam_iic, device_addr, 0x3a02, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3a03, 0x7d)
cam_i2c_write(cam_iic, device_addr, 0x3a04, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3a14, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3a15, 0x7d)
cam_i2c_write(cam_iic, device_addr, 0x3a16, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x09)
cam_i2c_write(cam_iic, device_addr, 0x3a09, 0x60)
cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xd0)
cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
cam_i2c_write(cam_iic, device_addr, 0x3620, 0x57)
cam_i2c_write(cam_iic, device_addr, 0x3703, 0x98)
cam_i2c_write(cam_iic, device_addr, 0x3704, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x589b, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x589a, 0xc5)
cam_i2c_write(cam_iic, device_addr, 0x528a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x528b, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x528d, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x528e, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x528f, 0x28)
cam_i2c_write(cam_iic, device_addr, 0x5290, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5293, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5383, 0x4e)
cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5385, 0x0f)
cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5388, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x5389, 0x15)
cam_i2c_write(cam_iic, device_addr, 0x538a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538b, 0x31)
cam_i2c_write(cam_iic, device_addr, 0x538c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538d, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538e, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538f, 0x0f)
cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5391, 0xab)
cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5393, 0xa2)
cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5480, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5481, 0x21)
cam_i2c_write(cam_iic, device_addr, 0x5482, 0x36)
cam_i2c_write(cam_iic, device_addr, 0x5483, 0x57)
cam_i2c_write(cam_iic, device_addr, 0x5484, 0x65)
cam_i2c_write(cam_iic, device_addr, 0x5485, 0x71)
cam_i2c_write(cam_iic, device_addr, 0x5486, 0x7d)
cam_i2c_write(cam_iic, device_addr, 0x5487, 0x87)
cam_i2c_write(cam_iic, device_addr, 0x5488, 0x91)
cam_i2c_write(cam_iic, device_addr, 0x5489, 0x9a)
cam_i2c_write(cam_iic, device_addr, 0x548a, 0xaa)
cam_i2c_write(cam_iic, device_addr, 0x548b, 0xb8)
cam_i2c_write(cam_iic, device_addr, 0x548c, 0xcd)
cam_i2c_write(cam_iic, device_addr, 0x548d, 0xdd)
cam_i2c_write(cam_iic, device_addr, 0x548e, 0xea)
cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5490, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x5491, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5492, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x5493, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5494, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x5495, 0x60)
cam_i2c_write(cam_iic, device_addr, 0x5496, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5497, 0xb8)
cam_i2c_write(cam_iic, device_addr, 0x5498, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5499, 0x86)
cam_i2c_write(cam_iic, device_addr, 0x549a, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x549b, 0x5b)
cam_i2c_write(cam_iic, device_addr, 0x549c, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x549d, 0x3b)
cam_i2c_write(cam_iic, device_addr, 0x549e, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x549f, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x54a1, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xed)
cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54a5, 0xc5)
cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54a7, 0xa5)
cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x6c)
cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x41)
cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x54af, 0x16)
cam_i2c_write(cam_iic, device_addr, 0x3406, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04) # 0x04
cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8) # 0xf8
cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x518d, 0x3d)
cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
cam_i2c_write(cam_iic, device_addr, 0x518e, 0x3d)
cam_i2c_write(cam_iic, device_addr, 0x5190, 0x54)
cam_i2c_write(cam_iic, device_addr, 0x518b, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x518c, 0xbd)
cam_i2c_write(cam_iic, device_addr, 0x5187, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x5188, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x5189, 0x6e)
cam_i2c_write(cam_iic, device_addr, 0x518a, 0x68)
cam_i2c_write(cam_iic, device_addr, 0x5186, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x5181, 0x50)
cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
cam_i2c_write(cam_iic, device_addr, 0x5025, 0x82)
cam_i2c_write(cam_iic, device_addr, 0x5583, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5584, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5580, 0x02) # 0x02
cam_i2c_write(cam_iic, device_addr, 0x3633, 0x07)
cam_i2c_write(cam_iic, device_addr, 0x3702, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x3703, 0xb2)
cam_i2c_write(cam_iic, device_addr, 0x3704, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x370b, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x370d, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3620, 0x52)
cam_i2c_write(cam_iic, device_addr, 0x3c00, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x5001, 0xFF)
cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x530d, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5317, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5500, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5502, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5503, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
cam_i2c_write(cam_iic, device_addr, 0x5025, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5383, 0x1f)
cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5385, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5388, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5389, 0xE1)
cam_i2c_write(cam_iic, device_addr, 0x538A, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538B, 0x2B)
cam_i2c_write(cam_iic, device_addr, 0x538C, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538D, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538E, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x538F, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5391, 0xB3)
cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5393, 0xA6)
cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5480, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5481, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x5482, 0x2a)
cam_i2c_write(cam_iic, device_addr, 0x5483, 0x49)
cam_i2c_write(cam_iic, device_addr, 0x5484, 0x56)
cam_i2c_write(cam_iic, device_addr, 0x5485, 0x62)
cam_i2c_write(cam_iic, device_addr, 0x5486, 0x6c)
cam_i2c_write(cam_iic, device_addr, 0x5487, 0x76)
cam_i2c_write(cam_iic, device_addr, 0x5488, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x5489, 0x88)
cam_i2c_write(cam_iic, device_addr, 0x548a, 0x96)
cam_i2c_write(cam_iic, device_addr, 0x548b, 0xa2)
cam_i2c_write(cam_iic, device_addr, 0x548c, 0xb8)
cam_i2c_write(cam_iic, device_addr, 0x548d, 0xcc)
cam_i2c_write(cam_iic, device_addr, 0x548e, 0xe0)
cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5490, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x5491, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x5492, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x5493, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5494, 0x2)
cam_i2c_write(cam_iic, device_addr, 0x5495, 0xa0)
cam_i2c_write(cam_iic, device_addr, 0x5496, 0x2)
cam_i2c_write(cam_iic, device_addr, 0x5497, 0x48)
cam_i2c_write(cam_iic, device_addr, 0x5498, 0x2)
cam_i2c_write(cam_iic, device_addr, 0x5499, 0x26)
cam_i2c_write(cam_iic, device_addr, 0x549a, 0x2)
cam_i2c_write(cam_iic, device_addr, 0x549b, 0xb)
cam_i2c_write(cam_iic, device_addr, 0x549c, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x549d, 0xee)
cam_i2c_write(cam_iic, device_addr, 0x549e, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x549f, 0xd8)
cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54a1, 0xc7)
cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xb3)
cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54a5, 0x90)
cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54a7, 0x62)
cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x27)
cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x09)
cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x54af, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x54b0, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54b1, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x54b2, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54b3, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x54b4, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x54b5, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x54b6, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x54b7, 0xdf)
cam_i2c_write(cam_iic, device_addr, 0x5583, 0x5d)
cam_i2c_write(cam_iic, device_addr, 0x5584, 0x5d)
cam_i2c_write(cam_iic, device_addr, 0x5580, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x5587, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5588, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x558a, 0x09)
cam_i2c_write(cam_iic, device_addr, 0x5589, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5000, 0xcf)
cam_i2c_write(cam_iic, device_addr, 0x5800, 0x48)
cam_i2c_write(cam_iic, device_addr, 0x5801, 0x31)
cam_i2c_write(cam_iic, device_addr, 0x5802, 0x21)
cam_i2c_write(cam_iic, device_addr, 0x5803, 0x1b)
cam_i2c_write(cam_iic, device_addr, 0x5804, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5805, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x5806, 0x29)
cam_i2c_write(cam_iic, device_addr, 0x5807, 0x38)
cam_i2c_write(cam_iic, device_addr, 0x5808, 0x26)
cam_i2c_write(cam_iic, device_addr, 0x5809, 0x17)
cam_i2c_write(cam_iic, device_addr, 0x580a, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x580b, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x580c, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x580d, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x580e, 0x13)
cam_i2c_write(cam_iic, device_addr, 0x580f, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5810, 0x15)
cam_i2c_write(cam_iic, device_addr, 0x5811, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5812, 0x8)
cam_i2c_write(cam_iic, device_addr, 0x5813, 0x5)
cam_i2c_write(cam_iic, device_addr, 0x5814, 0x4)
cam_i2c_write(cam_iic, device_addr, 0x5815, 0x5)
cam_i2c_write(cam_iic, device_addr, 0x5816, 0x9)
cam_i2c_write(cam_iic, device_addr, 0x5817, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5818, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5819, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x581a, 0x4)
cam_i2c_write(cam_iic, device_addr, 0x581b, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x581c, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x581d, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x581e, 0x6)
cam_i2c_write(cam_iic, device_addr, 0x581f, 0x9)
cam_i2c_write(cam_iic, device_addr, 0x5820, 0x12)
cam_i2c_write(cam_iic, device_addr, 0x5821, 0xb)
cam_i2c_write(cam_iic, device_addr, 0x5822, 0x4)
cam_i2c_write(cam_iic, device_addr, 0x5823, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5824, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5825, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x5826, 0x6)
cam_i2c_write(cam_iic, device_addr, 0x5827, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x5828, 0x17)
cam_i2c_write(cam_iic, device_addr, 0x5829, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x582a, 0x9)
cam_i2c_write(cam_iic, device_addr, 0x582b, 0x6)
cam_i2c_write(cam_iic, device_addr, 0x582c, 0x5)
cam_i2c_write(cam_iic, device_addr, 0x582d, 0x6)
cam_i2c_write(cam_iic, device_addr, 0x582e, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x582f, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5830, 0x28)
cam_i2c_write(cam_iic, device_addr, 0x5831, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5832, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5833, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5834, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5835, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x5836, 0x15)
cam_i2c_write(cam_iic, device_addr, 0x5837, 0x1d)
cam_i2c_write(cam_iic, device_addr, 0x5838, 0x6e)
cam_i2c_write(cam_iic, device_addr, 0x5839, 0x39)
cam_i2c_write(cam_iic, device_addr, 0x583a, 0x27)
cam_i2c_write(cam_iic, device_addr, 0x583b, 0x1f)
cam_i2c_write(cam_iic, device_addr, 0x583c, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x583d, 0x23)
cam_i2c_write(cam_iic, device_addr, 0x583e, 0x2f)
cam_i2c_write(cam_iic, device_addr, 0x583f, 0x41)
cam_i2c_write(cam_iic, device_addr, 0x5840, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5841, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5842, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5843, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5844, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5845, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5846, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5847, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5848, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5849, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x584a, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x584b, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x584c, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x584d, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x584e, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x584f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5850, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5851, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x5852, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x5853, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5854, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5855, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5856, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5857, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x5858, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x5859, 0xe)
cam_i2c_write(cam_iic, device_addr, 0x585a, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x585b, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x585c, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x585d, 0xa)
cam_i2c_write(cam_iic, device_addr, 0x585e, 0x9)
cam_i2c_write(cam_iic, device_addr, 0x585f, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5860, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x5861, 0xb)
cam_i2c_write(cam_iic, device_addr, 0x5862, 0xd)
cam_i2c_write(cam_iic, device_addr, 0x5863, 0x7)
cam_i2c_write(cam_iic, device_addr, 0x5864, 0x17)
cam_i2c_write(cam_iic, device_addr, 0x5865, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5866, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x5867, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x5868, 0x16)
cam_i2c_write(cam_iic, device_addr, 0x5869, 0x12)
cam_i2c_write(cam_iic, device_addr, 0x586a, 0x1b)
cam_i2c_write(cam_iic, device_addr, 0x586b, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x586c, 0x16)
cam_i2c_write(cam_iic, device_addr, 0x586d, 0x16)
cam_i2c_write(cam_iic, device_addr, 0x586e, 0x18)
cam_i2c_write(cam_iic, device_addr, 0x586f, 0x1f)
cam_i2c_write(cam_iic, device_addr, 0x5870, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x5871, 0x16)
cam_i2c_write(cam_iic, device_addr, 0x5872, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x5873, 0xf)
cam_i2c_write(cam_iic, device_addr, 0x5874, 0x13)
cam_i2c_write(cam_iic, device_addr, 0x5875, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x5876, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x5877, 0x17)
cam_i2c_write(cam_iic, device_addr, 0x5878, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5879, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x587a, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x587b, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x587c, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x587d, 0x1c)
cam_i2c_write(cam_iic, device_addr, 0x587e, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x587f, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5880, 0x1b)
cam_i2c_write(cam_iic, device_addr, 0x5881, 0x1f)
cam_i2c_write(cam_iic, device_addr, 0x5882, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5883, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5884, 0x1d)
cam_i2c_write(cam_iic, device_addr, 0x5885, 0x1e)
cam_i2c_write(cam_iic, device_addr, 0x5886, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x5887, 0x1a)
cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x528b, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x528c, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x528d, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x528e, 0x40)
cam_i2c_write(cam_iic, device_addr, 0x528f, 0x50)
cam_i2c_write(cam_iic, device_addr, 0x5290, 0x60)
cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5295, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5680, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5681, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5684, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5685, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x5180, 0xff)
cam_i2c_write(cam_iic, device_addr, 0x5181, 0x52)
cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
cam_i2c_write(cam_iic, device_addr, 0x5186, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5187, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5188, 0x14)
cam_i2c_write(cam_iic, device_addr, 0x5189, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x518a, 0x60)
cam_i2c_write(cam_iic, device_addr, 0x518b, 0xa2)
cam_i2c_write(cam_iic, device_addr, 0x518c, 0x9c)
cam_i2c_write(cam_iic, device_addr, 0x518d, 0x36)
cam_i2c_write(cam_iic, device_addr, 0x518e, 0x34)
cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
cam_i2c_write(cam_iic, device_addr, 0x5190, 0x4c)
cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8)
cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
cam_i2c_write(cam_iic, device_addr, 0x5196, 0x03)
cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x5198, 0x05)
cam_i2c_write(cam_iic, device_addr, 0x5199, 0x2f)
cam_i2c_write(cam_iic, device_addr, 0x519a, 0x04)
cam_i2c_write(cam_iic, device_addr, 0x519b, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x519c, 0x06)
cam_i2c_write(cam_iic, device_addr, 0x519d, 0xa0)
cam_i2c_write(cam_iic, device_addr, 0x519e, 0xa0)
cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
cam_i2c_write(cam_iic, device_addr, 0x3800, 0x1)
cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
cam_i2c_write(cam_iic, device_addr, 0x3802, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x3803, 0x8)
cam_i2c_write(cam_iic, device_addr, 0x3804, 0x5)
cam_i2c_write(cam_iic, device_addr, 0x3805, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x3806, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3808, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x3809, 0x20)
cam_i2c_write(cam_iic, device_addr, 0x380a, 0x2)
cam_i2c_write(cam_iic, device_addr, 0x380b, 0x58)
cam_i2c_write(cam_iic, device_addr, 0x380c, 0xc)
cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
cam_i2c_write(cam_iic, device_addr, 0x380e, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
cam_i2c_write(cam_iic, device_addr, 0x5001, 0x7f)
cam_i2c_write(cam_iic, device_addr, 0x5680, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5681, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5682, 0x5)
cam_i2c_write(cam_iic, device_addr, 0x5683, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5684, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5685, 0x0)
cam_i2c_write(cam_iic, device_addr, 0x5686, 0x3)
cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
cam_i2c_write(cam_iic, device_addr, 0x3815, 0x02)
cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
cam_i2c_write(cam_iic, device_addr, 0x3818, 0x81) # No Mirror
cam_i2c_write(cam_iic, device_addr, 0x3621, 0xa7)

cam_i2c_write(cam_iic, device_addr, 0x4740, 0x21)

cam_i2c_write(cam_iic, device_addr, 0x501e, 0x2a)
cam_i2c_write(cam_iic, device_addr, 0x5002, 0x78)
cam_i2c_write(cam_iic, device_addr, 0x501f, 0x01)
cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61)

# frame buffer alocate
height = 600
width = 800
buffer0 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer1 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer2 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)

# frame buffer resister set
vflip_dmaw.register_map.fb0_1 = buffer0.physical_address
vflip_dmaw.register_map.fb0_2 = 0
vflip_dmaw.register_map.fb1_1 = buffer1.physical_address
vflip_dmaw.register_map.fb1_2 = 0
vflip_dmaw.register_map.fb2_1 = buffer2.physical_address
vflip_dmaw.register_map.fb2_2 = 0

dma2axis3.register_map.fb0 = buffer0.physical_address
dma2axis3.register_map.fb1 = buffer1.physical_address
dma2axis3.register_map.fb2 = buffer2.physical_address
dma2axis3.register_map.mode = 0 # DMA_WRITE_MODE

sobel.register_map.row_size = height
sobel.register_map.col_size = width
sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma

# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81

# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)

# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)

# bitmap_disp_cont start
bmpd_cont.write(0x0, 0x0)

# sobel_axis_RGB24 start
sobel.register_map.CTRL = 0x81

# dma2axis_3buf start and auto repeat
dma2axis3.register_map.CTRL = 0x81

#sobel filter on
sobel.register_map.function_r = 1 # SOBELwAxiVdma

# sobel filter off
sobel.register_map.function_r = 0 # ORG_IMGwAxiVdma

  1. 2022年08月14日 04:38 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する2

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する1”の続き。

ZYBO Z7-20 の PYNQ 上でカメラ画像を表示することができたので、ソーベル・フィルタを追加して、エッジをリアルタイムに表示させてみようということで、前回は、ソーベル・フィルタ IP をブロック・デザインに追加し、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、ハードウェアをエクスポートし、Vitis でアプリケーション・ソフトウェアを修正して、ベアメタル・アプリケーションとして、ソーベル・フィルタを動作させた。

Vivado でハードウェアをエクスポートした。
cam_disp_bd_wrapper.xsa ファイルが更新された。

Vitis で、ソーベル・フィルタ IP を使用するために、cam_disp.c を書き換えてビルドし、成功した。
ZYBO_Z7_PYNQ_159_220813.png

アプリケーション・ソフトウェアを起動すると、ターミナルに表示された。

0 キーを押すとカメラ元画像が表示された。
ZYBO_Z7_PYNQ_161_220813.jpg

1 キーを押すと、ソーベル・フィルタ画像が表示された。
ZYBO_Z7_PYNQ_162_220813.jpg

9 を押すと、終了した。
ZYBO_Z7_PYNQ_160_220813.png

cam_disp.c を貼っておく。

// cam_disp.c
// 2022/08/01 by marsee
// 2022/08/13 : Added Sobel filter.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "xil_io.h"
#include "xparameters.h"

#include "xvflip_dma_write.h"
#include "xdma2axis_3buf.h"
#include "xsobel_axis_rgb24.h"

#define CAMERA_DATA_DMA_ADDR0    0x10000000
#define CAMERA_DATA_DMA_ADDR1    0x10200000
#define CAMERA_DATA_DMA_ADDR2    0x10400000

#define HORIZONTAL_PIXELS   800
#define VERTICAL_LINES      600

#define ORG_IMGwAxiVdma 0
#define SOBELwAxiVdma   1
#define ORG_IMGwAxiDma  2
#define SOBELwAxiDma    3

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);

void cam_i2c_init(volatile uint32_t *ov5642_axi_iic) {
    ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
    ov5642_axi_iic[64] = 0x1; // enable i2c
}

void cam_i2x_write_sync(void) {
    // unsigned c;

    // c = *cam_i2c_rx_fifo;
    // while ((c & 0x84) != 0x80)
    // c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
    usleep(1000);
}

void cam_i2c_write(volatile uint32_t *ov5642_axi_iic, uint32_t device_addr, uint32_t write_addr, uint32_t write_data){
    ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    ov5642_axi_iic[66] = (write_addr >> 8) & 0xff;  // address upper byte
    ov5642_axi_iic[66] = write_addr & 0xff;           // address lower byte
    ov5642_axi_iic[66] = 0x200 | (write_data & 0xff);      // data
    cam_i2x_write_sync();
}

int main(){
    XVflip_dma_write XVfilp_dma_write_ap;
    XDma2axis_3buf XDma2s3b_ap;
    XSobel_axis_rgb24 XSobels_ap;
    int inbyte_in;

    XVflip_dma_write_Initialize(&XVfilp_dma_write_ap, 0);
    XDma2axis_3buf_Initialize(&XDma2s3b_ap, 0);
    XSobel_axis_rgb24_Initialize(&XSobels_ap, 0);

    XVflip_dma_write_Set_fb0(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XVflip_dma_write_Set_fb1(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XVflip_dma_write_Set_fb2(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_fb0(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb1(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XDma2axis_3buf_Set_fb2(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_mode(&XDma2s3b_ap, 0); // DMA_WRITE_MODE

    // vflip_dma_write start
    XVflip_dma_write_Start(&XVfilp_dma_write_ap);
    XVflip_dma_write_EnableAutoRestart(&XVfilp_dma_write_ap);

    // CMOS Camera initialize, ov5642
    cam_i2c_init((volatile uint32_t *)XPAR_AXI_IIC_0_BASEADDR);
    cam_reg_set((volatile uint32_t *)(XPAR_AXI_IIC_0_BASEADDR), (uint32_t)0x78); // OV5642 register set
    Xil_Out32(XPAR_PARACAM_INF_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // ov5642 AXI4-Stream Start
    Xil_Out32((XPAR_PARACAM_INF_AXIS_0_BASEADDR+4), 0);

    // bitmap_disp_cont_axis start
    Xil_Out32(XPAR_BITMAP_DISP_CONT_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // dummy address, start

    // sobel_axis_rgb24 set and start
    XSobel_axis_rgb24_Set_row_size(&XSobels_ap, (u32)VERTICAL_LINES);
    XSobel_axis_rgb24_Set_col_size(&XSobels_ap, (u32)HORIZONTAL_PIXELS);
    XSobel_axis_rgb24_Set_function_r(&XSobels_ap, ORG_IMGwAxiVdma);
    XSobel_axis_rgb24_Start(&XSobels_ap);
    XSobel_axis_rgb24_EnableAutoRestart(&XSobels_ap);

    // DMA2axis start
    XDma2axis_3buf_Start(&XDma2s3b_ap);
    XDma2axis_3buf_EnableAutoRestart(&XDma2s3b_ap);

    while(1){
        printf("\nDisplay original camera image = press the 0 key\n");
        printf("Display the Sobel filtered image = press the 1 key\n");
        printf("press 9 to exit\n");
        fflush(stdout);
        inbyte_in = inbyte();
        if(inbyte_in == 0x39){
            break;
        } else if(inbyte_in == 0x30){
            XSobel_axis_rgb24_Set_function_r(&XSobels_ap, ORG_IMGwAxiVdma);
        } else if(inbyte_in == 0x31){
            XSobel_axis_rgb24_Set_function_r(&XSobels_ap, SOBELwAxiVdma);
        }
    }

    return(0);
}

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
    cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
    cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
    cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
    cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
    cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
    cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
    cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
    cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
    cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
    cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
    cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
    cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
    cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
    cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
    cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
    cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
    cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
    cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);

    cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);

    cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);

    return(0);
}

  1. 2022年08月13日 04:34 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

PYNQ で動作する ZYBO Z7-20 用カメラ画像表示システムにソーベル・フィルタを追加する1

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる3”で ZYBO Z7-20 の PYNQ 上でカメラ画像を表示することができた。今度は、その回路にソーベル・フィルタを追加して、エッジをリアルタイムに表示させてみよう。

ソーベル・フィルタは
RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2022.1 で作成する1
RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2022.1 で作成する2
で作成済みのため、そのまま使用する。

sobel_axis_RGB24 IP を cam_disp プロジェクトに追加した。
更にバス幅が合わないので、AXI4-Stream Subset Converter を追加して、バス幅を合わせた。
変更したブロック・デザインを示す。
ZYBO_Z7_PYNQ_154_220812.png

axis_subst_converter_0 の設定を示す。
AXI4-Stream のデータバス幅を変更した。具体的には、32 ビット幅のデータバスから 24 ビット幅のデータバスに変更した。
ZYBO_Z7_PYNQ_155_220812.png

axis_subst_converter_1 の設定を示す。
AXI4-Stream のデータバス幅を変更した。具体的には、24 ビット幅のデータバスから 32 ビット幅のデータバスに変更した。
ZYBO_Z7_PYNQ_156_220812.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_157_220812.png

論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。
ZYBO_Z7_PYNQ_158_220812.png
  1. 2022年08月12日 09:11 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる3

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる2”の続き。

ZYBO Z7-20 用カメラ画像表示システムの作成7”で完成したビットストリームを PYNQ で動作させてみようということで、前回は、途中で Linux カーネルが落ちた原因を探るため、System ILA を入れて、まずは、動作時の動作を見るため、ZYBO Z7-20 を JTAG モードで起動して、ベアメタル・アプリケーションを使用して、カメラ画像表示時の波形を見た。今回は、そのデバッグを行って、vflip_dma_write IP の設定がおかしいことに気付いた。vflip_dma_write IP の設定を修正したら、カメラ画像が表示できた。

まずは、ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示した。

cam_disp.bit と cam_disp.hwh を削除した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。
ZYBO_Z7_PYNQ_146_220811.png

cam_disp.ipynb を開いた。

Vivado で Flow Navigator から Open Hardware Manager を展開して、Open Target をクリックし、Auto Connect を選択して、ILA ダッシュボードを表示した。

processing_system7_0_M_AXI_GP0, ps7_0_axi_periph_M00_AXI, ps7_0_axi_periph_M01_AXI, ps7_0_axi_periph_M02_AXI, ps7_0_axi_periph_M03_AXI, ps7_0_axi_periph_M04_AXI の AWVALID の OR 条件でトリガを掛けた。
ZYBO_Z7_PYNQ_147_220811.png

cam_disp.ipynb を実行していって、vflip_dma_write IP の設定部分で vflip_dma_write IP の設定部分と dma2axis_3buf IP の設定部分とにコードを分離した。
ZYBO_Z7_PYNQ_148_220811.png

vflip_dma_write IP の設定部分を実行しても ILA ダッシュボードのトリガが掛からなかった。この部分がバグっているようだ。

次に dma2axis_3buf IP の設定部分を実行するとトリガが掛かった。
ZYBO_Z7_PYNQ_149_220811.png

vflip_dma_write IP の xflip_dma_write_hw.h を見ると、AXI4-Master のアドレスが 64 ビット・アドレスだった。。。orz
ZYBO_Z7_PYNQ_150_220811.png

64 ビット・アドレス用にコードを修正した。
ZYBO_Z7_PYNQ_151_220811.png

# frame buffer resister set
vflip_dmaw.register_map.fb0_1 = buffer0.physical_address
vflip_dmaw.register_map.fb0_2 = 0
vflip_dmaw.register_map.fb1_1 = buffer1.physical_address
vflip_dmaw.register_map.fb1_2 = 0
vflip_dmaw.register_map.fb2_1 = buffer2.physical_address
vflip_dmaw.register_map.fb2_2 = 0


これを実行すると、ILA ダッシュボードのトリガが掛かった。
ZYBO_Z7_PYNQ_152_220811.png

最初から実行すると、(何回か実行したが)カメラ画像を表示することができた。
成功だ。
ZYBO_Z7_PYNQ_153_220811.png

PYNQ 上でカメラ画像を表示することができた。

現在の cam_disp.ipynb の Python コードを貼っておく。

# cam_disp.py
# 2022/08/05 by marsee

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay
import time

# Download bitstream
cam_disp = Overlay("./cam_disp.bit")

# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
dma2axis3 = cam_disp.DMA2axis_3buf_0
paracam_inf = cam_disp.paracam_inf_axis_0
bmpd_cont = cam_disp.btimap_disp_cont_axis_0
cam_iic = cam_disp.cam_iic_0

def cam_i2c_init(cam_iic):
    cam_iic.write(0x100, 0x2)   # reset tx fifo ,address is 0x100, i2c_control_reg
    cam_iic.write(0x100, 0x1)   # enable i2c

def cam_i2x_write_sync():
    time.sleep(0.001) # 1ms wait

def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
    cam_iic.write(0x108, bin(0x100 | (device_addr & 0xfe)))   # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    cam_iic.write(0x108, bin((write_addr >> 8) & 0xff))      # address upper byte
    cam_iic.write(0x108, bin(write_addr & 0xff)) # address lower byte
    cam_iic.write(0x108, bin(0x200 | (write_data & 0xff)))   # data
    cam_i2x_write_sync()

def cam_reg_set(cam_iic, device_addr):
    cam_i2c_write(cam_iic, device_addr, 0x3103, 0x93)
    cam_i2c_write(cam_iic, device_addr, 0x3008, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x3017, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x3018, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc2)
    cam_i2c_write(cam_iic, device_addr, 0x3615, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x5c)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3005, 0xb7)
    cam_i2c_write(cam_iic, device_addr, 0x3006, 0x43)
    cam_i2c_write(cam_iic, device_addr, 0x3007, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3011, 0x08) # 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(cam_iic, device_addr, 0x3010, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x460c, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x370c, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3602, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3612, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x3634, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3613, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3622, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3604, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0xa7)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x4000, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x401d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3600, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3606, 0x3f)
    cam_i2c_write(cam_iic, device_addr, 0x3c01, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x5020, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x79)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x0a)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5080, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x300e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x4610, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x471d, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x4708, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x3710, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3632, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3631, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61) # RGB565
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x73)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3824, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0xc1)
    cam_i2c_write(cam_iic, device_addr, 0x3705, 0xdb)
    cam_i2c_write(cam_iic, device_addr, 0x370a, 0x81)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3827, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a1a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a13, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a18, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a19, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x350c, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x350d, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3500, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3030, 0x0b)
    cam_i2c_write(cam_iic, device_addr, 0x3a02, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a03, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a04, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a14, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a15, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a16, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0x98)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x589b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x589a, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x4e)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x538a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538b, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x538c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538d, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538f, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xab)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x65)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x71)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x87)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x91)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x9a)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0xaa)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xcd)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xdd)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xea)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x86)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0x5b)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0x3b)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xed)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0xa5)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x3406, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04) # 0x04
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8) # 0xf8
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0xbd)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x68)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x02) # 0x02
    cam_i2c_write(cam_iic, device_addr, 0x3633, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0xb2)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x370b, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x3c00, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xFF)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5503, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0xE1)
    cam_i2c_write(cam_iic, device_addr, 0x538A, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538B, 0x2B)
    cam_i2c_write(cam_iic, device_addr, 0x538C, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538D, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538E, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538F, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xB3)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xA6)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x49)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x56)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x76)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x88)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0x96)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xcc)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0xee)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0xd8)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xb3)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0x90)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b1, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54b2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b3, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b4, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54b5, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x54b6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b7, 0xdf)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5587, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5588, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x558a, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x5589, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0xcf)
    cam_i2c_write(cam_iic, device_addr, 0x5800, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5801, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x5802, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5803, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5804, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5805, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5806, 0x29)
    cam_i2c_write(cam_iic, device_addr, 0x5807, 0x38)
    cam_i2c_write(cam_iic, device_addr, 0x5808, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x5809, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x580a, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x580b, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580c, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x580d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580e, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x580f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5810, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5811, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5812, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x5813, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5814, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5815, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5816, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5817, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5818, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5819, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x581a, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x581b, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581c, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581d, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x581e, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x581f, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5820, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x5821, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5822, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5823, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5824, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5825, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x5826, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x5827, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5828, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5829, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x582a, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x582b, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582c, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x582d, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582e, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x582f, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5830, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5831, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5832, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5833, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5834, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5835, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5836, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5837, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5838, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x5839, 0x39)
    cam_i2c_write(cam_iic, device_addr, 0x583a, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x583b, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x583c, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x583d, 0x23)
    cam_i2c_write(cam_iic, device_addr, 0x583e, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x583f, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x5840, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5841, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5842, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5843, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5844, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5845, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5846, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5847, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5848, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5849, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584a, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584b, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x584c, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584e, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x584f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5850, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5851, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5852, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5853, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5854, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5855, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5856, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5857, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5858, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5859, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x585a, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585b, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585c, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585d, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x585e, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x585f, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5860, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5861, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5862, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5863, 0x7)
    cam_i2c_write(cam_iic, device_addr, 0x5864, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5865, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5866, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5867, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5868, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5869, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x586a, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x586b, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x586c, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586d, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x586f, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5870, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5871, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5872, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5873, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5874, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x5875, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5876, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5877, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5878, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5879, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x587a, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x587b, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x587c, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587d, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587e, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x587f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5880, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5881, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5882, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5883, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5884, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5885, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5886, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5887, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5180, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0x9c)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x34)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x4c)
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5196, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5198, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5199, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x519a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x519b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x519c, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x519d, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x519e, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3800, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3802, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0x58)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0x81) # No Mirror
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xa7)

    cam_i2c_write(cam_iic, device_addr, 0x4740, 0x21)

    cam_i2c_write(cam_iic, device_addr, 0x501e, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5002, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61)

# frame buffer alocate
height = 600
width = 800
buffer0 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer1 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer2 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)

# frame buffer resister set
vflip_dmaw.register_map.fb0_1 = buffer0.physical_address
vflip_dmaw.register_map.fb0_2 = 0
vflip_dmaw.register_map.fb1_1 = buffer1.physical_address
vflip_dmaw.register_map.fb1_2 = 0
vflip_dmaw.register_map.fb2_1 = buffer2.physical_address
vflip_dmaw.register_map.fb2_2 = 0

dma2axis3.register_map.fb0 = buffer0.physical_address
dma2axis3.register_map.fb1 = buffer1.physical_address
dma2axis3.register_map.fb2 = buffer2.physical_address
dma2axis3.register_map.mode = 0 # DMA_WRITE_MODE

# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81

# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)

# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)

# bitmap_disp_cont start
bmpd_cont.write(0x0, 0x0)

# dma2axis_3buf start and auto repeat
dma2axis3.register_map.CTRL = 0x81

  1. 2022年08月11日 05:19 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる2

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる1”の続き。

ZYBO Z7-20 用カメラ画像表示システムの作成7”で完成したビットストリームを PYNQ で動作させてみようということで、前回は、ZYBO Z7-20 の PYNQ を起動して、ノートブックを新規作成し、Python コードを書いて実行してみたが、途中で Linux カーネルが落ちてしまった。今回は、原因を探るため、System ILA を入れて、まずは、動作時の動作を見るため、ZYBO Z7-20 を JTAG モードで起動して、ベアメタル・アプリケーションを使用して、カメラ画像表示時の波形を見ておこう。

Vivado 2022.1 の cam_disp プロジェクトに見たいバスに Debug を設定して、System ILA を入れた。
ZYBO_Z7_PYNQ_137_220809.png

論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。
ZYBO_Z7_PYNQ_138_220810.png

ハードウェアをエクスポートした。
Vitis でプラットフォームを Update Hardware Specfication して、再ビルドした。
ZYBO_Z7_PYNQ_139_220810.png

cam_disp_system をデバックモードで Run した。
ZYBO_Z7_PYNQ_140_220810.png

Vivado で Flow Navigator から Open Hardware Manager を展開して、Open Target をクリックし、Auto Connect を選択して、ILA ダッシュボードを表示した。
ZYBO_Z7_PYNQ_141_220810.png

Vitis で Resume ボタンをクリックして、ソフトウェアを走らせた。

ILA ダッシュボードに AXI インターフェースのトランザクションが示された。
ZYBO_Z7_PYNQ_142_220810.png

DMA2axis_3buf IP の AXI4-Master のトランザクションを示す。
ZYBO_Z7_PYNQ_143_220810.png

vflip_dma_write IP の AXI4-Master のトランザクションを示す。
ZYBO_Z7_PYNQ_144_220810.png

paracam_inf_axis IP の AXI4-Stream のトランザクションを示す。
ZYBO_Z7_PYNQ_145_220810.png

なお、カメラ画像は正常に表示されている。問題ない。
  1. 2022年08月10日 05:04 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムを PYNQ で動作させる1

ZYBO Z7-20 用カメラ画像表示システムの作成7”で完成したビットストリームを PYNQ で動作させてみよう。

まずは、ZYBO Z7-20 で PYNQ を起動し、ssh からログインして、Jupyter Notebook を起動した。
sudo jupyter notebook --allow-root
ZYBO_Z7_PYNQ_129_220809.png

ホスト・パソコンのブラウザで http://192.168.3.35:9090/tree/my_project を表示して、cam_disp フォルダを新規作成した。

cam_disp/cam_disp.runs/impl_1/cam_disp_bd_wrapper.bit と cam_disp/cam_disp.gen/sources_1/bd/cam_disp_bd/hw_handoff/cam_disp_bd.hwh をアップロードした。
ZYBO_Z7_PYNQ_135_220809.png

ZYBO_Z7_PYNQ_136_220809.png

python3 の cam_disp.ipynb ファイルを新規作成した。
ZYBO_Z7_PYNQ_130_220809.png

cam_disp_bd_wrapper.bit と cam_disp_bd.hwh の名前を cam_disp.bit と cam_disp.hwh に変更した。
ZYBO_Z7_PYNQ_131_220809.png

cam_disp.ipynb を書いた。
ZYBO_Z7_PYNQ_132_220809.png

cam_disp.ipynb を実行していったが、paracam_inf に設定を書くところで、PYNQ が落ちてしまった。
ZYBO_Z7_PYNQ_133_220809.png

ターミナルの表示を示す。
ZYBO_Z7_PYNQ_134_220809.png

xilinx@pynq:~$ 8<--- cut here ---
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000062
Unable to handle kernel NULL pointer dereference at virtual address 00000062
pgd = 852ddc6b
pgd = d985c003
[00000062] *pgd=15442831, *pte=00000000, *ppte=00000000
[00000062] *pgd=125a0831, *pte=00000000, *ppte=00000000
Internal error: Oops - BUG: 80000007 [#1] PREEMPT SMP ARM


cam_disp.ipynb のコードを貼っておく。

# cam_disp.py
# 2022/08/05 by marsee

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pynq import allocate, Overlay
import time

# Download bitstream
cam_disp = Overlay("./cam_disp.bit")

# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
dma2axis3 = cam_disp.DMA2axis_3buf_0
paracam_inf = cam_disp.paracam_inf_axis_0
bmpd_cont = cam_disp.btimap_disp_cont_axis_0
cam_iic = cam_disp.cam_iic_0

def cam_i2c_init(cam_iic):
    cam_iic.write(0x100, 0x2)   # reset tx fifo ,address is 0x100, i2c_control_reg
    cam_iic.write(0x100, 0x1)   # enable i2c

def cam_i2x_write_sync():
    time.sleep(0.001) # 1ms wait

def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
    cam_iic.write(0x108, bin(0x100 | (device_addr & 0xfe)))   # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    cam_iic.write(0x108, bin((write_addr >> 8) & 0xff))      # address upper byte
    cam_iic.write(0x108, bin(write_addr & 0xff)) # address lower byte
    cam_iic.write(0x108, bin(0x200 | (write_data & 0xff)))   # data
    cam_i2x_write_sync()

def cam_reg_set(cam_iic, device_addr):
    cam_i2c_write(cam_iic, device_addr, 0x3103, 0x93)
    cam_i2c_write(cam_iic, device_addr, 0x3008, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x3017, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x3018, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc2)
    cam_i2c_write(cam_iic, device_addr, 0x3615, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3000, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x3001, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x3002, 0x5c)
    cam_i2c_write(cam_iic, device_addr, 0x3003, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3005, 0xb7)
    cam_i2c_write(cam_iic, device_addr, 0x3006, 0x43)
    cam_i2c_write(cam_iic, device_addr, 0x3007, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3011, 0x08) # 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(cam_iic, device_addr, 0x3010, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x460c, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x370c, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3602, 0xfc)
    cam_i2c_write(cam_iic, device_addr, 0x3612, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x3634, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3613, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3622, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3604, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0xa7)
    cam_i2c_write(cam_iic, device_addr, 0x3603, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x4000, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x401d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3600, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x3605, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3606, 0x3f)
    cam_i2c_write(cam_iic, device_addr, 0x3c01, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x5020, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x79)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x22)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x0a)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5080, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x300e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x4610, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x471d, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x4708, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x3710, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3632, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x37)
    cam_i2c_write(cam_iic, device_addr, 0x3631, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0x4f)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61) # RGB565
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x73)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3824, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0xc1)
    cam_i2c_write(cam_iic, device_addr, 0x3705, 0xdb)
    cam_i2c_write(cam_iic, device_addr, 0x370a, 0x81)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3827, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3810, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a1a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x3a13, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a18, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a19, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3004, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x350c, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x350d, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3500, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3501, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x350b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3030, 0x0b)
    cam_i2c_write(cam_iic, device_addr, 0x3a02, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a03, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a04, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a14, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a15, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x3a16, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3a00, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x3a08, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x3a09, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x3a0a, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3a0b, 0xd0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0d, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x3a0e, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0x98)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x589b, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x589a, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x4e)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x538a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538b, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x538c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538d, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538f, 0x0f)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xab)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x57)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x65)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x71)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x7d)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x87)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x91)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x9a)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0xaa)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xcd)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xdd)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xea)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x86)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0x5b)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0x3b)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xed)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0xc5)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0xa5)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x3406, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04) # 0x04
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8) # 0xf8
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x3d)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0xbd)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x68)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x82)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x02) # 0x02
    cam_i2c_write(cam_iic, device_addr, 0x3633, 0x07)
    cam_i2c_write(cam_iic, device_addr, 0x3702, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3703, 0xb2)
    cam_i2c_write(cam_iic, device_addr, 0x3704, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x370b, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x370d, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3620, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x3c00, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0xFF)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5500, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5502, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5503, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5504, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5505, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5025, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5300, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5301, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5302, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5303, 0x7c)
    cam_i2c_write(cam_iic, device_addr, 0x530c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x530d, 0x0c)
    cam_i2c_write(cam_iic, device_addr, 0x530e, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x530f, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5310, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5311, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5308, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5309, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5304, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5305, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5306, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5307, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5314, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5315, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x5319, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5316, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5317, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5318, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5380, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5381, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5382, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5383, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5384, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5385, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5386, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5387, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5388, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5389, 0xE1)
    cam_i2c_write(cam_iic, device_addr, 0x538A, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538B, 0x2B)
    cam_i2c_write(cam_iic, device_addr, 0x538C, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538D, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538E, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x538F, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5390, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5391, 0xB3)
    cam_i2c_write(cam_iic, device_addr, 0x5392, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5393, 0xA6)
    cam_i2c_write(cam_iic, device_addr, 0x5394, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5480, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5481, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5482, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5483, 0x49)
    cam_i2c_write(cam_iic, device_addr, 0x5484, 0x56)
    cam_i2c_write(cam_iic, device_addr, 0x5485, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x5486, 0x6c)
    cam_i2c_write(cam_iic, device_addr, 0x5487, 0x76)
    cam_i2c_write(cam_iic, device_addr, 0x5488, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x5489, 0x88)
    cam_i2c_write(cam_iic, device_addr, 0x548a, 0x96)
    cam_i2c_write(cam_iic, device_addr, 0x548b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x548c, 0xb8)
    cam_i2c_write(cam_iic, device_addr, 0x548d, 0xcc)
    cam_i2c_write(cam_iic, device_addr, 0x548e, 0xe0)
    cam_i2c_write(cam_iic, device_addr, 0x548f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5490, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5491, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x5492, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5493, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5494, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5495, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x5496, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5497, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5498, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x5499, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x549a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x549b, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x549c, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549d, 0xee)
    cam_i2c_write(cam_iic, device_addr, 0x549e, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x549f, 0xd8)
    cam_i2c_write(cam_iic, device_addr, 0x54a0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a1, 0xc7)
    cam_i2c_write(cam_iic, device_addr, 0x54a2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a3, 0xb3)
    cam_i2c_write(cam_iic, device_addr, 0x54a4, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a5, 0x90)
    cam_i2c_write(cam_iic, device_addr, 0x54a6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a7, 0x62)
    cam_i2c_write(cam_iic, device_addr, 0x54a8, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54a9, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x54aa, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ab, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x54ac, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x54ad, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x54ae, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54af, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b0, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b1, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x54b2, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b3, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x54b4, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x54b5, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x54b6, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x54b7, 0xdf)
    cam_i2c_write(cam_iic, device_addr, 0x5583, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5584, 0x5d)
    cam_i2c_write(cam_iic, device_addr, 0x5580, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x5587, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5588, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x558a, 0x09)
    cam_i2c_write(cam_iic, device_addr, 0x5589, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5000, 0xcf)
    cam_i2c_write(cam_iic, device_addr, 0x5800, 0x48)
    cam_i2c_write(cam_iic, device_addr, 0x5801, 0x31)
    cam_i2c_write(cam_iic, device_addr, 0x5802, 0x21)
    cam_i2c_write(cam_iic, device_addr, 0x5803, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5804, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5805, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5806, 0x29)
    cam_i2c_write(cam_iic, device_addr, 0x5807, 0x38)
    cam_i2c_write(cam_iic, device_addr, 0x5808, 0x26)
    cam_i2c_write(cam_iic, device_addr, 0x5809, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x580a, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x580b, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580c, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x580d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x580e, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x580f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5810, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5811, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5812, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x5813, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5814, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5815, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5816, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5817, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5818, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5819, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x581a, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x581b, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581c, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x581d, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x581e, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x581f, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x5820, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x5821, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5822, 0x4)
    cam_i2c_write(cam_iic, device_addr, 0x5823, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5824, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5825, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x5826, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x5827, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5828, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5829, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x582a, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x582b, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582c, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x582d, 0x6)
    cam_i2c_write(cam_iic, device_addr, 0x582e, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x582f, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5830, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x5831, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5832, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5833, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5834, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5835, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5836, 0x15)
    cam_i2c_write(cam_iic, device_addr, 0x5837, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5838, 0x6e)
    cam_i2c_write(cam_iic, device_addr, 0x5839, 0x39)
    cam_i2c_write(cam_iic, device_addr, 0x583a, 0x27)
    cam_i2c_write(cam_iic, device_addr, 0x583b, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x583c, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x583d, 0x23)
    cam_i2c_write(cam_iic, device_addr, 0x583e, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x583f, 0x41)
    cam_i2c_write(cam_iic, device_addr, 0x5840, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5841, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5842, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5843, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5844, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5845, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5846, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5847, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5848, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5849, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584a, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584b, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x584c, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584d, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x584e, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x584f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5850, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5851, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5852, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5853, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5854, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5855, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5856, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5857, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x5858, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x5859, 0xe)
    cam_i2c_write(cam_iic, device_addr, 0x585a, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585b, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585c, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x585d, 0xa)
    cam_i2c_write(cam_iic, device_addr, 0x585e, 0x9)
    cam_i2c_write(cam_iic, device_addr, 0x585f, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5860, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x5861, 0xb)
    cam_i2c_write(cam_iic, device_addr, 0x5862, 0xd)
    cam_i2c_write(cam_iic, device_addr, 0x5863, 0x7)
    cam_i2c_write(cam_iic, device_addr, 0x5864, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5865, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5866, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5867, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x5868, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5869, 0x12)
    cam_i2c_write(cam_iic, device_addr, 0x586a, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x586b, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x586c, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586d, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x586e, 0x18)
    cam_i2c_write(cam_iic, device_addr, 0x586f, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5870, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5871, 0x16)
    cam_i2c_write(cam_iic, device_addr, 0x5872, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x5873, 0xf)
    cam_i2c_write(cam_iic, device_addr, 0x5874, 0x13)
    cam_i2c_write(cam_iic, device_addr, 0x5875, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x5876, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5877, 0x17)
    cam_i2c_write(cam_iic, device_addr, 0x5878, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5879, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x587a, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x587b, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x587c, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587d, 0x1c)
    cam_i2c_write(cam_iic, device_addr, 0x587e, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x587f, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5880, 0x1b)
    cam_i2c_write(cam_iic, device_addr, 0x5881, 0x1f)
    cam_i2c_write(cam_iic, device_addr, 0x5882, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5883, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5884, 0x1d)
    cam_i2c_write(cam_iic, device_addr, 0x5885, 0x1e)
    cam_i2c_write(cam_iic, device_addr, 0x5886, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x5887, 0x1a)
    cam_i2c_write(cam_iic, device_addr, 0x528a, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x528b, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x528c, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x528d, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x528e, 0x40)
    cam_i2c_write(cam_iic, device_addr, 0x528f, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x5290, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x5292, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5293, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x5294, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5295, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5296, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5297, 0x08)
    cam_i2c_write(cam_iic, device_addr, 0x5298, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5299, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x529a, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529b, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x529c, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529d, 0x28)
    cam_i2c_write(cam_iic, device_addr, 0x529e, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x529f, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x5282, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5180, 0xff)
    cam_i2c_write(cam_iic, device_addr, 0x5181, 0x52)
    cam_i2c_write(cam_iic, device_addr, 0x5182, 0x11)
    cam_i2c_write(cam_iic, device_addr, 0x5183, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5184, 0x25)
    cam_i2c_write(cam_iic, device_addr, 0x5185, 0x24)
    cam_i2c_write(cam_iic, device_addr, 0x5186, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5187, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5188, 0x14)
    cam_i2c_write(cam_iic, device_addr, 0x5189, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x518a, 0x60)
    cam_i2c_write(cam_iic, device_addr, 0x518b, 0xa2)
    cam_i2c_write(cam_iic, device_addr, 0x518c, 0x9c)
    cam_i2c_write(cam_iic, device_addr, 0x518d, 0x36)
    cam_i2c_write(cam_iic, device_addr, 0x518e, 0x34)
    cam_i2c_write(cam_iic, device_addr, 0x518f, 0x54)
    cam_i2c_write(cam_iic, device_addr, 0x5190, 0x4c)
    cam_i2c_write(cam_iic, device_addr, 0x5191, 0xf8)
    cam_i2c_write(cam_iic, device_addr, 0x5192, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x5193, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x5194, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5195, 0xf0)
    cam_i2c_write(cam_iic, device_addr, 0x5196, 0x03)
    cam_i2c_write(cam_iic, device_addr, 0x5197, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x5198, 0x05)
    cam_i2c_write(cam_iic, device_addr, 0x5199, 0x2f)
    cam_i2c_write(cam_iic, device_addr, 0x519a, 0x04)
    cam_i2c_write(cam_iic, device_addr, 0x519b, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x519c, 0x06)
    cam_i2c_write(cam_iic, device_addr, 0x519d, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x519e, 0xa0)
    cam_i2c_write(cam_iic, device_addr, 0x3a0f, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a10, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a1b, 0x3c)
    cam_i2c_write(cam_iic, device_addr, 0x3a1e, 0x30)
    cam_i2c_write(cam_iic, device_addr, 0x3a11, 0x70)
    cam_i2c_write(cam_iic, device_addr, 0x3a1f, 0x10)
    cam_i2c_write(cam_iic, device_addr, 0x3800, 0x1)
    cam_i2c_write(cam_iic, device_addr, 0x3801, 0x50)
    cam_i2c_write(cam_iic, device_addr, 0x3802, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3803, 0x8)
    cam_i2c_write(cam_iic, device_addr, 0x3804, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x3805, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x3806, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3807, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3808, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x3809, 0x20)
    cam_i2c_write(cam_iic, device_addr, 0x380a, 0x2)
    cam_i2c_write(cam_iic, device_addr, 0x380b, 0x58)
    cam_i2c_write(cam_iic, device_addr, 0x380c, 0xc)
    cam_i2c_write(cam_iic, device_addr, 0x380d, 0x80)
    cam_i2c_write(cam_iic, device_addr, 0x380e, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x380f, 0xe8)
    cam_i2c_write(cam_iic, device_addr, 0x5001, 0x7f)
    cam_i2c_write(cam_iic, device_addr, 0x5680, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5681, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5682, 0x5)
    cam_i2c_write(cam_iic, device_addr, 0x5683, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5684, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5685, 0x0)
    cam_i2c_write(cam_iic, device_addr, 0x5686, 0x3)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x5687, 0xc0)
    cam_i2c_write(cam_iic, device_addr, 0x3815, 0x02)
    cam_i2c_write(cam_iic, device_addr, 0x3503, 0x00)
    cam_i2c_write(cam_iic, device_addr, 0x3818, 0x81) # No Mirror
    cam_i2c_write(cam_iic, device_addr, 0x3621, 0xa7)

    cam_i2c_write(cam_iic, device_addr, 0x4740, 0x21)

    cam_i2c_write(cam_iic, device_addr, 0x501e, 0x2a)
    cam_i2c_write(cam_iic, device_addr, 0x5002, 0x78)
    cam_i2c_write(cam_iic, device_addr, 0x501f, 0x01)
    cam_i2c_write(cam_iic, device_addr, 0x4300, 0x61)

# frame buffer alocate
height = 600
width = 800
buffer0 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer1 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)
buffer2 = allocate(shape=(height, width, 1), dtype=np.uint32, cacheable=1)

# frame buffer resister set
vflip_dmaw.register_map.fb0 = buffer0.physical_address
vflip_dmaw.register_map.fb1 = buffer1.physical_address
vflip_dmaw.register_map.fb2 = buffer2.physical_address
dma2axis3.register_map.fb0 = buffer0.physical_address
dma2axis3.register_map.fb1 = buffer1.physical_address
dma2axis3.register_map.fb2 = buffer2.physical_address
dma2axis3.register_map.mode = 0 # DMA_WRITE_MODE

# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81

# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)

# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)

# bitmap_disp_cont start
bmpd_cont.write(0x0, 0x0)

# dma2axis_3buf start and auto repeat
dma2axis3.register_map.CTRL = 0x81

  1. 2022年08月09日 04:54 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成7

ZYBO Z7-20 用カメラ画像表示システムの作成6”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、以前のプロジェクトでカメラ画像の表示に成功するということは、今回作った IP のいずれかがおかしいのだろう?ということで、cam_disp プロジェクトで IP を交換してみた所、bitmap_disp_cont_axis IP を交換したらカメラ画像が表示された。しかし、フレームバッファをシングル・バッファにすれば正常に表示できたが、トリプル・バッファにすると画像が乱れた。今回は、トリプル・バッファにした時も正常に画像を表示できるようにバグをフィックスした。

なぜフレームバッファをシングル・バッファにすればバッファが 1 個で済むのに、わざわざ 3 個のバッファを使用するトリプル・バッファにするかと言うと、カメラの画像が乱れるからだ。
シングル・バッファはカメラの画像を書き込んでいるバッファをディスプレイ・コントローラが読み込むので、カメラ・データを書いている前のバッファでは、n 時間のカメラ画像を読んでしまう。しかしカメラ・データを書いている先のバッファでは、n-1 時間のカメラ画像を読み込んでしまう。なので、激しく動く画像を撮影すると、n 時間と n-1 時間の差分が大きいため、そこのところで、画像が多く違うことになって画像が乱れるのだ。
そこで、カメラ画像が乱れないようにトリプル・バッファを使用している。詳しくは”フレームバッファの制御方法”を参照のこと。

トリプル・バッファでカメラ画像が乱れる件については、もう一度バッファ領域を見直すことにした。
必要な領域を計算してみよう。
800 ピクセル x 600 行 x 4 バイト(1ピクセルあたりのバイト数) = 1,920,000 バイト = 0x1d4c00 バイト
つまり切りの良いところにすると 0x200000 バイトのメモリ領域が必要になる。
今までのアプリケーション・ソフトウェアの cam_dips.c の設定を見る。

#define CAMERA_DATA_DMA_ADDR0    0x10000000
#define CAMERA_DATA_DMA_ADDR1    0x10080000
#define CAMERA_DATA_DMA_ADDR2    0x10100000


トリプル・バッファの領域が重なってしまっているので、トリプル・バッファの時のカメラ画像が乱れているようだ。orz
定義を下に示すように変更した所、カメラ画像が正常に表示できるようになった。

#define CAMERA_DATA_DMA_ADDR0    0x10000000
#define CAMERA_DATA_DMA_ADDR1    0x10200000
#define CAMERA_DATA_DMA_ADDR2    0x10400000


情けないバグだったが、これでフィックスできた。。。良かった。
現在のアプリケーション・ソフトウェアの cam_disp.c を貼っておく。

// cam_disp.c
// 2022/08/01 by marsee
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "xil_io.h"
#include "xparameters.h"

#include "xvflip_dma_write.h"
#include "xdma2axis_3buf.h"

#define CAMERA_DATA_DMA_ADDR0    0x10000000
#define CAMERA_DATA_DMA_ADDR1    0x10200000
#define CAMERA_DATA_DMA_ADDR2    0x10400000

#define HORIZONTAL_PIXELS   800
#define VERTICAL_LINES      600

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);

void cam_i2c_init(volatile uint32_t *ov5642_axi_iic) {
    ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
    ov5642_axi_iic[64] = 0x1; // enable i2c
}

void cam_i2x_write_sync(void) {
    // unsigned c;

    // c = *cam_i2c_rx_fifo;
    // while ((c & 0x84) != 0x80)
    // c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
    usleep(1000);
}

void cam_i2c_write(volatile uint32_t *ov5642_axi_iic, uint32_t device_addr, uint32_t write_addr, uint32_t write_data){
    ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    ov5642_axi_iic[66] = (write_addr >> 8) & 0xff;  // address upper byte
    ov5642_axi_iic[66] = write_addr & 0xff;           // address lower byte
    ov5642_axi_iic[66] = 0x200 | (write_data & 0xff);      // data
    cam_i2x_write_sync();
}

int main(){
    XVflip_dma_write XVfilp_dma_write_ap;
    XDma2axis_3buf XDma2s3b_ap;
    int inbyte_in;

    XVflip_dma_write_Initialize(&XVfilp_dma_write_ap, 0);
    XDma2axis_3buf_Initialize(&XDma2s3b_ap, 0);

    XVflip_dma_write_Set_fb0(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XVflip_dma_write_Set_fb1(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XVflip_dma_write_Set_fb2(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_fb0(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb1(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XDma2axis_3buf_Set_fb2(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_mode(&XDma2s3b_ap, 0); // DMA_WRITE_MODE

    // vflip_dma_write start
    XVflip_dma_write_Start(&XVfilp_dma_write_ap);
    XVflip_dma_write_EnableAutoRestart(&XVfilp_dma_write_ap);

    // CMOS Camera initialize, ov5642
    cam_i2c_init((volatile uint32_t *)XPAR_AXI_IIC_0_BASEADDR);
    cam_reg_set((volatile uint32_t *)(XPAR_AXI_IIC_0_BASEADDR), (uint32_t)0x78); // OV5642 register set
    Xil_Out32(XPAR_PARACAM_INF_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // ov5642 AXI4-Stream Start
    Xil_Out32((XPAR_PARACAM_INF_AXIS_0_BASEADDR+4), 0);

    // bitmap_disp_cont_axis start
    Xil_Out32(XPAR_BITMAP_DISP_CONT_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // dummy address, start

    // DMA2axis start
    XDma2axis_3buf_Start(&XDma2s3b_ap);
    XDma2axis_3buf_EnableAutoRestart(&XDma2s3b_ap);

    printf("The display stops when you press any key.");
    fflush(stdout);
    inbyte_in = inbyte();
    printf("\n"); fflush(stdout);

    // Display Stopped
    XDma2axis_3buf_DisableAutoRestart(&XDma2s3b_ap);
    while(XDma2axis_3buf_IsIdle(&XDma2s3b_ap)==0);

    printf("The display resumes when you press any key.");
    fflush(stdout);
    inbyte_in = inbyte();
    printf("\n"); fflush(stdout);

    // DMA2axis resumes
    XDma2axis_3buf_Start(&XDma2s3b_ap);
    XDma2axis_3buf_EnableAutoRestart(&XDma2s3b_ap);

    return(0);
}

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
    cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
    cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
    cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
    cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
    cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
    cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
    cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
    cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
    cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
    cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
    cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
    cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
    cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
    cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
    cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
    cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
    cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
    cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);

    cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);

    cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);

    return(0);
}

  1. 2022年08月08日 04:34 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成6

ZYBO Z7-20 用カメラ画像表示システムの作成5”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、ハードウェアをエクスポートし、Vitis 2022.1 を起動して、アプリケーション・ソフトウェアをビルドして ZYBO Z7-20 で実機確認したところ、カメラ画像の表示に成功した。今回は、以前のプロジェクトでカメラ画像の表示に成功するということは、今回作った IP のいずれかがおかしいのだろう?ということで、cam_disp プロジェクトで IP を交換してみた所、bitmap_disp_cont_axis IP を交換したらカメラ画像が表示された。

1 から IP を作成していった Vivado 2022.1 の cam_disp プロジェクトで、以前作成した IP を使用した Vivado 2021.1 から Vivado 2022.1 に変換した cam_disp2 プロジェクトから IP を交換することにした。

最初に cam_disp プロジェクトで使用している bitmap_disp_cont_axis IP の中身を cam_disp2 プロジェクトで使用している IP の中身と交換した。
IP をアップグレードした。
ZYBO_Z7_PYNQ_124_220807.png

論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。
ZYBO_Z7_PYNQ_125_220807.png

ハードウェアをエクスポートした。
Vitis でプラットフォームを Update Hardware Specfication して、再ビルドした。
ZYBO_Z7_PYNQ_126_220807.png

これで Run したら、カメラ画像は表示されたのだが、画像は乱れている。
ZYBO_Z7_PYNQ_127_220807.jpg

トリプル・バッファをシングル・バッファにすれば問題なくカメラ画像が表示された。
ZYBO_Z7_PYNQ_128_220807.png

コードの差分を示す。

    XVflip_dma_write_Set_fb0(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XVflip_dma_write_Set_fb1(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XVflip_dma_write_Set_fb2(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb0(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb1(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb2(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_mode(&XDma2s3b_ap, 0); // DMA_WRITE_MODE


とりあえず、新しく作成した bitmap_disp_cont_axis は何処かおかしいようだ。
  1. 2022年08月07日 05:07 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成5

ZYBO Z7-20 用カメラ画像表示システムの作成4”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、以前動作していたはずの Vivado プロジェクトを 2022.1 上で再現することにした。Vivado 2021.1 のプロジェクトを DFX の変更をもとに戻して Vivado 2022.1 に変換し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポートし、Vitis 2022.1 を起動して、アプリケーション・ソフトウェアをビルドして ZYBO Z7-20 で実機確認したところ、カメラ画像の表示に成功した。

画像フィルタを DFX する3(DFX_filter_test プロジェクト2)”を実行した。

Vitis 2022.1 の cam_disp ディレクトリを示す。
アプリケーション・ソフトウェアを入力し、ビルドも成功している状態だ。
ZYBO_Z7_PYNQ_122_220805.png

Explorer で cam_disp_system を選択し、Run ボタンをクリックするとカメラ画像が表示された。
ZYBO_Z7_PYNQ_123_220805.jpg

やはりこのプロジェクトは写るんだな。
新しく作ったどれかの IP がおかしいようだ。
  1. 2022年08月06日 04:32 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成4

ZYBO Z7-20 用カメラ画像表示システムの作成3”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、アプリケーション・ソフトウェアを作成し、ビルドしたら elf ファイルができた。ZYBO Z7-20 で実機確認した見たところ、カメラ画像が表示されなかった。今回は、以前動作していたはずの Vivado プロジェクトを 2022.1 上で再現することにした。Vivado 2021.1 のプロジェクトを DFX の変更をもとに戻して Vivado 2022.1 に変換し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。

Vivado 2021.1 で DFX 用に作成した ZYBO Z7-20 用のカメラ画像表示システムの記事を示す。
画像フィルタを DFX する2(DFX_filter_test プロジェクト1)
画像フィルタを DFX する3(DFX_filter_test プロジェクト2)

しかし、このプロジェクトは後で DFX 用に改造してしまったので、この記事の通りに再現して Vivado 2022.1 に変換した。
ZYBO_Z7_PYNQ_118_220805.png

cam_disp_bd ブロック・デザインを示す。
ZYBO_Z7_PYNQ_119_220805.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_120_220805.png

IP を再生成した後で、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。
ZYBO_Z7_PYNQ_121_220805.png
  1. 2022年08月05日 04:51 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成3

ZYBO Z7-20 用カメラ画像表示システムの作成2”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、ハードウェアをエクスポートして、Vitis 2022.1 でプラットフォームとアプリケーション・プロジェクトの生成を行った。今回は、アプリケーション・ソフトウェアを作成し、ビルドしたら elf ファイルができた。ZYBO Z7-20 で実機確認した見たところ、カメラ画像が表示されなかった。

Vitis 2022.1 の cam_disp_system -> cam_disp -> src を右クリックし右クリックメニューから New -> File を選択した。
Create New File ダイアログが表示された。
File name に cam_disp.c と入力し、Finish ボタンをクリックした。
ZYBO_Z7_PYNQ_114_220802.png

cam_disp.c のソースコードを入力した。
ZYBO_Z7_PYNQ_115_220802.png

トンカチ・ボタンをクリックして、ビルドを行って、成功した。
ZYBO_Z7_PYNQ_116_220802.png

ZYBO Z7-20 の電源を ON して、USB ケーブルを接続した。
cam_disp_system をクリックし、Run ボタンをクリックしてアプリケーション・ソフトウェアを動作させた。
ターミナルに文字が表示されたが、カメラ画像は表示されなかった。
ZYBO_Z7_PYNQ_117_220804.png

cam_disp.c を貼っておく。

// cam_disp.c
// 2022/08/01 by marsee
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "xil_io.h"
#include "xparameters.h"

#include "xvflip_dma_write.h"
#include "xdma2axis_3buf.h"

#define CAMERA_DATA_DMA_ADDR0    0x10000000
#define CAMERA_DATA_DMA_ADDR1    0x10080000
#define CAMERA_DATA_DMA_ADDR2    0x10100000

#define HORIZONTAL_PIXELS   800
#define VERTICAL_LINES      600

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);

void cam_i2c_init(volatile uint32_t *ov5642_axi_iic) {
    ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
    ov5642_axi_iic[64] = 0x1; // enable i2c
}

void cam_i2x_write_sync(void) {
    // unsigned c;

    // c = *cam_i2c_rx_fifo;
    // while ((c & 0x84) != 0x80)
    // c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
    usleep(1000);
}

void cam_i2c_write(volatile uint32_t *ov5642_axi_iic, uint32_t device_addr, uint32_t write_addr, uint32_t write_data){
    ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
    ov5642_axi_iic[66] = (write_addr >> 8) & 0xff;  // address upper byte
    ov5642_axi_iic[66] = write_addr & 0xff;           // address lower byte
    ov5642_axi_iic[66] = 0x200 | (write_data & 0xff);      // data
    cam_i2x_write_sync();
}

int main(){
    XVflip_dma_write XVfilp_dma_write_ap;
    XDma2axis_3buf XDma2s3b_ap;
    int inbyte_in;

    XVflip_dma_write_Initialize(&XVfilp_dma_write_ap, 0);
    XDma2axis_3buf_Initialize(&XDma2s3b_ap, 0);

    XVflip_dma_write_Set_fb0(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XVflip_dma_write_Set_fb1(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XVflip_dma_write_Set_fb2(&XVfilp_dma_write_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_fb0(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR0);
    XDma2axis_3buf_Set_fb1(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR1);
    XDma2axis_3buf_Set_fb2(&XDma2s3b_ap, (u32)CAMERA_DATA_DMA_ADDR2);
    XDma2axis_3buf_Set_mode(&XDma2s3b_ap, 0); // DMA_WRITE_MODE

    // vflip_dma_write start
    XVflip_dma_write_Start(&XVfilp_dma_write_ap);
    XVflip_dma_write_EnableAutoRestart(&XVfilp_dma_write_ap);

    // CMOS Camera initialize, ov5642
    cam_i2c_init((volatile uint32_t *)XPAR_AXI_IIC_0_BASEADDR);
    cam_reg_set((volatile uint32_t *)(XPAR_AXI_IIC_0_BASEADDR), (uint32_t)0x78); // OV5642 register set
    Xil_Out32(XPAR_PARACAM_INF_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // ov5642 AXI4-Stream Start
    Xil_Out32((XPAR_PARACAM_INF_AXIS_0_BASEADDR+4), 0);

    // bitmap_disp_cont_axis start
    Xil_Out32(XPAR_BITMAP_DISP_CONT_AXIS_0_BASEADDR, CAMERA_DATA_DMA_ADDR0); // dummy address, start

    // DMA2axis start
    XDma2axis_3buf_Start(&XDma2s3b_ap);
    XDma2axis_3buf_EnableAutoRestart(&XDma2s3b_ap);

    printf("The display stops when you press any key.");
    fflush(stdout);
    inbyte_in = inbyte();
    printf("\n"); fflush(stdout);

    // Display Stopped
    XDma2axis_3buf_DisableAutoRestart(&XDma2s3b_ap);
    while(XDma2axis_3buf_IsIdle(&XDma2s3b_ap)==0);

    printf("The display resumes when you press any key.");
    fflush(stdout);
    inbyte_in = inbyte();
    printf("\n"); fflush(stdout);

    // DMA2axis resumes
    XDma2axis_3buf_Start(&XDma2s3b_ap);
    XDma2axis_3buf_EnableAutoRestart(&XDma2s3b_ap);

    return(0);
}

int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
    cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
    cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
    cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
    cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
    cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
    cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
    cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
    cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
    cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
    cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
    cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
    cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
    cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
    cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
    cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
    cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
    cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
    cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
    cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
    cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
    cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
    cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
    cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
    cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
    cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
    cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
    cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
    cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
    cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
    cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
    cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
    cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
    cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
    cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
    cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
    cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
    cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
    cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
    cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
    cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
    cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
    cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
    cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
    cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
    cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
    cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
    cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
    cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
    cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
    cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
    cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
    cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
    cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
    cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
    cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
    cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
    cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
    cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
    cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
    cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
    cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
    cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
    cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
    cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
    cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
    cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
    cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
    cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
    cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
    cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
    cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
    cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
    cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
    cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
    cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
    cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
    cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
    cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
    cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
    cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
    cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
    cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
    cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
    cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
    cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
    cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
    cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
    cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
    cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
    cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
    cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
    cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
    cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
    cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
    cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
    cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
    cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
    cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
    cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
    cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
    cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
    cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
    cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
    cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
    cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
    cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
    cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
    cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
    cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
    cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
    cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
    cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
    cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
    cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
    cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
    cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
    cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
    cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);

    cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);

    cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
    cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
    cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
    cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);

    return(0);
}

  1. 2022年08月04日 05:13 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

今日、”FPGAの部屋 プレゼンツ Vitis HLS スタートアップ”セミナを行います

今日、”FPGAの部屋 プレゼンツ Vitis HLS スタートアップ”セミナを行います。

今日の Vitis HLS スタートアップ・セミナはいつも HDLab さんのセミナでやっているようにハンズオンで行きたいと思います。人数が多いので同期は取れませんが、ゆっくりと実装していくので、良ければ自分でも Vitis HLS 2022.1 を立ち上げて実装してみてください。
更に ZYBO Z7-10 で実機確認するので、ZYBO Z7-10 を持っている方は実機確認もやってみてください。ZYBO Z7-20 でも可です。

自分で実装するために使用するソースコードをここに貼っておきます。

sum_of_squares.cpp です。これは Vitis HLS のソースコードです。

#include <ap_int.h>

int sum_of_squares(ap_int<8> x, ap_int<8> y,
        ap_int<17> *result){

    *result = x*x + y*y;

    return(0);
}


sum_of_squares_tb.cpp です。これは Vitis HLS のテストベンチのコードです。

#include <ap_int.h>

int sum_of_squares(ap_int<8> x, ap_int<8> y, ap_int<17> *result);

int main(){
    ap_int<8> x;
    ap_int<8> y;
    ap_int<17> result;

    for(x=0, y=1; x<10; x++, y++){
        sum_of_squares(x, y, &result);
        std::cout << "x = " << x << " y = " << y << " result = "
        << result << std::endl;
        if(result != (x*x + y*y))
            return(1);
    }
    return(0);
}


最後に Vitis HLS で作成した IP を Vivado の IP インテグレーターで使用して、回路を完成し、Vitis でアプリケーション・ソフトウェアを作って実機確認するが、その際のアプリケーション・ソフトウェアの sums_test.c を示す。

// sums_test.c
// 2019/08/16 : by marsee
// x の入力の時に999を入力すると終了する
//

#include <stdio.h>
#include "xsum_of_squares.h"

int main(){
    XSum_of_squares XSums_ap;
    XSum_of_squares_Config *XSums_apPtr;
    int val;

    // Look Up the device configuration
    XSums_apPtr = XSum_of_squares_LookupConfig(0);
    if (!XSums_apPtr){
        fprintf(stderr, "XSum_of_squares configuration failed.\n");
        return(-1);
    }

    // Initialize the Device
    int XSums_status = XSum_of_squares_CfgInitialize(&XSums_ap, XSums_apPtr);
    if (XSums_status != XST_SUCCESS){
        fprintf(stderr, "Could not Initialize XSum_of_squares\n");
        return(-1);
    }

   while(1){
       printf("\n\rx = ");
       scanf("%d", &val);
       if(val == 999)
           break;
       XSum_of_squares_Set_x(&XSums_ap, val);

       printf("\n\ry = ");
       scanf("%d", &val);
       XSum_of_squares_Set_y(&XSums_ap, val);

       while(!XSum_of_squares_IsIdle(&XSums_ap)) ;

       XSum_of_squares_Start(&XSums_ap);

       while(!XSum_of_squares_IsDone(&XSums_ap)) ;

       printf("\n\rresult = %d\n\r", (int)XSum_of_squares_Get_result(&XSums_ap));
   }

   return(0);
}


それでは今日のセミナ、よろしくお願いします。
  1. 2022年08月03日 04:51 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成2

ZYBO Z7-20 用カメラ画像表示システムの作成1”の続き。

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思うということで、前回は、Vivado 2022.1 で cam_disp プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポートして、Vitis 2022.1 でプラットフォームとアプリケーション・プロジェクトの生成を行った。

Vivado 2022.1 で File メニューから Export -> Export Hardware... を選択してハードウェアのエクスポートを行った。
その際に Output 画面で Include bitstream ラジオボタンをチェックしビットストリームを同梱してある。
cam_disp ディレクトリに cam_disp_bd_wrapper.xsa が生成された。
ZYBO_Z7_PYNQ_106_220802.png

Vivado の Tools メニューから Launch Vitis IDE を選択して、Vitis 2022.1 を起動した。
cam_disp ディレクトリに vitis_work ディレクトリを新規作成し、Launch ボタンをクリックした。
ZYBO_Z7_PYNQ_107_220802.png

Vitis 2022.1 が起動した。
Create Application Project をクリックした。
ZYBO_Z7_PYNQ_108_220802.png

New Application Project ダイアログが表示された。
最初の画面はデフォルトのまま Next > ボタンをクリックした。
Platform 画面では、Create a new platform form hardware (XSA) タブをクリックして cam_disp/cam_disp_bd_wrapper.xsa を指定した。
ZYBO_Z7_PYNQ_109_220802.png

Application Project Details 画面では、Application project name に cam_disp と入力した。
ZYBO_Z7_PYNQ_110_220802.png

Domain 画面はデフォルトのままとした。
ZYBO_Z7_PYNQ_111_220802.png

Template 画面では、Empty Application (C) を選択し、Finish ボタンをクリックした。
ZYBO_Z7_PYNQ_112_220802.png

cam_disp_bd_wrapper プラットフォームと cam_disp アプリケーション・プロジェクトが生成された
ZYBO_Z7_PYNQ_113_220802.png
  1. 2022年08月02日 04:04 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

ZYBO Z7-20 用カメラ画像表示システムの作成1

今まで作ってきた IP を使用して、Vivado 2022.1 を使用して ZYBO Z7-20 用のカメラ画像表示システムを作ろうと思う。

今まで作ってきた IP と Digilent/vivado-library の rgb2dvi IP を使用して、Vivado 2022.1 で cam_disp プロジェクトを作成する。

まずは、Vivado 2022.1 を使用し、ZYBO Z7-20 用の cam_disp プロジェクトを作成した。
ZYBO_Z7_PYNQ_96_220731.png

cam_disp プロジェクトのディレクトリに DMA2axis_3buf, bitmap_disp_cont_axis, paracam2axis, vflip_dma_write ディレクトリを作成した。
それらのディレクトリの中に作成した各 IP をコピーした。
Digilent/vivado-library の rgb2dvi IP を cam_disp ディレクトリにコピーした。
ZYBO_Z7_PYNQ_97_220731.png

各 IP を IP Catalog に登録した。
ZYBO_Z7_PYNQ_98_220731.png

cam_disp_bd ブロック・デザインを作成し、回路を完成させた。
ZYBO_Z7_PYNQ_99_220731.png

Address Editor 画面を示す。
ZYBO_Z7_PYNQ_100_220731.png

processing_system7_0 の設定を示す。
Clock Configuration の PL Fabric Clocks の FCLK_CLK0 を 100 MHz に設定した。
ZYBO_Z7_PYNQ_104_220801.png

Zynq Processing System 7 の PS-PL Configuration では、 S AXI HP0 にチェックを入れて、活かした。

rgb2dvi_0 の設定を示す。
Reset active high のチェックボックスのチェックを外した。
TMDS clock range の < 80MHz(720p) ラジオ・ボタンをクリックした。
ZYBO_Z7_PYNQ_105_220801.png

Vivado 2022.1 の Sources ウインドウで cam_disp_bd_i を右クリックし、右クリックメニューから Create HDL Wrapper.. を選択して、cam_disp_bd_wrapper.v を作成した。
ZYBO_Z7_PYNQ_101_220731.png

cam_disp.xdc 制約ファイルを作成した。

set_property PACKAGE_PIN H16 [get_ports TMDS_Clk_p_0]
set_property PACKAGE_PIN D19 [get_ports {TMDS_Data_p_0[0]}]
set_property PACKAGE_PIN C20 [get_ports {TMDS_Data_p_0[1]}]
set_property PACKAGE_PIN B19 [get_ports {TMDS_Data_p_0[2]}]

set_property IOSTANDARD TMDS_33 [get_ports TMDS_Clk_p_0]
set_property IOSTANDARD TMDS_33 [get_ports {TMDS_Data_p_0[2]}]
set_property IOSTANDARD TMDS_33 [get_ports {TMDS_Data_p_0[1]}]
set_property IOSTANDARD TMDS_33 [get_ports {TMDS_Data_p_0[0]}]

set_property PACKAGE_PIN T14 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[0]}]
set_property PACKAGE_PIN U14 [get_ports {cam_data[6]}]
set_property PACKAGE_PIN T15 [get_ports {cam_data[5]}]
set_property PACKAGE_PIN U15 [get_ports {cam_data[4]}]
set_property PACKAGE_PIN P14 [get_ports {cam_data[3]}]
set_property PACKAGE_PIN V17 [get_ports {cam_data[2]}]
set_property PACKAGE_PIN R14 [get_ports {cam_data[1]}]
set_property PACKAGE_PIN V18 [get_ports {cam_data[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports iic_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports iic_sda_io]
set_property IOSTANDARD LVCMOS33 [get_ports href]
set_property IOSTANDARD LVCMOS33 [get_ports pclk]
set_property IOSTANDARD LVCMOS33 [get_ports standby]
set_property IOSTANDARD LVCMOS33 [get_ports vsync]
set_property IOSTANDARD LVCMOS33 [get_ports xck]
set_property PACKAGE_PIN V15 [get_ports iic_scl_io]
set_property PACKAGE_PIN W14 [get_ports iic_sda_io]
set_property PACKAGE_PIN W15 [get_ports vsync]
set_property PACKAGE_PIN Y14 [get_ports href]
set_property PACKAGE_PIN T11 [get_ports standby]
set_property PACKAGE_PIN T10 [get_ports pclk]
set_property PACKAGE_PIN U12 [get_ports xck]

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF]


set_property PULLUP true [get_ports iic_scl_io]
set_property PULLUP true [get_ports iic_sda_io]


ZYBO_Z7_PYNQ_102_220731.png

論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。
ZYBO_Z7_PYNQ_103_220731.png
  1. 2022年08月01日 05:26 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0