android的底层驱动调试心得

一、串口

1、验证小系统是否跑起来,如果没反应,可以多尝试几个串口,有的串口可能不支持这个,注意看波特率,一般会在dts文件有个debugger函数。上面有这个波特率的说明,包含115200 1500000等。然后就看打印信息,查看TX、RX线对了吗。

二、查看gpio的状态

进入adb shell抓取gpio的状态
先要切换为su模式

cat sys/kernel/debug/gpio
或者在根目录下
cat /d/gpio

就能看到下面这些东西,对应的gpio的状态

k66_qls_cnt:/ # cat /d/gpio
gpiochip0: GPIOs 0-31, parent: platform/fdd60000.gpio, gpio0:
 gpio-5   (                    |vcc5v0_otg          ) out lo    
 gpio-13  (                    |gsl-irq-port        ) in  lo    
 gpio-14  (                    |gsl-wake-port       ) out hi       
 gpio-21  (                    |pwrg-int            ) out hi    

gpiochip1: GPIOs 32-63, parent: platform/fe740000.gpio, gpio1:
 gpio-61  (                    |eeprom-wp           ) out lo    
 gpio-62  (                    |led_r               ) out lo    
 gpio-63  (                    |led_g               ) out hi    

gpiochip2: GPIOs 64-95, parent: platform/fe750000.gpio, gpio2:
 gpio-73  (                    |reset               ) out lo    
 gpio-77  (                    |bt_default_rts      ) in  hi    

gpiochip3: GPIOs 96-127, parent: platform/fe760000.gpio, gpio3:
 gpio-98  (                    |bat_det_gpio        ) in  lo    
 gpio-100 (                    |lte-usben           ) out hi   

这些gpio都是通过pinctrl控制了的,我们不能通过命令行改变状态的。
还有一些gpio我们可以控制

rk66_qls_cnt:/ # cd sys/class/gpio/ 

在这个目录下有一些gpio我们可以通过以下命令控制

rk66_qls_cnt:/sys/class/gpio # ls
export  gpiochip0  gpiochip128  gpiochip255  gpiochip32  gpiochip64  gpiochip96  unexport

我们想要取控制gpio88就只需要去加载这个gpio

rk66_qls_cnt:/sys/class/gpio # echo 88 > export 

当然这个gpio是通过刚才那个cat /d/gpio不能看到的

rk66_qls_cnt:/sys/class/gpio # ls                                                                                                                   
export  gpio88  gpiochip0  gpiochip128  gpiochip255  gpiochip32  gpiochip64  gpiochip96  unexport

可以看到在这个gpio下面多了一个gpio88我们进入这个gpio88
设置输入输出模式

rk66_qls_cnt:/sys/class/gpio/gpio88 # echo out/in > direction

设置高低电平

rk66_qls_cnt:/sys/class/gpio/gpio88 # echo 0/1 > value

再去测量板子上对应的gpio就会看到电平的变化

三、gpio的计算

在rockchip里面,gpio分组为32一组,每组4对,每队8个
举个例子:

GPIO0_B4 被描述为:<&gpio0 12 >
GPIO0对应gpio0,B4对应12。
计算公式:(x)*8+(y)=12这里的x对应GOIO的ABCD组(A为0,B为1,C为2,D为3)(y)是组数后面的数字,这里为4。
GPIO3_A3 = <&gpio3 3>;GPIO3_C5= <&gpio3 21>
之前说过的gpio100这个只需要把gpio换成对应的数字就好。
比如 <&gpio3 3>
gpio3的开头是96,所以GPIO3_A3也可以说是gpio99。
GPIO0_B4对应gpio12。

gpiochip0: GPIOs 0-31,
gpiochip1: GPIOs 32-63
gpiochip2: GPIOs 64-95
gpiochip3: GPIOs 96-127
gpiochip4: GPIOs 128-159

这里就是每组32个,每一组的开头和结尾都写出来了

四、调试背光

核对GPIO口,找到使能gpio.
相关代码

backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm4 0 25000 0>;
		brightness-levels = <
			  0  20  20  21  21  22  22  23
			 23  24  24  25  25  26  26  27
			 27  28  28  29  29  30  30  31
			 31  32  32  33  33  34  34  35
			 35  36  36  37  37  38  38  39
			 40  41  42  43  44  45  46  47
			 48  49  50  50  51  52  53  54
			 55  55  56  57  58  59  60  61
			 62  63  64  64  65  65  66  67
			 68  69  70  71  71  72  73  74
			 75  76  77  78  79  79  80  81
			 82  83  84  85  86  86  87  88
			 89  90  91  92  93  94  94  95
			 96  97  98  99 100 101 101 102
			103 104 105 106 107 107 108 109
			110 111 112 113 114 115 115 116
			117 118 119 120 121 122 123 123
			124 125 126 127 128 129 130 130
			131 132 133 134 135 136 136 137
			138 139 140 141 142 143 143 144
			145 146 147 147 148 149 150 151
			152 153 154 155 156 156 157 158
			159 157 158 159 160 161 162 162
			163 164 165 166 167 168 169 169
			170 171 172 173 174 175 175 176
			177 178 179 180 181 182 182 183
			184 185 186 187 188 189 190 190
			191 192 193 194 195 196 197 197
			198 199 200 201 202 203 204 204
			205 206 207 208 209 209 210 211
			212 213 213 214 214 215 215 216
			216 217 217 218 218 219 219 220
		>;
		default-brightness-level = <200>;
		/*自己设置GPIO,也要看驱动里面使用没有这个GPIO,或者硬件怎么连接的*/
        	enable-gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;		
    };

可以自己取通过cat对应的gpio的状态;然后看屏幕的背光是否亮起来。

五、调试屏幕

1)判断是mipi的屏幕还是lvds或者都要使用
如如果是mipi则需要向厂家要开屏指令

adb查看对应的驱动是否挂载
cat /sys/class/graphics/fb0 查看lvds的驱动是否挂载如果有则会出现fb0(目前来看是这样)
也可以在驱动里面增加打印信息,判断你的驱动是否加载,然后就看接口是否打开。
比如lvds_phy0或者lvds_phy1这些是的状态是okay还是disabled

首先你的屏幕亮起来在去看这个屏幕参数,出现花频闪屏就是参数有问题,如果屏幕都没亮就是gpio或者上电时序都没对,然后就可找硬件同事去查看电压对不对,最后调参数。

&lvds_phy0 {
	status = "okay";
};

屏幕参数的代码

panel@0 {
		compatible = "aoly,sl008pa21y1285-b00", "simple-panel-dsi";
		/* 这个一般是默认,不会改*/
		reg = <0>;
		backlight = <&backlight>;
		/*需要自己取核对IO口,注意是高有效还是低有效*/
		enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&lcd_enable_gpio>, <&lcd_rst_gpio>;
		/*这个是上电时序*/
		prepare-delay-ms = <120>;
		reset-delay-ms = <120>;
		init-delay-ms = <120>;
		stbyb-delay-ms = <120>;
		enable-delay-ms = <120>;
		disable-delay-ms = <120>;
		unprepare-delay-ms = <120>;
		/*屏幕的宽和高需要看对应的手册*/
		width-mm = <229>;
		height-mm = <143>;
		
		dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
			      MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
		dsi,format = <MIPI_DSI_FMT_RGB888>;
		dsi,lanes = <4>;
		/*如果是mipi的屏幕就需要原厂提供参数,如果是lvds则不需要*/
		panel-init-sequence = [
			23 00 02 B0 01
			23 00 02 C3 0F
			23 00 02 C4 00
			23 00 02 C5 00
			23 00 02 C6 00
			23 00 02 C7 00
			23 00 02 C8 0D
			23 00 02 C9 12
			23 00 02 CA 11
			23 00 02 CD 1D
			23 00 02 CE 1B
			23 00 02 CF 0B
			23 00 02 D0 09
			23 00 02 D1 07
			23 00 02 D2 05
			23 00 02 D3 01
			23 00 02 D7 10
			23 00 02 D8 00
			23 00 02 D9 00
			23 00 02 DA 00
			23 00 02 DB 00
			23 00 02 DC 0E
			23 00 02 DD 12
			23 00 02 DE 11
			23 00 02 E1 1E
			23 00 02 E2 1C
			23 00 02 E3 0C
			23 00 02 E4 0A
			23 00 02 E5 08
			23 00 02 E6 06
			23 00 02 E7 02
			23 00 02 B0 03
			23 00 02 BE 03
			23 00 02 CC 44
			23 00 02 C8 07
			23 00 02 C9 05
			23 00 02 CA 42
			23 00 02 CD 3E
			23 00 02 CF 60
			23 00 02 D2 04
			23 00 02 D3 04
			23 00 02 D4 01
			23 00 02 D5 00
			23 00 02 D6 03
			23 00 02 D7 04
			23 00 02 D9 01
			23 00 02 DB 01
			23 00 02 E4 F0
			23 00 02 E5 0A
			23 00 02 B0 00
			23 00 02 BA 8F
			23 00 02 BD 63
			23 00 02 C2 08
			23 00 02 C4 10
			23 00 02 B0 02
			23 00 02 C0 00
			23 00 02 C1 0A
			23 00 02 C2 20
			23 00 02 C3 24
			23 00 02 C4 23
			23 00 02 C5 29
			23 00 02 C6 23
			23 00 02 C7 1C
			23 00 02 C8 19
			23 00 02 C9 17
			23 00 02 CA 17
			23 00 02 CB 18
			23 00 02 CC 1A
			23 00 02 CD 1E
			23 00 02 CE 20
			23 00 02 CF 23
			23 00 02 D0 07
			23 00 02 D1 00
			23 00 02 D2 00
			23 00 02 D3 0A
			23 00 02 D4 13
			23 00 02 D5 1C
			23 00 02 D6 1A
			23 00 02 D7 13
			23 00 02 D8 17
			23 00 02 D9 1C
			23 00 02 DA 19
			23 00 02 DB 17
			23 00 02 DC 17
			23 00 02 DD 18
			23 00 02 DE 1A
			23 00 02 DF 1E
			23 00 02 E0 20
			23 00 02 E1 23
			23 00 02 E2 07

			05 78 01 11
			05 32 01 29
		];
		
		panel-exit-sequence = [
			05 dc 01 28
			05 78 01 10
		];
		/*下面需要自己查看手册*/
		display-timings {
			native-mode = <&timing0>;
			timing0: timing0 {
				/* 时钟频率*/
				clock-frequency = <512000000>;
				/*这个就是屏幕的分辨率*/
				hactive = <1024>;
				vactive = <600>;
				/*对应的参数,需要修改*/
				hsync-len = <140>;
				hback-porch = <160>;
				hfront-porch = <160>;

				vsync-len = <20>;
				vback-porch = <23>;
				vfront-porch = <12>;
				/*默认低电平有效*/
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
		};

2)、找到自己的屏幕的手册
其中以下参数根据屏的规格书填写:

hactive = <480>;        // 分辨率-宽
vactive = <854>;        // 分辨率-高

hsync-len = <24>;       // 行同步肪冲宽度	单位:像素时钟周期	也有手册简称为HWH(HSYNC width)	
hback-porch = <24>;     // 行可视范围前肩	HBP在每行或每列的象素数据开始输出时要插入的象素时钟周期数
hfront-porch = <72>;    // 行可视范围后肩	HFP在每行或每列的象素结束到LCD 行时钟输出脉冲之间的象素时钟数

vsync-len = <2>;        // 场同步脉冲宽度	单位:显示一行的时间th	也有手册简称为VWH(VSYNC width)
vback-porch = <10>;     // 帧可视前肩		vbp在垂直同步周期之后帧开头时的无效行数
vfront-porch = <12>;    // 帧可视后肩		vfp本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数

以下参数表示对应信号的有效电平,默认为低电平(0):

hsync-active = <0>;     // 行同步信号
vsync-active = <0>;     // 场同步信号
de-active = <0>;        // de信号
pixelclk-active = <0>;  // clk信号

pinctrl的配置

    lcd {
        lcd_rst_gpio: lcd-rst-gpio {
            rockchip,pins = <0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;    
        };

        lcd_enable_gpio: lcd-enable-gpio {
            rockchip,pins = <0 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>;    
        };

        lcd_stb_gpio: lcd_stb_gpio {
                rockchip,pins = <0 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;   
            };
    }; 

4、调试wifi蓝牙模块

相关代码:

sdio_pwrseq: sdio-pwrseq {
		compatible = "mmc-pwrseq-simple";
		/*不同的pmic这里不一样*/		
		clocks = <&rk817 1>;
		clock-names = "ext_clock";
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_enable_h>;

		/*
		 * On the module itself this is one of these (depending
		 * on the actual card populated):
		 * - SDIO_RESET_L_WL_REG_ON
		 * - PDN (power down when low)
		 */
		 post-power-on-delay-ms = <200>;
		/*这个reg-on的gpio比较重要,这个一定要配置对,注意看上面的注释,低有效还是高有效*/
		 reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_LOW>;     
		 
	/*这个是wifi唤醒角,这个看你自己的需求*/
	wireless-wlan {
		compatible = "wlan-platdata";
		rockchip,grf = <&grf>;
		wifi_chip_type = "ap6256";
		pinctrl-names = "default";
		pinctrl-0 = <&wifi_host_wake_irq>;
		WIFI,host_wake_irq = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;		
		status = "okay";
	};
	/*这是蓝牙的gpio配置*/
	wireless-bluetooth {
		compatible = "bluetooth-platdata";
		clocks = <&rk817 1>;
		clock-names = "ext_clock";
		//wifi-bt-power-toggle;
		uart_rts_gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_LOW>;		
		pinctrl-names = "default", "rts_gpio";
		pinctrl-0 = <&uart1m0_rtsn>,
                   	<&bt_reset_gpio>,
			<&bt_wake_gpio>,
			<&bt_irq_gpio>;
		pinctrl-1 = <&uart1_gpios>;
		BT,reset_gpio    = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;	
		BT,wake_gpio     = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;	
		BT,wake_host_irq = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;	
		status = "okay";
	};

/*这是pinctrl的相关配置*/
&pinctrl {
	sdio-pwrseq {
		wifi_enable_h: wifi-enable-h {
			rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;	
		};
	};

	wireless-wlan {
		wifi_host_wake_irq: wifi-host-wake-irq {
			rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;	
		};
	};

	wireless-bluetooth {
		uart1_gpios: uart1-gpios {
			rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;	
		};

		bt_reset_gpio: bt-reset-gpio {
			rockchip,pins =
				<2 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;	
		};

		bt_wake_gpio: bt-wake-gpio {
			rockchip,pins =
				<2 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;	
		};

		bt_irq_gpio: bt-irq-gpio {
			rockchip,pins =
				<2 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>;			
		};
	};
};

这里其实就差不多配置完了,我这里wifi还是不能用,是因为这里还需要改一些

首先查看自己的wifi是否在自己的板卡里面有对应的模块

rk66_qls:/ # ifconfig -a
sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:0 TX bytes:0 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:0 TX bytes:0 
/*这就是你的wifi模块*/
wlan0     Link encap:Ethernet  HWaddr 10:2c:6b:69:14:c2  Driver bcmsdh_sdmmc
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:0 TX bytes:0 

如果这里都没,那么先把这个弄出来,查看电压,时钟是否有输出,对应的通道是否打开,这个没出来一般是时钟有问题。

3)驱动改动了一部分

#if 0
#ifdef HW_OOB
	host_oob_irq_flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE;
	irq_flags = rockchip_wifi_get_oob_irq_flag();
	if (irq_flags == 1)
		host_oob_irq_flags |= IORESOURCE_IRQ_HIGHLEVEL;
	else if (irq_flags == 0)
		host_oob_irq_flags |= IORESOURCE_IRQ_LOWLEVEL;
	else
		pr_warn("%s: unknown oob irqflags !\n", __func__);
#else
	host_oob_irq_flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_SHAREABLE;
#endif
#endif


/*将原来的注释掉,新增这些 记得在头文件定义*/
----------------------
#define HW_OOB_LOW_LEVEL
----------------------
#ifdef HW_OOB
#ifdef HW_OOB_LOW_LEVEL
        host_oob_irq_flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL | IORESOURCE_IRQ_SHAREABLE;
#else
        host_oob_irq_flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL | IORESOURCE_IRQ_SHAREABLE;
#endif
#else
        host_oob_irq_flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_SHAREABLE;
#endif

如果有一样的wifi模块可以直接把之前的驱动直接复制过去,主要就是这里不一样。
是在不行就去问之前的调试过的同事。没有什么比这个直接有效。

六、摄像头调试

首先查看i2c能否读取到摄像头的设备,
如果不能就看摄像头这边的电压是不是正确的,查看摄像头是否连接好,可以叫硬件的同事帮你看看,就是看看自己的设备树配置是否正确,对应的GPIO的是不是正确,对应的状态是不是正确的。
软硬联调。

追主要的就是查看开机的log信息
根据不同的信息去查看自己的报错,这样就很快定位错误的地点以一一排查。

下面几个命令可以帮助你查看是否有错误

dumpsys media.camera

查看是否有相机设备

== Service global info: ==

Number of camera devices: 1
Number of normal camera devices: 1
Number of public camera devices visible to API1: 1
    Device 0 maps to "0"
Active Camera Clients:
[]
Allowed user IDs: 0

== Camera service events log (most recent at top): ==
  11-26 02:31:53 : USER_SWITCH previous allowed user IDs: <None>, current allowed user IDs: 0
  11-26 02:31:41 : ADD device 0, reason: (Device added)

== Camera device 0 dynamic info: ==
  Device 0 is closed, no client instance
== Camera Provider HAL external/0 (v2.5, remote) static info: 0 devices: ==
== Camera Provider HAL legacy/0 (v2.5, remote) static info: 1 devices: ==
== Camera HAL device device@3.3/legacy/0 (v3.3) static information: ==
  Resource cost: 50
  Conflicting devices: None
  API1 info:
    Has a flash unit: false
    Facing: Front
    Orientation: 90
  API2 camera characteristics:
    Dumping camera metadata array: 71 / 71 entries, 2184 / 2184 bytes of extra data.
      Version: 1, Flags: 00000000
      android.colorCorrection.availableAberrationModes (00004): byte[1]
        [0 ]
      android.control.aeAvailableAntibandingModes (10012): byte[4]
        [0 1 2 3 ]
      android.control.aeAvailableModes (10013): byte[2]
        [1 0 ]
      android.control.aeAvailableTargetFpsRanges (10014): int32[6]
        [15 15 15 30 ]
        [30 30 ]
      android.control.aeCompensationRange (10015): int32[2]
        [-6 6 ]
      android.control.aeCompensationStep (10016): rational[1]
        [(1 / 3) ]
      android.control.afAvailableModes (10017): byte[6]
        [0 1 2 3 4 5 ]
      android.control.availableEffects (10018): byte[1]
        [0 ]
      android.control.availableSceneModes (10019): byte[1]
        [0 ]
      android.control.availableVideoStabilizationModes (1001a): byte[1]
        [0 ]
      android.control.awbAvailableModes (1001b): byte[5]
        [1 2 3 5 6 ]
      android.control.maxRegions (1001c): int32[3]
        [1 0 1 ]
      android.control.aeLockAvailable (10024): byte[1]
        [FALSE ]
      android.control.awbLockAvailable (10025): byte[1]
        [TRUE ]

抓取底层数据流

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=2592,height=1944,pixelformat='NV12' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=2592,height=1944
log
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture Multiplanar:
	Width/Height      : 2592/1944
	Pixel Format      : 'NV12'
	Field             : None
	Number of planes  : 1
	Flags             : 
	Colorspace        : Default
	Transfer Function : Default
	YCbCr Encoding    : Default
	Quantization      : Full Range
	Plane 0           :
	   Bytes per Line : 2592
	   Size Image     : 7558272
VIDIOC_G_SELECTION: ok
VIDIOC_S_SELECTION: ok
VIDIOC_REQBUFS: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_STREAMON: ok
idx: 0 seq:      0 bytesused: 7558272 ts: 1018.141298
idx: 1 seq:      1 bytesused: 7558272 ts: 1018.207808 delta: 66.510 ms
idx: 2 seq:      2 bytesused: 7558272 ts: 1018.274311 delta: 66.503 ms
idx: 3 seq:      3 bytesused: 7558272 ts: 1018.340820 delta: 66.509 ms
idx: 0 seq:      4 bytesused: 7558272 ts: 1018.407341 delta: 66.521 ms fps: 15.04
idx: 1 seq:      5 bytesused: 7558272 ts: 1018.473840 delta: 66.499 ms fps: 15.04
idx: 2 seq:      6 bytesused: 7558272 ts: 1018.540351 delta: 66.511 ms fps: 15.04
idx: 3 seq:      7 bytesused: 7558272 ts: 1018.606875 delta: 66.524 ms fps: 15.04
idx: 0 seq:      8 bytesused: 7558272 ts: 1018.673394 delta: 66.519 ms fps: 15.03
idx: 1 seq:      9 bytesused: 7558272 ts: 1018.739885 delta: 66.491 ms fps: 15.04
idx: 2 seq:     10 bytesused: 7558272 ts: 1018.806394 delta: 66.509 ms fps: 15.04
idx: 3 seq:     11 bytesused: 7558272 ts: 1018.872923 delta: 66.529 ms fps: 15.04
idx: 0 seq:     12 bytesused: 7558272 ts: 1018.939433 delta: 66.510 ms fps: 15.04
idx: 1 seq:     13 bytesused: 7558272 ts: 1019.005943 delta: 66.510 ms fps: 15.04
idx: 2 seq:     14 bytesused: 7558272 ts: 1019.072455 delta: 66.512 ms fps: 15.04
idx: 3 seq:     15 bytesused: 7558272 ts: 1019.139004 delta: 66.549 ms fps: 15.03
idx: 0 seq:     16 bytesused: 7558272 ts: 1019.205477 delta: 66.473 ms fps: 15.04
idx: 1 seq:     17 bytesused: 7558272 ts: 1019.271977 delta: 66.500 ms fps: 15.04
idx: 2 seq:     18 bytesused: 7558272 ts: 1019.338498 delta: 66.521 ms fps: 15.04
idx: 3 seq:     19 bytesused: 7558272 ts: 1019.404995 delta: 66.497 ms fps: 15.04
idx: 0 seq:     20 bytesused: 7558272 ts: 1019.471524 delta: 66.529 ms fps: 15.04
idx: 1 seq:     21 bytesused: 7558272 ts: 1019.538018 delta: 66.494 ms fps: 15.04
idx: 2 seq:     22 bytesused: 7558272 ts: 1019.604544 delta: 66.526 ms fps: 15.04
idx: 3 seq:     23 bytesused: 7558272 ts: 1019.671058 delta: 66.514 ms fps: 15.04
idx: 0 seq:     24 bytesused: 7558272 ts: 1019.737569 delta: 66.511 ms fps: 15.04
idx: 1 seq:     25 bytesused: 7558272 ts: 1019.804076 delta: 66.507 ms fps: 15.04
idx: 2 seq:     26 bytesused: 7558272 ts: 1019.870593 delta: 66.517 ms fps: 15.04
idx: 3 seq:     27 bytesused: 7558272 ts: 1019.937099 delta: 66.506 ms fps: 15.04
idx: 0 seq:     28 bytesused: 7558272 ts: 1020.003612 delta: 66.513 ms fps: 15.04
idx: 1 seq:     29 bytesused: 7558272 ts: 1020.070108 delta: 66.496 ms fps: 15.04
idx: 2 seq:     30 bytesused: 7558272 ts: 1020.136621 delta: 66.513 ms fps: 15.04
idx: 3 seq:     31 bytesused: 7558272 ts: 1020.203148 delta: 66.527 ms fps: 15.04
idx: 0 seq:     32 bytesused: 7558272 ts: 1020.269644 delta: 66.496 ms fps: 15.04
idx: 1 seq:     33 bytesused: 7558272 ts: 1020.336167 delta: 66.523 ms fps: 15.04
idx: 2 seq:     34 bytesused: 7558272 ts: 1020.402681 delta: 66.514 ms fps: 15.04
idx: 3 seq:     35 bytesused: 7558272 ts: 1020.469177 delta: 66.496 ms fps: 15.04
idx: 0 seq:     36 bytesused: 7558272 ts: 1020.535740 delta: 66.563 ms fps: 15.03
idx: 1 seq:     37 bytesused: 7558272 ts: 1020.602202 delta: 66.462 ms fps: 15.04
idx: 2 seq:     38 bytesused: 7558272 ts: 1020.668712 delta: 66.510 ms fps: 15.04
idx: 3 seq:     39 bytesused: 7558272 ts: 1020.735222 delta: 66.510 ms fps: 15.04
idx: 0 seq:     40 bytesused: 7558272 ts: 1020.801751 delta: 66.529 ms fps: 15.04
idx: 1 seq:     41 bytesused: 7558272 ts: 1020.868258 delta: 66.507 ms fps: 15.04
idx: 2 seq:     42 bytesused: 7558272 ts: 1020.934769 delta: 66.511 ms fps: 15.04
idx: 3 seq:     43 bytesused: 7558272 ts: 1021.001264 delta: 66.495 ms fps: 15.04
idx: 0 seq:     44 bytesused: 7558272 ts: 1021.067792 delta: 66.528 ms fps: 15.04
idx: 1 seq:     45 bytesused: 7558272 ts: 1021.134339 delta: 66.547 ms fps: 15.03
idx: 2 seq:     46 bytesused: 7558272 ts: 1021.200803 delta: 66.464 ms fps: 15.04
idx: 3 seq:     47 bytesused: 7558272 ts: 1021.267327 delta: 66.524 ms fps: 15.04
idx: 0 seq:     48 bytesused: 7558272 ts: 1021.333837 delta: 66.510 ms fps: 15.04
idx: 1 seq:     49 bytesused: 7558272 ts: 1021.400348 delta: 66.511 ms fps: 15.04
idx: 2 seq:     50 bytesused: 7558272 ts: 1021.466859 delta: 66.511 ms fps: 15.04
idx: 3 seq:     51 bytesused: 7558272 ts: 1021.533357 delta: 66.498 ms fps: 15.04

没有打印的可以看看摄像头时钟有数据没,我之前没调试出来是因为时钟没有数据流出。需要对应的时钟配置。
就先写到这里吧。

版权声明:本文为CSDN博主「永不秃头的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51178981/article/details/121455389

生成海报
点赞 0

永不秃头的程序员

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

# 浅谈IIC总线通讯协议

浅谈IIC总线通讯协议 相关概念 IIC总线是PHLIPS公司在八十年代初推出的一种同步串行的半双工总线,支持多主机多从机,具备总线裁决功能,用于连接整体电路。 整体电路:同一块板子上

理解函数栈帧

一、函数栈帧的创建 1.寄存器 一般来说,计算机中的寄存器有六种 分别是:eax, ebx, ecx,edx,ebp,esp 而ebp,esp这两个寄存器中存放的是地址,与此同时,这