vadd: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=ac4ef1c5805207baa9ef89b464a93f96451e85d9, for GNU/Linux 3.14.0, with debug_info, not stripped
kv260_median_platform/kv260_median_pkg/vadd_system/Hardware/package.build/package/vadd.bit.bin
kv260_median_platform/kv260_median_pkg/vadd/Hardware/vadd
kv260_median_platform/kv260_median_pkg/vadd_system/Hardware/binary_container_1.xclbin
./vadd: /lib/libc.so.6: version `GLIBC_2.34' not found (required by ./vadd)
Xilinx Zynq MP First Stage Boot Loader
Release 2022.1 Sep 16 2022 - 04:56:15
vadd: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=ef287cc15a43c960562e7767ee120e1e0009b57c, with debug_info, not stripped
vadd: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=66e998c92ae7d805781bb737a0fb487ff518f2fe, for GNU/Linux 3.14.0, with debug_info, not stripped
-sh: ./vadd: cannot execute binary file: Exec format error
petalinux-package --boot --u-boot --force
petalinux-package --wic --images-dir images/linux/ --bootfiles "ramdisk.cpio.gz.u-boot,boot.scr,Image,system.dtb,system-zynqmp-sck-kv-g-revB.dtb" --disk-name "mmcblk1"
{
"shell_type" : "XRT_FLAT",
"num_slots": "1"
}
kv260_median_platform/device-tree-xlnx/vadd.dtbo
kv260_median_platform/kv260_median_pkg/vadd_system/Hardware/package.build/package/vadd.bit.bin
kv260_median_platform/kv260_median_pkg/pfm/shell.json
kv260_median_platform/kv260_median_pkg/vadd/Hardware/vadd
kv260_median_platform/kv260_median_pkg/vadd_system/Hardware/binary_container_1.xclbin
zynqmp_fsbl.elf
pmufw.elf
bl31.elf
u-boot-dtb.elf (名前をu-boot.elfに変更する)
system-zynqmp-sck-kv-g-revB.dtb (名前を system.dtb に変更する)
boot.scr (u-boot初期化用のスクリプト)
system-zynqmp-sck-kv-g-revB.dtb (Linuxがシステム・セットアップを理解するために起動中に読み取るデバイス・ツリー・ブロブ)(名前を system.dtb に変更する)
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/KRIA_KV260/2022.1/kv260_median_platform/device-tree-xlnx$ xsct
rlwrap: warning: your $TERM is 'xterm-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems.
****** Xilinx Software Commandline Tool (XSCT) v2022.1.0
**** SW Build 3524075 on 2022-04-13-17:42:45
** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
xsct% hsi open_hw_design /media/masaaki/Ubuntu_Disk/KRIA_KV260/2022.1/kv260_median_platform/kv260_median_platform/kv260_median_platform.xsa
INFO: [Hsi 55-2053] elapsed time for repository (/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2022.1/data/embeddedsw) loading 12 seconds
hsi::open_hw_design: Time (s): cpu = 00:00:08 ; elapsed = 00:00:21 . Memory (MB): peak = 2348.008 ; gain = 0.000 ; free physical = 1330 ; free virtual = 37790
system_wrapper
xsct% hsi set_repo_path /media/masaaki/Ubuntu_Disk/KRIA_KV260/2022.1/kv260_median_platform/device-tree-xlnx
xsct% hsi create_sw_design device-tree -os device_tree -proc psu_cortexa53_0
device-tree
xsct% hsi set_property CONFIG.dt_overlay true [hsi::get_os]
true
xsct% hsi set_property CONFIG.dt_zocl true [hsi::get_os]
true
xsct% hsi generate_target -dir /media/masaaki/Ubuntu_Disk/KRIA_KV260/2022.1/kv260_median_platform/device-tree-xlnx
WARNING: Interrupt pin "mm2s_introut" of IP block: "axi_dma_0" is not connected to any interrupt controller
WARNING: Interrupt pin "s2mm_introut" of IP block: "axi_dma_0" is not connected to any interrupt controller
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "s_axi_lite_aclk" of IP block "axi_dma_0" is not connected to any of the pl_clk"
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "m_axi_mm2s_aclk" of IP block "axi_dma_0" is not connected to any of the pl_clk"
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "m_axi_s2mm_aclk" of IP block "axi_dma_0" is not connected to any of the pl_clk"
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "s_axi_aclk" of IP block "axi_intc_0" is not connected to any of the pl_clk"
WARNING: Interrupt pin "interrupt" of IP block: "median_axis_RGB24_0" is not connected to any interrupt controller
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "ap_clk" of IP block "median_axis_RGB24_0" is not connected to any of the pl_clk"
WARNING: Interrupt pin "interrupt" of IP block: "multi_axi4ls_0" is not connected to any interrupt controller
WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0"
WARNING: Clock pin "ap_clk" of IP block "multi_axi4ls_0" is not connected to any of the pl_clk"
zocl:true
ext_platform:
intr_ctrl_len:1
WARNING: ERROR: axi_dma_0: mm2s_introut port is not connected
WARNING: ERROR: axi_dma_0: s2mm_introut port is not connected
hsi::generate_target: Time (s): cpu = 00:00:26 ; elapsed = 00:00:29 . Memory (MB): peak = 2348.008 ; gain = 0.000 ; free physical = 1251 ; free virtual = 37735
xsct% hsi close_hw_design [hsi current_hw_design]
xsct% exit
exit
// multi_axi4ls.cpp
// 2022/09/18 by marsee
//
#include <stdint.h>
int multi_axi4ls(int16_t a, int16_t b, int32_t *c){
#pragma HLS INTERFACE mode=s_axilite port=c
#pragma HLS INTERFACE mode=s_axilite port=b
#pragma HLS INTERFACE mode=s_axilite port=a
#pragma HLS INTERFACE mode=s_axilite port=return
*c = a * b;
return(0);
}
// multi_axi4ls_tb.cpp
// 2022/09/18 by marsee
//
#include <stdio.h>
#include <stdint.h>
int multi_axi4ls(int16_t a, int16_t b, int32_t *c);
int main(){
int16_t a, b;
int32_t c;
a = 3;
b = 4;
multi_axi4ls(a, b, &c);
printf("a = %d, b = %d, c = (a*b) = %d\n", a, b, c);
return(0);
}
// the "macro" to dump signals
`ifdef COCOTB_SIM
initial begin
$dumpfile ("multiplier.vcd");
$dumpvars (0, multiplier);
#1;
end
`endif
# test_multiplier.py
# 2022/09/13 by marsee
import random
import cocotb
from cocotb.clock import Clock
from cocotb.triggers import Timer, RisingEdge
@cocotb.test()
async def test_multiplier(dut):
dut.ap_rst = 1 # Reset
clock = Clock(dut.ap_clk, 10, units="ns") # Create a 10ns period clock on port clk
cocotb.start_soon(clock.start()) # Start the clock
await Timer(10, units='ns')
dut.ap_start = 1
dut.ap_rst = 0 # Normal Operation
for i in range(5):
dut.a.value = i
dut.b.value = i+1
for j in range(3):
await RisingEdge(dut.ap_clk)
await Timer(1, units='ns')
assert dut.c.value == i*(i+1), "Invalid value for multiplication {}".format(i*(i+1))
await Timer(9, units='ns')
# Makefile
# 2022/09/13 by marsee
SIM ?= icarus
VERILOG_SOURCES = $(shell pwd)/multiplier.v
VERILOG_SOURCES += $(shell pwd)/multiplier_mul_mul_16s_16s_32_4_1.v
TOPLEVEL = multiplier
MODULE = test_multiplier
include $(shell cocotb-config --makefiles)/Makefile.sim
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/multiplier$ make
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/multiplier' に入ります
rm -f results.xml
MODULE=test_multiplier TESTCASE= TOPLEVEL=multiplier TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1663099051
0.00ns INFO cocotb.regression Found test test_multiplier.test_multiplier
0.00ns INFO cocotb.regression running test_multiplier (1/1)
/media/masaaki/Ubuntu_Disk/Cocotb/multiplier/test_multiplier.py:11: DeprecationWarning: Setting values on handles using the ``dut.handle = value`` syntax is deprecated. Instead use the ``handle.value = value`` syntax
dut.ap_rst = 1 # Reset
VCD info: dumpfile multiplier.vcd opened for output.
/media/masaaki/Ubuntu_Disk/Cocotb/multiplier/test_multiplier.py:19: DeprecationWarning: Setting values on handles using the ``dut.handle = value`` syntax is deprecated. Instead use the ``handle.value = value`` syntax
dut.ap_start = 1
/media/masaaki/Ubuntu_Disk/Cocotb/multiplier/test_multiplier.py:20: DeprecationWarning: Setting values on handles using the ``dut.handle = value`` syntax is deprecated. Instead use the ``handle.value = value`` syntax
dut.ap_rst = 0 # Normal Operation
160.00ns INFO cocotb.regression test_multiplier passed
160.00ns INFO cocotb.regression *****************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
*****************************************************************************************
** test_multiplier.test_multiplier PASS 160.00 0.00 40576.39 **
*****************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 160.00 0.21 754.96 **
*****************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/multiplier' から出ます
// ==============================================================
// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.1 (64-bit)
// Version: 2022.1
// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
//
// ===========================================================
`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="multiplier_multiplier,hls_ip_2022_1,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z020-clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=2.150000,HLS_SYN_LAT=3,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=4,HLS_SYN_LUT=25,HLS_VERSION=2022_1}" *)
module multiplier (
ap_clk,
ap_rst,
ap_start,
ap_done,
ap_idle,
ap_ready,
a,
b,
c,
c_ap_vld,
ap_return
);
parameter ap_ST_fsm_state1 = 4'd1;
parameter ap_ST_fsm_state2 = 4'd2;
parameter ap_ST_fsm_state3 = 4'd4;
parameter ap_ST_fsm_state4 = 4'd8;
input ap_clk;
input ap_rst;
input ap_start;
output ap_done;
output ap_idle;
output ap_ready;
input [15:0] a;
input [15:0] b;
output [31:0] c;
output c_ap_vld;
output [31:0] ap_return;
reg ap_done;
reg ap_idle;
reg ap_ready;
reg c_ap_vld;
(* fsm_encoding = "none" *) reg [3:0] ap_CS_fsm;
wire ap_CS_fsm_state1;
wire signed [31:0] grp_fu_53_p2;
wire ap_CS_fsm_state4;
reg [3:0] ap_NS_fsm;
reg ap_ST_fsm_state1_blk;
wire ap_ST_fsm_state2_blk;
wire ap_ST_fsm_state3_blk;
wire ap_ST_fsm_state4_blk;
wire ap_ce_reg;
// power-on initialization
initial begin
#0 ap_CS_fsm = 4'd1;
end
multiplier_mul_mul_16s_16s_32_4_1 #(
.ID( 1 ),
.NUM_STAGE( 4 ),
.din0_WIDTH( 16 ),
.din1_WIDTH( 16 ),
.dout_WIDTH( 32 ))
mul_mul_16s_16s_32_4_1_U1(
.clk(ap_clk),
.reset(ap_rst),
.din0(b),
.din1(a),
.ce(1'b1),
.dout(grp_fu_53_p2)
);
always @ (posedge ap_clk) begin
if (ap_rst == 1'b1) begin
ap_CS_fsm <= ap_ST_fsm_state1;
end else begin
ap_CS_fsm <= ap_NS_fsm;
end
end
always @ (*) begin
if ((ap_start == 1'b0)) begin
ap_ST_fsm_state1_blk = 1'b1;
end else begin
ap_ST_fsm_state1_blk = 1'b0;
end
end
assign ap_ST_fsm_state2_blk = 1'b0;
assign ap_ST_fsm_state3_blk = 1'b0;
assign ap_ST_fsm_state4_blk = 1'b0;
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
ap_done = 1'b1;
end else begin
ap_done = 1'b0;
end
end
always @ (*) begin
if (((ap_start == 1'b0) & (1'b1 == ap_CS_fsm_state1))) begin
ap_idle = 1'b1;
end else begin
ap_idle = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
ap_ready = 1'b1;
end else begin
ap_ready = 1'b0;
end
end
always @ (*) begin
if ((1'b1 == ap_CS_fsm_state4)) begin
c_ap_vld = 1'b1;
end else begin
c_ap_vld = 1'b0;
end
end
always @ (*) begin
case (ap_CS_fsm)
ap_ST_fsm_state1 : begin
if (((ap_start == 1'b1) & (1'b1 == ap_CS_fsm_state1))) begin
ap_NS_fsm = ap_ST_fsm_state2;
end else begin
ap_NS_fsm = ap_ST_fsm_state1;
end
end
ap_ST_fsm_state2 : begin
ap_NS_fsm = ap_ST_fsm_state3;
end
ap_ST_fsm_state3 : begin
ap_NS_fsm = ap_ST_fsm_state4;
end
ap_ST_fsm_state4 : begin
ap_NS_fsm = ap_ST_fsm_state1;
end
default : begin
ap_NS_fsm = 'bx;
end
endcase
end
assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0];
assign ap_CS_fsm_state4 = ap_CS_fsm[32'd3];
assign ap_return = 32'd0;
assign c = grp_fu_53_p2;
endmodule //multiplier
`timescale 1 ns / 1 ps
module multiplier_mul_mul_16s_16s_32_4_1_DSP48_0(clk, rst, ce, a, b, p);
input clk;
input rst;
input ce;
input signed [16 - 1 : 0] a;
input signed [16 - 1 : 0] b;
output signed [32 - 1 : 0] p;
reg signed [32 - 1 : 0] p_reg;
reg signed [16 - 1 : 0] a_reg;
reg signed [16 - 1 : 0] b_reg;
reg signed [32 - 1 : 0] p_reg_tmp;
always @ (posedge clk) begin
if (ce) begin
a_reg <= a;
b_reg <= b;
p_reg_tmp <= a_reg * b_reg;
p_reg <= p_reg_tmp;
end
end
assign p = p_reg;
endmodule
`timescale 1 ns / 1 ps
module multiplier_mul_mul_16s_16s_32_4_1(
clk,
reset,
ce,
din0,
din1,
dout);
parameter ID = 32'd1;
parameter NUM_STAGE = 32'd1;
parameter din0_WIDTH = 32'd1;
parameter din1_WIDTH = 32'd1;
parameter dout_WIDTH = 32'd1;
input clk;
input reset;
input ce;
input[din0_WIDTH - 1:0] din0;
input[din1_WIDTH - 1:0] din1;
output[dout_WIDTH - 1:0] dout;
multiplier_mul_mul_16s_16s_32_4_1_DSP48_0 multiplier_mul_mul_16s_16s_32_4_1_DSP48_0_U(
.clk( clk ),
.rst( reset ),
.ce( ce ),
.a( din0 ),
.b( din1 ),
.p( dout ));
endmodule
// multiplier.cpp
// 2022/09/13 by marsee
//
#include <stdint.h>
int multiplier(int16_t a, int16_t b, int32_t *c){
*c = a * b;
return(0);
}
// multiplier_tb.cpp
// 2022/09/13 by marsee
//
#include <stdio.h>
#include <stdint.h>
int multiplier(int16_t a, int16_t b, int32_t *c);
int main(){
int16_t a, b;
int32_t c;
a = 3;
b = 4;
multiplier(a, b, &c);
printf("a = %d, b = %d, c = (a*b) = %d\n", a, b, c);
return(0);
}
のようだ。つまり、1 つのテストあたり 2 ns 時間が進むようだ。await Timer(2, units="ns")
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests$ make SIM=icarus
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests' に入ります
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s adder -f sim_build/cmds.f -g2012 /media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests/../hdl/adder.sv
rm -f results.xml
MODULE=test_adder TESTCASE= TOPLEVEL=adder TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1662838789
0.00ns INFO cocotb.regression Found test test_adder.adder_basic_test
0.00ns INFO cocotb.regression Found test test_adder.adder_randomised_test
0.00ns INFO cocotb.regression running adder_basic_test (1/2)
Test for 5 + 10
VCD info: dumpfile dump.vcd opened for output.
2.00ns INFO cocotb.regression adder_basic_test passed
2.00ns INFO cocotb.regression running adder_randomised_test (2/2)
Test for adding 2 random numbers multiple times
22.00ns INFO cocotb.regression adder_randomised_test passed
22.00ns INFO cocotb.regression ******************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
******************************************************************************************
** test_adder.adder_basic_test PASS 2.00 0.00 2616.21 **
** test_adder.adder_randomised_test PASS 20.00 0.00 19518.44 **
******************************************************************************************
** TESTS=2 PASS=2 FAIL=0 SKIP=0 22.00 0.29 76.33 **
******************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests' から出ます
// the "macro" to dump signals
`ifdef COCOTB_SIM
initial begin
$dumpfile ("button_deb.vcd");
$dumpvars (0, button_deb);
#1;
end
`endif
// dff.sv
`timescale 1us/1ns
module dff (
output logic q,
input logic clk, d
);
always @(posedge clk) begin
q <= d;
end
`ifdef COCOTB_SIM
initial begin
$dumpfile ("dff.vcd");
$dumpvars (0, dff);
#1;
end
`endif
endmodule
SIM ?= icarus
# Makefile
SIM ?= icarus
TOPLEVEL_LANG = verilog
VERILOG_SOURCES = $(shell pwd)/dff.sv
TOPLEVEL = dff
MODULE = test_dff
include $(shell cocotb-config --makefiles)/Makefile.sim
cocotbは、Pythonを使用してVHDL および SystemVerilog RTLを検証するためのCOroutineベースのCOsimulation TestBench環境です。
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/dff_example$ make SIM=icarus
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/dff_example' に入ります
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s dff -f sim_build/cmds.f -g2012 /media/masaaki/Ubuntu_Disk/Cocotb/dff_example/dff.sv
rm -f results.xml
MODULE=test_dff TESTCASE= TOPLEVEL=dff TOPLEVEL_LANG=verilog \
/usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp
-.--ns INFO gpi ..mbed/gpi_embed.cpp:76 in set_program_name_in_venv Did not detect Python virtual environment. Using system-wide Python interpreter
-.--ns INFO gpi ../gpi/GpiCommon.cpp:101 in gpi_print_registered_impl VPI registered
0.00ns INFO cocotb Running on Icarus Verilog version 10.1 (stable)
0.00ns INFO cocotb Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
0.00ns INFO cocotb Seeding Python random module with 1662639569
0.00ns INFO cocotb.regression Found test test_dff.test_dff_simple
0.00ns INFO cocotb.regression running test_dff_simple (1/1)
Test that d propagates to q
95001.00ns INFO cocotb.regression test_dff_simple passed
95001.00ns INFO cocotb.regression **************************************************************************************
** TEST STATUS SIM TIME (ns) REAL TIME (s) RATIO (ns/s) **
**************************************************************************************
** test_dff.test_dff_simple PASS 95001.00 0.00 33260690.68 **
**************************************************************************************
** TESTS=1 PASS=1 FAIL=0 SKIP=0 95001.00 2.71 35015.19 **
**************************************************************************************
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/dff_example' から出ます
にアクセスした。http://192.168.3.17:9090/tree/my_project/cam_disp2
# VTC enable
vtc.write(0x0, 0x04) # Generation Enable
を追加してある。vtc = cam_disp.v_tc_0
#!/usr/bin/env python
# coding: utf-8
# cam_disp2<br>
# 2022/09/06 by marsee
# In[1]:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
from pynq import allocate, Overlay
import time
import cv2
# In[2]:
# Download bitstream
cam_disp = Overlay("./cam_disp.bit")
# In[3]:
# Generate an instance for each IP
vflip_dmaw = cam_disp.vflip_dma_write_0
paracam_inf = cam_disp.paracam_inf_axis_0
vtc = cam_disp.v_tc_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.axis2DMA4dwc_0
# In[4]:
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
# In[5]:
def cam_i2x_write_sync():
time.sleep(0.001) # 1ms wait
# In[6]:
def cam_i2c_write(cam_iic, device_addr, write_addr, write_data):
cam_iic.write(0x108, 0x100 | (device_addr & 0xfe)) # Slave IIC Write Address, address is 0x108, i2c_tx_fifo
cam_iic.write(0x108, (write_addr >> 8) & 0xff) # address upper byte
cam_iic.write(0x108, write_addr & 0xff) # address lower byte
cam_iic.write(0x108, 0x200 | (write_data & 0xff)) # data
cam_i2x_write_sync()
# In[7]:
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)
# In[8]:
# 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)
# In[9]:
# 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
# In[10]:
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
# In[11]:
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
# In[12]:
sobel0.register_map.row_size = height
sobel0.register_map.col_size = width
sobel0.register_map.function_r = 0 # ORG_IMGwAxiVdma
# In[13]:
sobel1.register_map.row_size = height
sobel1.register_map.col_size = width
sobel1.register_map.function_r = 0 # ORG_IMGwAxiVdma
# In[14]:
axis2dma.register_map.out_r = buffer3.physical_address
axis2dma.register_map.row_size = height
axis2dma.register_map.col_size = width
# In[15]:
# vflip_dma_write start and auto repeat
vflip_dmaw.register_map.CTRL = 0x81
# In[16]:
# Camera Initialization
cam_i2c_init(cam_iic)
cam_reg_set(cam_iic, 0x78)
# In[17]:
# paracam_inf_axi start
paracam_inf.write(0x0, 0x0)
paracam_inf.write(0x4, 0x0)
# In[18]:
# VTC enable
vtc.write(0x0, 0x04) # Generation Enable
# In[19]:
# sobel_axis_RGB24 start
sobel0.register_map.CTRL = 0x81
# In[20]:
# dma2axis_3buf start and auto repeat
dma2axis30.register_map.CTRL = 0x81
# In[21]:
# image capture
axis2dma.register_map.CTRL = 0x1
# In[22]:
print(axis2dma.register_map.CTRL)
# In[23]:
sobel1.register_map.CTRL = 0x1
# In[24]:
print(sobel1.register_map.CTRL)
# In[25]:
dma2axis31.register_map.CTRL = 0x1
# In[26]:
print(dma2axis31.register_map.CTRL)
# In[27]:
print(axis2dma.register_map.CTRL)
print(sobel1.register_map.CTRL)
print(dma2axis31.register_map.CTRL)
# In[28]:
cam_image = Image.fromarray(buffer3)
# In[29]:
print("Image size: {}x{} pixels.".format(width, height))
plt.figure(figsize=(12, 10));
_ = plt.imshow(cam_image)
# In[30]:
cam_image.save('temp.jpg')
# In[31]:
#sobel filter on for camera image
sobel0.register_map.function_r = 1 # SOBELwAxiVdma
# In[32]:
# sobel filter off for camera image
sobel0.register_map.function_r = 0 # ORG_IMGwAxiVdma
# In[27]:
#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
# In[ ]:
#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
で実行待ちになっている。asyncio.get_event_loop().run_until_complete(handler_task)
#!/usr/bin/env python
# coding: utf-8
# ## PYNQ Interrupt
# In[1]:
from pynq import Overlay, Interrupt, GPIO
import asyncio
# In[2]:
# Download bitstream
pi = Overlay("./pynq_int.bit")
# In[3]:
pi.interrupt_pins
# In[4]:
intc = pi.axi_intc_0
intr_inst = Interrupt('axi_gpio_0/ip2intc_irpt')
# In[5]:
from pynq.lib import AxiGPIO
# In[6]:
gpio0 = pi.ip_dict['axi_gpio_0']
gpio1 = pi.ip_dict['axi_gpio_1']
# In[7]:
leds = AxiGPIO(gpio1).channel1
sw = AxiGPIO(gpio0).channel1
# In[8]:
async def handle():
await sw.wait_for_interrupt_async()
leds[0:4].toggle()
# In[9]:
handler_task = asyncio.ensure_future(handle())
# In[10]:
asyncio.get_event_loop().run_until_complete(handler_task)
の cam_image の save メソッドを呼び出せば良いようだ。cam_image = Image.fromarray(buffer3)
cam_image.save('temp.jpg')
# 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 = 0x1
print(axis2dma.register_map.CTRL)
sobel1.register_map.CTRL = 0x1
print(sobel1.register_map.CTRL)
dma2axis31.register_map.CTRL = 0x1
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)
cam_image.save('temp.jpg')
#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 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |