一、硬件信息
TP2815:
确认硬件信息:
1、通信接口:TWI2总线,引脚组为PE1 、PE2
2、RESET脚:
二、软件配置
1、设备树
t527 dtsi:
bsp/configs/linux-5.15/sun55iw3p1.dtsi
t527 uboot-board.dts
device/config/chips/t527/configs/demo_linux_car/board.dts
&twi2 {clock-frequency = <400000>;pinctrl-0 = <&twi2_pins_default>;pinctrl-1 = <&twi2_pins_sleep>;pinctrl-names = "default", "sleep";/* For stability and backwards compatibility, we recommend setting ‘twi_drv_used’ to 1 */twi_drv_used = <1>;rproc-name = "7130000.e906_rproc";twi-supply = <®_dcdc4>;status = "okay";
};pinctr:twi2_pins_default: twi2@0 {pins = "PE1", "PE2";function = "twi2";drive-strength = <20>;bias-pull-up;};twi2_pins_sleep: twi2@1 {pins = "PE1", "PE2";function = "gpio_in";};
之后配置sensor信息以及video节点
配置挂载完后烧录:
cat /sys/class/video4linux/v4l-subdev0/name
在buildroot/package/auto/sdk_demo/csi_test路径下编译生成测试程序csi_test_usrptr
push到开发板运行
./csi_test_usrptr 0 0 1280 720 /usr/capture_images/ 4 20 30
检查电源是否供电正常或者配置 twi 是否正确
检查后发现tp815没供电
修改设备树,让其输出高电平:
重新编译烧录后:video能正常获取到图像(注意帧率以及图像格式)
配置后正常出图
YUYVViewer查看
第二个TP2815
1、使用的是 PE3, PE4 这一组 twi3 的通讯接口。使用的 mclk2 。
2、RESET 控制接口为 PK10, PWDN 控制接口为 PK22。
两路 sensor 同时输入,但 ISP 只有一个,此时需要开启 ISP 时分复用功能(离线模式)
tdm0、isp00、scaler00/10/20/30、vinc00/10/20/30 的work_mode 均需配置成 ,即离线模式。
注:scaler00/10/20/30的work_mode 配置成 时会出现scaler channel ID nember is lost!!!
双目TP2815场景下,可支持的video节点分别为:
sensor0:video 0/4/8/12
sensor1:video 1/5/9/13
cat /sys/class/video4linux/v4l-subdev*/name
两个驱动加载均正常
使用sensor1:video 1/5/9/13时,出现vin:[ERR]: video1 is controlling by rtos,open /dev/video1 falied的报错
找到相应报错代码:
bsp/drivers/vin/vin-video/vin_video.c:3583: vin_err("video%d is controlling by rtos\n", vinc->id);
解决办法:
CONFIG_RV_RUN_CAR_REVERSE 宏应该是快速倒车,RTOS 应该是内部的RISC MCU模块,起到快速进入倒车的作用, 关闭该宏再次进行测试。
根据log信息,PC的值是pc: sunxi_isp_sensor_type+0x0/0x40
sunxi_isp_sensor_type:表示出错的函数;
0x0:表示出错语句在出错函数中的偏移位置;
0x40:表示sunxi_isp_sensor_type函数的大小;
找出函数地址:
在源码编译目录下的System.map中找到错误函数sunxi_isp_sensor_type
vi out/t527/demo_linux_car/buildroot/System.map
[ 546.395884] pc : sunxi_isp_sensor_type+0x0/0x40
aarch64-linux-gnu-addr2line -e vmlinux ffffffc008767220(ffffffc008767220+0x0)
定位到kernel/linux-5.15/include/linux/ioport.h 220行
打印信息辅助调试:
cap->pipe.sd[VIN_IND_ISP] 的值为 0000000000000000,该指针为空
最终修改video节点后解决
三、问题排查
在线模式:
sensor0:video 0/4/8/12都能正常打开
sensor1:video 1/5/9/13 ,指示 vipp0/4/8/12 正在在线模式下工作,但是 vipp1/5/9/13无法工作。
离线模式:
sensor0:video 0/4/8/12 出现scaler* channel ID nember is lost!!!
sensor1:video 1/5/9/13,能打开,但无信号select timeout,可通过示波器或者读取主控芯片输入寄存器来确认是否有接受到数据
在内核打开ISP_TDM重新编译时,八个video节点均发生错误
cat /sys/kernel/debug/mpp/vi查看链路
询问全志得知T527 同时只支持 6 路输入,不支持 8 路。还有,虚拟 isp 不支持 tdm。
取消ISP复用,修改为六路摄像头
sensor0:video 0/4/8/12
sensor1:video 16/17/
sensor1的两个节点如下:
烧录测试后sensor0的四个video节点正常出图,sensor1的两个节点应用抓图出现select timeout,无数据输入
排查如下;
确认是否正常是波形输出,mipi data ,mipi clk 都要确认
示波器测量后与正常出图的波形对比,波形正常
- 上面确认正确后,微调下面手段:
用 csitest 打开对应节点后,提示 select timeout 时候,动态调整一下,动态写寄存器,看看哪个寄存器值可以稳定出图
echo 0x05810318 xxxxx > /sys/class/sunxi_dump/write;修改写入的 20:24 bit ,动态测试看看,有哪个值会更稳定
写入 0x7 示范如下:
echo 0x05810318 0x00700000 > write
[20:24] 范围是 0x00-0x1f ,也就是 0x00000000 到 0x01f00000
也可以通过 echo 0x05810318 > /sys/class/sunxi_dump/dump;cat /sys/class/sunxi_dump/dump 来确认是否正常写入
写入0x01后能正常出图
echo 0x05810318 0x00100000 > /sys/class/sunxi_dump/write;echo 0x05810318 > /sys/class/sunxi_dump/dump;cat /sys/class/sunxi_dump/dump
多次测试,写入0x01 会比较稳定
修改代码,路径:bsp/drivers/vin/vin-mipi/combo_csi/combo_csi_reg.c
修改如下:Deskew通常用于调整信号的时序,以消除因信号传输延迟而引起的问题
至此,六路摄像头正常出图,完工撒花!!!