T113平台tina5使用TVIN接口开发连载
T113平台具有两个TVIN接口,在全志内部通常把 TNIN 模块称为 TVD 或者 TVIN 模块,是一种用于采集模拟 CVBS视频的硬件模块,可将输入的 CVBS 信号或 YPbPr 信号转换成 YUV 信号。T113平台(sun8iw20p1)双通道共用一个ADC,使用时需切换,因此配置时也认为该平台只有单通道。以下是它内核层的总体框架:
从以上框架得知,tvd 驱动只是负责把 tvd 的硬件描述完成并注册进 V4L2 框架,具体对 tvd 的使用还是放在用户态的应用层。也就说,在软件层面,使用V4L2的相关程序即可。因此V4L2的相关驱动在内核上务必选择上,否则无法工作。这里归纳关于用户态操作使用 tvd 模块的流程。 演示程序的操作过程(操作单路 tvd):
- 用 open 打开/dev/videox 节点,执行执行Ioctl:VIDIOC_S_INPUT 完成通道和 ADC 的 mapping,然后执行 Ioctl:VIDIOC_G_INPUT 确认通道和 ADC mapping 正确
- 执行 ioctl:VIDIOC_G_FMT,用于初始化 format以及获取当前 tvd 的锁状态
- 执行 ioctl:VIDIOC_S_FMT,定制 format,包括颜色空间,一般来说 V4L2_PIX_FMT_NV61 要好于 V4L2_PIX_FMT_NV12,多路拼接的时候,在这个 ioctl 中检测锁信号
- 执行 ioctl:VIDIOC_REQBUFS,通过 V4L2 框架申请 buffer
- 执行 ioctl:VIDIOC_QUERYBUF,获取 buffer
- 执行 ioctl:VIDIOC_QBUF,将获取到的 buffer 入列,供 tvd 模块写入数据
- 执行 ioctl:VIDIOC_STREAMON,使能 tvd 模块工作采集输入数据
- 通过 poll/select 的方式查询 dev/videox 节点,如有数据更新,执行 ioctl:VIDIOC_DQBUF 取出已经写好数据的 buffer
- 执行 ioctl:VIDIOC_QBUF,将步骤 9 中已经取出数据的 buffer 重新入列,供 tvd 模块写入数据
- 循环步骤 9‑10,直至需要停止tvd模块,执行ioctl:VIDIOC_STREAMOFF,关闭tvd模块
- 用 close 释放获取的 fd
以下我们以盈鹏飞嵌入式SBC-T113S主板为例(该主板运行tina5.0),
SBC-T113S产品特性:
-
采用Allwinner公司Cortex-A7双核T113-S3/S4处理器,运行最高速度为1.2GHZ;
-
内置64-bit XuanTie C906 RISC-V协处理器(仅T113-S4支持);
-
支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);
-
支持RGB666/LVDS/MIPI-DSI,分辨率最高1920x1080;
-
支持128-256M Bytes DDR3 SDRAM,其中T113-S3内置128MB;T113-S4内置256MB;
-
支持SPI NAND存储和启动(默认:256MB)或者EMMC启动(默认:4GB,最大32GB);
-
支持一路USB2.0 OTG(设计为TYPE-A接口);支持二路USB2.0 HOST;
-
支持七路RS232通信或者6路RS232和1路RS485(非隔离);
-
支持一路CAN BUS通信(非隔离);
-
支持一路10/100M以太网;
-
稳定的操作系统的支持,可预装LINUX 5.4(Preempt)或者OpenWRT;
-
经典尺寸主板,尺寸为120*100MM;
SBC-T113S产品功能评估图:
从内核配置到演示程序一一介绍;首先按照如下连接线路把SBC-T113S和摄像头连接起来:
SBC-T113S主板可选配CVBS摄像头模块,配套转接线可接入CN27端口中,原理图如下:
以下是SBC-T113S主板与摄像头的连接示意图:
说明:AV视频线的3.5mm一端插入主板的CN27,AV视频线的RCA白色莲花头是TVIN0信号输入;RCA红色莲花头是TVIN1信号输入;RCA黄色莲花头是TVOUT信号输出。
图片中的AV一拖三音视频线是非标准的,线序定义是不统一的,用户获得连接线后最好用万用表测量下,保证线路连接的正确。以下是我司提供的AV一拖三音视频线的定义: