介绍rk平台针对cif链路出现的mipi错误以及断流的复位操作

1.定时器timer的setup

        经常看到vicap数据发生异常时,在rkcif_mipi_lvds节点下面配置该属性rockchip,cif-monitor 来进行检测异常并复位,驱动是在该文件中进行解析设置drivers\media\platform\rockchip\cif\dev.c;该属性需要在dts中配置,是针对1126,3568,3399等平台;3588平台复位机制使能,就不用去修改dts,直接把这个宏定义打开就行ROCKCHIP_CIF_USE_MONITOR;以下以3588平台为例

        上面箭头的描述如下,也都在drivers\media\platform\rockchip\cif目录下的Kconfig文件中定义了;这个也就是356x平台中rockchip,cif-monitor里面的参数index0-index4;

 

         当然这些宏定义也可以在rockchip_defconfig文件中进行添加 如下所示

 

         timer定时器相关的3个函数如下:

1.rkcif_reset_watchdog_timer_handler 重置看门狗定时器处理程序

2.rkcif_detect_reset_event 检测复位事件

        该函数里面要知道这两个变量last_buf_wakeup_cnt和buf_wake_up_cnt,这个是用来判断数据是否一直走,是否断流用的。所以该函数的实现如下;如果断流的话,buf_wake_up_cnt是不会在增加的,即last_buf_wakeup_cnt = buf_wake_up_cnt;

if (timer->last_buf_wakeup_cnt[stream->id] < stream->buf_wake_up_cnt && check_cnt == 0) {
............
}
else if (timer->last_buf_wakeup_cnt[stream->id] == stream->buf_wake_up_cnt) {  //断流了
............
v4l2_info(&dev->v4l2_dev,"do reset work due to frame end is stopped, run_cnt:%d\n", timer->run_cnt);
}

        针对监测的三种模式,其中HOTPLUG和CONTINUE模式都是调用is_reset = rkcif_is_csi2_err_trigger_reset(即引起复位的原因),为true的话,则调用rkcif_init_reset_work(timer); 而TRIGGER即协议层的报错处理调用timer->is_csi2_err_occurred;为true的话,则调用rkcif_init_reset_work(timer);

3.rkcif_init_reset_work(timer)函数主要实现如下:

for (i = 0; i < dev->num_channels; i++) {
stream = &dev->stream[i];
if (stream->state == RKCIF_STATE_STREAMING)
timer->last_buf_wakeup_cnt[stream->id] = stream->buf_wake_up_cnt;
	}

        理解4种监测模式的具体含义,如下表:

 

2.复位的操作

        摄像头开启出流调用rkcif_do_start_stream,然后该函数里面会调rkcif_monitor_reset_event函数;

        rkcif_monitor_reset_event 调用rkcif_is_triggered_monitoring,该函数的作用是先判断定时器的监测模式,如果是CONTINUE或HOTPLUG,那么当满足如下条件时,定时器被触发;

if (stream->frame_idx >= timer->triggered_frame_num)
/*triggered_frame_num 这个就是从哪一帧起开始检测,默认为0,
即开启数据流时就开始检测;*/

        如果监测模式是TRIGGER,那么就会调用该函数rkcif_is_csi2_err_trigger_reset(timer); 判断两次报错的时间diff_time是否大于等于err_time_interval(发现错误后继续监视的超时,单位(ms)),是的话,定时器触发 is_triggered = true;

if (timer->csi2_err_triggered_cnt >= 1) {
	cur_time = ktime_get_ns();
	diff_time = cur_time - timer->csi2_first_err_timestamp;
	diff_time = div_u64(diff_time, 1000000);
	if (diff_time >= timer->err_time_interval) {
		is_triggered = true;
		v4l2_info(&dev->v4l2_dev, "trigger reset for time out of csi err\n");
		goto end_judge;
			}

         接下来就完成定时器的启动

1.
timer->is_triggered = rkcif_is_triggered_monitoring(dev); 
...........
2.
cycle = fps * timer->frm_num_of_monitor_cycle;
timer->cycle = msecs_to_jiffies(cycle);
...........
timer->run_cnt = 0;
timer->is_running = true;
timer->is_buf_stop_update = false;
...........
3.
timer->timer.expires = jiffies + timer->cycle;
mod_timer(&timer->timer, timer->timer.expires); 
//启动定时器,不加这句的话,定时器不工作,不会调用rkcif_reset_watchdog_timer_handler。

rkcif_detect_reset_event会调用函数rkcif_init_reset_work
执行工作队列schedule_work(&dev->reset_work.work),去调用
rkcif_reset_work实现复位->rkcif_do_reset_work->rkcif_monitor_reset_event;
在rkcif_do_reset_work中通过ioctl调用sensor驱动的RKMODULE_SET_QUICK_STREAM
ret = v4l2_subdev_call(p->subdevs[i], core, ioctl,RKMODULE_SET_QUICK_STREAM, &on);

cif复位成功后,会打印如下log:

v4l2_dbg(1, rkcif_debug, &cif_dev->v4l2_dev, "do rkcif reset successfully!\n");

 

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: rk628d是一款高性能的HDMI转MIPI的芯片。它可以将HDMI高清视频信号转换为MIPI接口的信号,以便在移动设备或其他支持MIPI接口的设备上显示。rk628d芯片不仅具有出色的转换性能,还具有低功耗的特点,可以为用户提供更好的使用体验。 rk628d的设计主要包括HDMI输入端和MIPI输出端的接口电路、转换芯片以及相关的控制电路。HDMI输入端可以接收来自外部HDMI设备的高清视频信号,经过芯片内部的转换芯片的处理,将视频信号转换为MIPI接口的格式。然后,通过MIPI输出端将转换后的信号输出到目标设备上进行显示。 rk628d芯片具有较高的分辨率支持能力,可以支持多种不同的分辨率,如720p、1080p等。同时,它还支持多种不同的色彩空间和色彩深度,可以满足不同用户的需求。 在实际应用中,rk628d芯片可以被广泛应用于各种移动设备,如智能手机、平板电脑和电视等。它可以为用户提供更高质量、更清晰的显示效果,使用户的观看体验更加出色。 总的来说,rk628d是一款功能强大且高性能的HDMI转MIPI芯片。它的设计经过精心优化,能够提供高清晰度、低功耗的转换功能,广泛应用于各种移动设备中,为用户带来更好的视觉体验。 ### 回答2: RK628D HDMI转MIPI设计是一种视频信号转换器,可将高清多媒体接口(HDMI)信号转换为移动显示接口(MIPI)信号。RK628D具有高性能和高可靠性,可广泛应用于电子设备中,如智能手机、平板电脑、可穿戴设备等。 该设计的主要目的是为了解决HDMI和MIPI两种不同接口之间的信号转换问题。HDMI接口通常用于连接电视和显示器,而MIPI接口则常用于移动设备的显示屏上。通过RK628D的设计,可以将HDMI信号转换为MIPI信号,使其能够兼容移动设备的显示屏。 RK628D HDMI转MIPI设计具有以下特点: 1. 高清转换:它支持高分辨率的HDMI信号转换,可以将高清视频信号显示在移动设备的屏幕上,提供更清晰的图像和视频体验。 2. 快速传输:RK628D设计采用快速传输技术,可以实现高速数据传输和高帧率显示,确保视频流畅和稳定。 3. 多种应用:它可以应用于各种电子设备,如智能手机、平板电脑、可穿戴设备等,满足不同的用户需求。 4. 省电设计:RK628D设计采用低功耗技术,具有高效节能的特点,使得移动设备在使用过程中能够更长时间地续航。 总的来说,RK628D HDMI转MIPI设计是一种高性能、高可靠性的视频信号转换器,能够有效地解决HDMI和MIPI接口之间的兼容性问题。它为移动设备提供了更优质的多媒体显示体验,并且具有广泛的应用范围。 ### 回答3: RK628D HDMI转MIPI设计是指将HDMI信号转换为MIPI信号的一种电路设计。MIPI是一种用于移动设备的接口标准,而HDMI是一种高清图像和音频传输标准。 在设计RK628D HDMI转MIPI电路时,需要考虑以下几个方面: 首先,需要了解HDMI和MIPI的电器特性,包括电压和信号传输速率等,以确保电路设计能够兼容两种接口的要求。 其次,需要设计适当的电路来完成HDMI到MIPI的信号转换。这通常需要使用专门的转换芯片或模块,这些芯片或模块能够将HDMI信号转换为MIPI信号,并进行必要的电平或协议转换。 此外,在电路设计中还需要考虑电源供应和信号引线的布线,以确保电路稳定运行和信号传输的可靠性。 最后,在设计完成后,需要进行相关的测试和验证,以确保转换电路能够正常工作并满足设计要求和性能指标。 通过RK628D HDMI转MIPI设计,可以实现将HDMI接口的图像和音频信号转换为MIPI接口,从而将高清视频和音频传输到具备MIPI接口的设备上,例如某些移动设备或显示屏等。这样的设计可以提高数据传输的效率和质量,并且适用于某些特定的应用领域。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值