问题描述
K230 芯片支持 3 路摄像头(CSI0~CSI2),但在 Linux 操作系统下,受驱动限制目前只支持单路。本文以默认使用 CSI2 接口的 01Studio 板子为例,演示切换至 CSI1 接口的操作步骤。
一、根据你板子的硬件原理图,修改硬件配置

从硬件原理图可以看到,CSI1 使用 I2C1,需要打开 I2C1 接口,并且修改摄像头 I2C 配置信息
修改 DTS 配置文件,下面两个文件需要修改的地方是一样的
~/k230_linux_sdk/output/k230_canmv_01studio_defconfig/build/linux-7d4e1f444f461dbe3833bd99a4640e7b6c2cd529/arch/riscv/boot/dts/canaan/k230-canmv-01studio.dts
~/k230_linux_sdk/output/k230_canmv_01studio_defconfig/build/linux-7d4e1f444f461dbe3833bd99a4640e7b6c2cd529/arch/riscv/boot/dts/canaan/k230-canmv-01studio-lcd.dts
1、把右边的 i2c4 按照硬件原理图修改成 i2c1

2、使能 i2c1

3、修改 mipi0 配置信息
| 端口号 | 配置信息 |
|---|---|
| CSI0 | &mipi0 { // set to csi0 id = <0>; reg = <0x0 0x90000800 0x0 0x800>; interrupts = <115 IRQ_TYPE_LEVEL_HIGH>; resets = <&sysctl_reset K230_RESET_CSI0_REG_OFFSET K230_RESET_CSI0_TYPE K230_RESET_CSI0_DONE_BIT K230_RESET_CSI0_ASSERT_BIT>, <&sysctl_reset K230_RESET_M0_REG_OFFSET K230_RESET_M0_TYPE K230_RESET_M0_DONE_BIT K230_RESET_M0_ASSERT_BIT>;}; |
| CSI1 | &mipi0 { // set to csi1 id = <1>; reg = <0x0 0x90000800 0x0 0x800>; interrupts = <118 IRQ_TYPE_LEVEL_HIGH>; resets = <&sysctl_reset K230_RESET_CSI1_REG_OFFSET K230_RESET_CSI1_TYPE K230_RESET_CSI1_DONE_BIT K230_RESET_CSI1_ASSERT_BIT>, <&sysctl_reset K230_RESET_M1_REG_OFFSET K230_RESET_M1_TYPE K230_RESET_M1_DONE_BIT K230_RESET_M1_ASSERT_BIT>;}; |
| CSI2 | &mipi0 { // set to csi2 id = <2>; reg = <0x0 0x90000800 0x0 0x800>; interrupts = <121 IRQ_TYPE_LEVEL_HIGH>; resets = <&sysctl_reset K230_RESET_CSI2_REG_OFFSET K230_RESET_CSI2_TYPE K230_RESET_CSI2_DONE_BIT K230_RESET_CSI2_ASSERT_BIT>, <&sysctl_reset K230_RESET_M2_REG_OFFSET K230_RESET_M2_TYPE K230_RESET_M2_DONE_BIT K230_RESET_M2_ASSERT_BIT>;}; |
修改 Sensor 的 I2C_SLAVE_ADDRESS
例如我这边接入的是 GC2093 摄像头,需要修改驱动文件:
~/k230_linux_sdk/buildroot-overlay/package/vvcam/src/gc2093.c

需要根据自己手上的 Sensor 确定修改哪个文件。
目前我们已经适配的 Sensor 和地址对应如下:
| Sensor Type | I2C_SLAVE_ADDRESS |
|---|---|
| GC2093 | 0x7e or 0x37 |
| GC2053 | 0x37 |
| BY3238 | 0x6e |
| OV5647 | 0x36 |
注:GC2093 有两种模块,所以有两个值,两个都可以尝试一下
二、重新build并测试
在修改完上面代码之后,重新生成 IMG,重新烧写 IMG 并运行 demo 测试。
make linux-rebuild
make vvcam-rebuild
make