问题描述
将GC2093驱动内部I2C逻辑全部去掉,用我们FPGA工程师开发的板子直接传出图像至CSI2接口中,启动上层应用后出现报错:
sensor_get_otp_data_impl enter, gc2093_csi2
sensor_get_mode_impl enter, sensor_type(29) gc2093_csi2
fake sensor mode: 1920x1080, fps=30000, bitwidth=10
kd_mpi_isp_connect, vsi connect failed(6)!
kd_mpi_isp_init, isp connect failed.
kd_mpi_vicap_init, isp init failed.
[mpy] exit, reset
ch 3: 40 pictures encoded. Average FrameRate = 29 Fps
ch 3: total used pages 474
[mpy] enter script
^C[mpy] exit, reset
<3>[4] [Func]:vb_do_exit [Line]:1569 [Info]:vb already exited!
vpu_exit>q_wm 13
现在不太清除是FPGA数据传输不对,还是我驱动这头没有搞好
复现步骤
将设计寄存器读取操作部分全部用宏定义消除
static k_s32 _sensor_read_chip_id_r(struct sensor_driver_dev *dev, k_u32 *chip_id)
{
k_s32 ret = 0;
k_u16 id_high = 0;
k_u16 id_low = 0;
const k_s32 pwd_gpio = dev->pwd_gpio;
const k_s32 reset_gpio = dev->reset_gpio;
pr_info("%s enter, %s\n", __func__, dev->sensor_name);
if(NULL == dev->i2c_info.i2c_bus) {
pr_err("%s no i2c bus\n", dev->i2c_info.i2c_bus);
return -1;
}
#if SENSOR_USE_VIRTUAL_DRIVER == 1
//虚拟驱动直接默认连接
if(chip_id) {
*chip_id = GC2093_CHIP_ID;
pr_info("%s ffff chip id 0x%x\n", func, *chip_id);
}
#else
pr_info("%s reset_gpio %d\n", func, reset_gpio);
if(0 <= reset_gpio) {
kd_pin_mode(reset_gpio, GPIO_DM_OUTPUT);
kd_pin_write(reset_gpio, GPIO_PV_HIGH);
}
rt_thread_mdelay(1); // wait reset stable.
ret = sensor_reg_read(&dev->i2c_info, GC2093_REG_ID, &id_high);
ret |= sensor_reg_read(&dev->i2c_info, GC2093_REG_ID + 1, &id_low);
if(chip_id) {
*chip_id = (id_high << 8) | id_low;
pr_info("%s chip id 0x%x\n", __func__, *chip_id);
}
#endif // SENSOR_USE_VIRTUAL_DRIVER
return ret;
}
硬件板卡
香蕉派CanMV-K230D-Zero
软件版本
RTSONLY自己编译的