K230D RTOS 移植GC2093驱动后 kd_mpi_isp_连接异常

Viewed 83

问题描述


将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自己编译的

2 Answers

你好,请问你是需要实现什么目的?自定义sensor吗?

是的,我们想要FPGA转发SENSOR的图像至CSI2中。因此希望不配置寄存器,直接绕过该步骤让K230D接收一个模拟传感器图像

你们输出的是什么格式的图像?

目前FPGA输出图像与GC2093默认一致:RAW10 RGGB 1920*1080-30fps


U-Boot 2022.10-00009-ga4b0ed0a (Aug 29 2025 - 09:48:42 +0000)

CPU:   rv64imafdcvsu
Model: kendryte k230d canmv bpi zero
DRAM:  128 MiB
Core:  28 devices, 13 uclasses, devicetree: separate
MMC:   mmc0@91580000: 0, mmc1@91581000: 1
Loading Environment from MMC... OK
In:    serial@91400000
Out:   serial@91400000
Err:   serial@91400000
Net:   No ethernet found.
Hit any key to stop autoboot:  0
load image 1651740 bytes, time 69182 us, speed 23000 KB/s
Jump to big hart

OpenSBI v1.2.2
heap: [0x004fc3c0 - 0x00cfc3c0], size 8192 KB
page: [0x00cfc3c8 - 0x039fec00], size 46090 KB
lwIP-2.1.2 initialized!
[I/SDIO] SD card capacity 31166976 KB.
found part[0], begin: 52428800, size: 10.0MB
found part[1], begin: 62914560, size: 500.0MB
found part[2], begin: 1073741824, size: 28.740GB
[E/drv_touch] touch probe failed.
[I/sal.skt] Socket Abstraction Layer initialize success.
sensor_gc2093_probe result ret  -1
Can't find sensor on csi0
_sensor_read_chip_id_r enter, gc2093_csi2
_sensor_read_chip_id_r ffff chip id 0x2093
_sensor_read_chip_id_r result ret  0
sensor_gc2093_probe result ret  0
find sensor(gc2093_csi2) on csi2
vicap_mcm_init
#############SDK VERSION######################################
SDK   : v0.5-20250910-173913-root-DESKTOP-82J66OK-98374a6
CanMV : v1.4-20250910-173913-root-DESKTOP-82J66OK-96b6510
nncase: 2.9.0
##############################################################
msh />[W/LWP] not use fast load, out of memory 8388608 < 62655168
usb disconnect
[I/WLAN.dev] wlan init success
[I/WLAN.lwip] eth device init ok name:w0
[I/WLAN.dev] wlan init success
[I/WLAN.lwip] eth device init ok name:w1
CanMV K230 start in 3966190 us
IDE debugger built Sep 10 2025 17:40:24
[mpy] enter repl
[mpy] exit, reset
<3>[4] [Func]:vb_do_exit [Line]:1569 [Info]:vb already exited!
[mpy] enter script
probe sensor type 29, mirror 0
[E/gpio] Invalid GPIO pin 255 (max 71)
[E/gpio] Invalid GPIO pin 255
phy addr is 3b78000
phy addr is 3c33800
phy addr is 3cef000
phy addr is 3daa800
yaddr is 3b78000 uvaddr is 3bd6000
mirror is 0 , sensor tpye is 29, name is gc2093_csi2
sensor_mirror_set_impl result ret  0
sensor_get_mode_impl enter, sensor_type(29) gc2093_csi2
sensor_get_mode_impl result ret  0
first mode is 0
sensor_power_impl enter, gc2093_csi2
sensor_power_impl result ret  0
<0>[6] [vi] wait stop timeout

[tuning] dev: 0
acq_win.width: 1920
acq_win.height: 1080
pipe_ctrl: 4261412857
sensor_fd: 10
sensor_type: 29
sensor_name: gc2093_csi2
database_name: gc2093-1920x1080
buffer_num: 0
buffer_size: 0
[tuning] chn: 0
out_win.width: 800
out_win.height: 480
bit_width: 0
pix_format: 5
buffer_num: 6
buffer_size: 577536
yraw_size: 0
uv_size: 0
v_size: 0
block_type: 1
wait_time: 500
chn_enable: 1
isp_3dnr_en is 1 g_isp_dev_ctx[dev_num].dev_attr.pipe_ctrl.bits.dnr3_enable is 0
VsiCamDeviceCreate hw:0-vt:0 created!
sensor_conn_check_impl enter, gc2093_csi2
sensor_conn_check_impl result ret  0
sensor_power_impl enter, gc2093_csi2
sensor_power_impl result ret  0
sensor_init_impl enter, sensor_type:29 gc2093_csi2
sensor_init_impl result ret  0
sensor_get_mode_impl enter, sensor_type(29) gc2093_csi2
fake sensor mode: 1920x1080, fps=30000, bitwidth=10
sensor_get_mode_impl result ret  0
sensor_get_caps_impl enter, gc2093_csi2
sensor_get_caps_impl result ret  0
sensor_set_tpg_impl enter, gc2093_csi2
sensor_set_tpg_impl result ret  0
sensor_get_chip_id_impl enter, gc2093_csi2
_sensor_read_chip_id_r enter, gc2093_csi2
_sensor_read_chip_id_r ffff chip id 0x2093
_sensor_read_chip_id_r result ret  0
sensor_get_chip_id_impl result ret  0
sensor_get_tpg_impl enter, gc2093_csi2
sensor_get_tpg_impl result ret  0
sensor_get_mode_impl enter, sensor_type(29) gc2093_csi2
fake sensor mode: 1920x1080, fps=30000, bitwidth=10
sensor_get_mode_impl result ret  0
sensor_get_isp_status_impl enter, gc2093_csi2
sensor_get_isp_status_impl result ret  0
sensor_get_otp_data_impl enter, gc2093_csi2
sensor_get_otp_data_impl result ret  0
sensor_get_mode_impl enter, sensor_type(29) gc2093_csi2
fake sensor mode: 1920x1080, fps=30000, bitwidth=10
sensor_get_mode_impl result ret  0
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: 42 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

把每个函数的返回值输出一下看看。

你好已将返回值部分替换原有的位置了,打印出来大部分都是0

sensor_get_mode_impl result ret 0 这个函数,怎么改的