i.MX6ULL的CSI(CMOS Sensor Interface),即,CMOS傳感器接口,是一種攝像頭并行數(shù)據(jù)接口,支持8-bit/10-bit/16-bit Bayer,YUV,YCrCb,RGB數(shù)據(jù)輸入,也支持CCIR656格式數(shù)據(jù)輸入。ELF?1開發(fā)板支持8位并行DVP接口的數(shù)字?jǐn)z像頭OV5640。
硬件原理
CSI_DATA0—CSI_DATA7是CSI數(shù)據(jù)信號(hào)引腳;
CSI_PIXCLK是像素時(shí)鐘;
CSI_MCLK為攝像頭提供主時(shí)鐘,保證功能實(shí)現(xiàn);
CSI_HSYNC、CSI_VSYNC作為攝像頭的行場(chǎng)掃描模式信號(hào),提供行場(chǎng)信息;
IIC2_SDA和IIC2_SCL用來(lái)配置攝像頭設(shè)備地址為0x30;
CSI_PWDN是CSI的電源使能引腳,由SN74HC595D擴(kuò)展芯片控制。
IOMUX配置
NXP官方的i.MX6ULL EVK板,使用的CSI接口與ELF?1開發(fā)板一致,所以,已經(jīng)配置好CSI接口和I2C2的的IOMUX:
修改設(shè)備節(jié)點(diǎn)
ELF?1的攝像頭和NXP官方使用的方案一致,都是OV5640攝像頭,但硬件設(shè)計(jì)略有區(qū)別,需要做出一些改動(dòng)。
根節(jié)點(diǎn)下csi節(jié)點(diǎn):
I2C2節(jié)點(diǎn)下內(nèi)容如下,Elf1底板上給OV5640做了硬件復(fù)位,無(wú)需軟件復(fù)位,因此,需要對(duì)設(shè)備樹做出一些修改,去掉復(fù)位部分以及修改電源引腳:
????????ov5640: ov5640@3c { ????????????????compatible = "ovti,ov5640"; ????????????????reg = <0x3c>; ????????????????pinctrl-names = "default"; ????????????????pinctrl-0 = <&pinctrl_csi1>; ????????????????clocks = <&clks IMX6UL_CLK_CSI>; ????????????????clock-names = "csi_mclk"; ????????????????pwn-gpios = <&gpio_spi 4 1>; ??????????????/* rst-gpios = <&gpio_spi 5 0>;*/ ????????????????csi_id = <0>; ????????????????mclk = <24000000>; ????????????????mclk_source = <0>; ????????????????status = "okay"; ????????????????port { ????????????????????????ov5640_ep: endpoint { ????????????????????????????????remote-endpoint = <&csi1_ep>; ????????????????????????}; ????????????????}; ????????}; |
效果如下:
reg = <0x3c>;攝像頭設(shè)備的I2C地址
clocks = <&clks IMX6UL_CLK_CSI>;配置CSI時(shí)鐘
clock-names = "csi_mclk";時(shí)鐘名稱
pwn-gpios = <&gpio_spi 4 1>;攝像頭電源使能引腳,由SN74HC595D 的QE控制。
rst-gpios = <&gpio_spi 5 0>;攝像頭復(fù)位引腳,此引腳沒有用到,所以注釋掉此屬性。
csi_id = <0>;CSI ID
mclk = <24000000>;攝像頭主時(shí)鐘設(shè)置為24M
mclk_source = <0>;時(shí)鐘源
配置OV5640驅(qū)動(dòng)
在內(nèi)核源碼當(dāng)中已經(jīng)集成了OV5640的驅(qū)動(dòng),路徑為:drivers/media/platform/mxc/subdev/ov5640.c。但這個(gè)驅(qū)動(dòng)需要修改后才能使用,在ELF?1的資料包當(dāng)中,提供了修改好的版本,路徑為:ELF 1開發(fā)板資料包