首页 > 技术知识 > 正文

1. 前言

承接上篇文章, 这里主要是驱动调试部分

2. 调试记录 (1)硬件引脚梳理

【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试1 9950没有上电时序要求,直接在dts中将PMU电配好即可

(2) 调试I2C

tp9950地址为0x44; 使用CCI测试 /sys/devices/tp9950; 发现I2C不通;

a.查看MCLK发现没有信号, MCLK正常 b. 查看I2C上拉情况, 正常 c. 查看电压情况, 1.8V正常

后来发现是操作原因导致

原因: I2C地址使用错了,应该确实是用0x88,而不是用七位地址0x44 (可能这个版本的I2C地址确实是加上读写位的)

I2C reg读取正常: 【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试11

(3) 编译图像采集程序

全志平台SDK里面有测试通过的,图像采集程序

路径: /linux-3.10/drivers/media/platform/sunxi-vfe/test

修改Makefile指定交叉工具链

【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试12

(4)采集图像

测试命令: csi_test 0 0 640 480 ./ 0 10

尝试采集图像: 采集失败

采集log如下:

[ 2019.459831] [VFE]vfe_open [ 2019.463020] [VFE]vfe_runtime_resume [ 2019.479045] [VFE]……………………..vfe clk open!………………….. [ 2019.487182] [VFE]vfe_open ok [ 2019.490401] [VFE_WARN]NOT found this item: tp9950, you can add this sensor in the sensor_list_t! [ 2019.500260] [VFE]Set csi core clk = 300000000, after Set csi core clk = 300000000 [ 2019.520016] [TW2866]CSI_SUBDEV_PWR_ON! [ 2019.525402] [VFE]mclk on [ 2019.596433] [TW2866]sensor_init [ 2019.600049] [TW2866]reg 0x01 rdval = 0x8 [ 2019.604518] [TW2866]reg 0x02 rdval = 0xc2 [ 2019.609086] [TW2866]reg 0x06 rdval = 0x32 [ 2019.613551] [TW2866]sensor_s_parm [ 2019.617178] [TW2866]sensor_s_fmt [ 2019.630280] [TW2866]s_fmt = 2006, width = 1280, height = 720 [ 2019.636455] [TW2866]s_fmt end [ 2019.639700] csi->frame_info.frm_byte_size = 1382400 resolution got from sensor = 128[ 2019.645324] [VFE]queue_setup, buffer count=8, size=1382400 0*720 [ 2019.654234] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.663091] ion_alloc carveout failed!! [ 2019.668246] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.676645] ion_alloc carveout failed!! [ 2019.681413] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.689579] ion_alloc carveout failed!! [ 2019.694745] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.703067] ion_alloc carveout failed!! [ 2019.707743] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.716130] ion_alloc carveout failed!! [ 2019.721146] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.729311] ion_alloc carveout failed!! [ 2019.734237] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.742555] ion_alloc carveout failed!! [ 2019.747500] csi_test-842 ion_alloc:522 buffer alloc fail ! heap id 4, len 1384448 [ 2019.755893] ion_alloc carveout failed!! VIDIOC_STREAMON ok select timeout[ 2021.763256] [VFE]vfe_close VIDIOC_STREAMOFF ok *********[ 2021.767092] [TW2866]CSI_SUBDEV_PWR_OFF! ****************mode 0 test fail[ 2021.774226] [VFE]mclk off ed at the 9 time!! [ 2021.816503] [VFE]vfe_runtime_suspend [ 2021.820487] [VFE]……………………..vfe clk close!………………….. [ 2021.834875] [VFE]vfe_close end #
<
(5)排查原因

a . tp9950信号测试 这边测了下MCLK Vsync D0~D7是有信号的 【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试13

b. ion内存分配报错

可能原因: csi_test程序中申请了8个buffer,则 1280720302 8=442M,而A64的ion buffer只分配了256M

【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试14

解决办法: 将csi_tesi的buffer申请到4个 现象: 发现也是一样的现象

看驱动源码继续查问题,发现ion应该申请成功了: 即上面的CARVEOUT申请失败了,但下面的DMA申请成功了 (因为下面的没有报错)

v4l2-core/videobuf2-dma-contig.c 【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试15

所以这部分报错可以忽略

c. 查看A64寄存器 cd /sys/class/sunxi_dump/ echo 0x01cb0000,0x01cb009c>dump;cat dump 【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试16

offset 0x80 1280 0x84 360

0x88 640 1280 0x8c 480 640 这是不接相机查的接口,发现和上面的一样的,这就郁闷了 【全志平台】A64平台 TP9950 BT656输入驱动调试(1)驱动调试17

猜你喜欢