100ASK百问网 全志D1s/T113-s3开发板 适配ov5640教程

news2024/11/19 17:32:26

本实验采用百问网的100ASK_T113-PRO Base V1.1 ,
D1s也可以参考进行修改并适配。
本实验所需的文件(含tina根文件系统、SD镜像、设备树、内核配置文件)供大家对比参考:source.zip

1.硬件配置

查看百问网提供的T113开发板原理图100ASK_T113-Pro_Base-SCH.pdf

通过查看到第3页的摄像头原理图

在这里插入图片描述

①将PE引脚使用跳线帽连接至CSI引脚。
在这里插入图片描述

②根据所使用的摄像头,利用跳线帽,使AVDD、DVDD、DIOVDD选择不同的电压
在这里插入图片描述

我所使用的是ov5640,使用2.8V的AVDD、1.5V的DVDD、2.8V的DIOVDD

在这里插入图片描述

③根据摄像头的引脚信息,上接至T113开发板的DVP接口
在这里插入图片描述

2.修改设备树

注意:T113中的网口和CSI接口复用,注意设备树中网口的PE的复用功能需要修改为CSI的PE的复用功能。

文件名:sun8iw20p1-t113-100ask-t113-pro.dts

文件目录:buildroot_100ask_t113-pro/buildroot/output/build/linux-origin_master/arch/arm/boot/dts/

&vind0 {
	
	csi_top = <378000000>;
	csi_isp = <327000000>;
	status = "okay"; /* enable twi and ver1 spi-nand max freq 30M */

	actuator0: actuator@5809450 {
		device_type = "actuator0";
		actuator0_name = "ad5820_act";
		actuator0_slave = <0x18>;
		actuator0_af_pwdn = <>;
		actuator0_afvdd = "afvcc-csi";
		actuator0_afvdd_vol = <2800000>;
		status = "okay";
	};
	flash0: flash@5809460 {
		device_type = "flash0";
		flash0_type = <2>;
		flash0_en = <>;
		flash0_mode = <>;
		flash0_flvdd = "";
		flash0_flvdd_vol = <>;
		device_id = <0>;
		status = "okay";
	};
	sensor0: sensor@5809470 {
		reg = <0x0 0x05809470 0x0 0x10>;
		device_type = "sensor0";
		compatible = "allwinner,sunxi-sensor";
		sensor0_mname = "ov5640";
		sensor0_twi_cci_id = <2>;
		sensor0_twi_addr = <0x78>;
		sensor0_mclk_id = <0>;
		sensor0_pos = "rear";
		sensor0_isp_used = <0>;
		sensor0_fmt = <0>;
		sensor0_stby_mode = <0>;
		sensor0_vflip = <0>;
		sensor0_hflip = <0>;
		sensor0_iovdd-supply = <>;
		sensor0_iovdd_vol = <1800000>;
		sensor0_avdd-supply = <>;
		sensor0_avdd_vol = <2800000>;
		sensor0_dvdd-supply = <>;
		sensor0_dvdd_vol = <1500000>;
		sensor0_power_en = <>;
		sensor0_reset = <>;
		//sensor0_reset = <&pio PE 15 GPIO_ACTIVE_LOW>;
		//sensor0_pwdn = <&pio PE 14 GPIO_ACTIVE_LOW>;
		//sensor0_reset = <&pio PE 13 GPIO_ACTIVE_LOW>;
		sensor0_pwdn = <>;
		sensor0_sm_vs = <>;
		flash_handle = <&flash0>;
		act_handle = <&actuator0>;
		device_id = <0>;
		status  = "okay";
	};
	sensor1:sensor@5809480 {
		device_type = "sensor1";
		sensor1_mname = "ov5647";
		sensor1_twi_cci_id = <3>;
		sensor1_twi_addr = <0x6c>;
		sensor1_mclk_id = <1>;
		sensor1_pos = "front";
		sensor1_isp_used = <0>;
		sensor1_fmt = <0>;
		sensor1_stby_mode = <0>;
		sensor1_vflip = <0>;
		sensor1_hflip = <0>;
		sensor1_iovdd-supply = <>;
		sensor1_iovdd_vol = <>;
		sensor1_avdd-supply = <>;
		sensor1_avdd_vol = <>;
		sensor1_dvdd-supply = <>;
		sensor1_dvdd_vol = <>;
		sensor1_power_en = <>;
		sensor1_reset = <&pio PE 7 GPIO_ACTIVE_LOW>;
		sensor1_pwdn = <&pio PE 6 GPIO_ACTIVE_LOW>;
		status	= "disabled";
	};
	vinc0:vinc@5809000 {
		vinc0_csi_sel = <0>;
		vinc0_mipi_sel = <0xff>;
		vinc0_isp_sel = <0>;
		vinc0_isp_tx_ch = <0>;
		vinc0_tdm_rx_sel = <0xff>;
		vinc0_rear_sensor_sel = <0>;
		vinc0_front_sensor_sel = <0>;
		vinc0_sensor_list = <0>;
		status = "okay";
	};
	vinc1:vinc@5809200 {
		vinc1_csi_sel = <0>;
		vinc1_mipi_sel = <0xff>;
		vinc1_isp_sel = <0>;
		vinc1_isp_tx_ch = <1>;
		vinc1_tdm_rx_sel = <0xff>;
		vinc1_rear_sensor_sel = <0>;
		vinc1_front_sensor_sel = <1>;
		vinc1_sensor_list = <0>;
		status = "disabled";
	};
};

文件名:sun8iw20p1.dtsi

文件目录:buildroot_100ask_t113-pro/buildroot/output/build/linux-origin_master/arch/arm/boot/dts/

	vind0: vind@5800800 {
			compatible = "allwinner,sunxi-vin-media", "simple-bus";
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;
			device_id = <0>;
			csi_top = <336000000>;
			csi_isp = <327000000>;
			reg = <0x0 0x05800800 0x0 0x200>,
				<0x0 0x05800000 0x0 0x800>;
			clocks = <&ccu CLK_CSI_TOP>, <&ccu CLK_PLL_VIDEO1_2X>,
				<&ccu CLK_CSI0_MCLK>, <&dcxo24M>, <&ccu CLK_PLL_VIDEO1>,
				<&ccu CLK_BUS_CSI>, <&ccu CLK_MBUS_CSI>;
			clock-names = "csi_top", "csi_top_src",
					"csi_mclk0", "csi_mclk0_24m", "csi_mclk0_pll",
					"csi_bus", "csi_mbus";
			resets = <&ccu RST_BUS_CSI>;
			reset-names = "csi_ret";
			pinctrl-names = "mclk0-default", "mclk0-sleep";
			pinctrl-0 = <&csi_mclk0_pins_a>;
			pinctrl-1 = <&csi_mclk0_pins_b>;
			status = "okay";

			csi0: csi@5801000{
				compatible = "allwinner,sunxi-csi";
				reg = <0x0 0x05801000 0x0 0x1000>;
				interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
				pinctrl-names = "default","sleep";
				pinctrl-0 = <&csi0_pins_a>;
				pinctrl-1 = <&csi0_pins_b>;
				device_id = <0>;
				iommus = <&mmu_aw 1 1>;
				status = "okay";
			};
			isp0: isp@5809410 {
				compatible = "allwinner,sunxi-isp";
				reg = <0x0 0x05809410 0x0 0x10>;
				device_id = <0xfe>;

				status = "okay";
			};
			isp1: isp@5809420 {
				compatible = "allwinner,sunxi-isp";
				reg = <0x0 0x05809420 0x0 0x10>;
				device_id = <0xff>;
				status = "okay";
			};
			scaler0: scaler@5809430 {
				compatible = "allwinner,sunxi-scaler";
				reg = <0x0 0x05809430 0x0 0x10>;
				device_id = <0xfe>;
				status = "okay";
			};
			scaler1: scaler@5809440 {
				compatible = "allwinner,sunxi-scaler";
				reg = <0x0 0x05809440 0x0 0x10>;
				device_id = <0xff>;
				status = "okay";
			};
			actuator0: actuator@5809450 {
				compatible = "allwinner,sunxi-actuator";
				device_type = "actuator0";
				reg = <0x0 0x05809450 0x0 0x10>;
				actuator0_name = "ad5820_act";
				actuator0_slave = <0x18>;
				actuator0_af_pwdn = <>;
				actuator0_afvdd = "afvcc-csi";
				actuator0_afvdd_vol = <2800000>;
				status = "disabled";
			};
			flash0: flash@5809460 {
				device_type = "flash0";
				compatible = "allwinner,sunxi-flash";
				reg = <0x0 0x05809460 0x0 0x10>;
				flash0_type = <2>;
				flash0_en = <>;
				flash0_mode = <>;
				flash0_flvdd = "";
				flash0_flvdd_vol = <>;
				device_id = <0>;
				status = "disabled";
			};
			sensor0: sensor@5809470 {
				reg = <0x0 0x05809470 0x0 0x10>;
				device_type = "sensor0";
				compatible = "allwinner,sunxi-sensor";
				sensor0_mname = "ov5640";
				sensor0_twi_cci_id = <2>;
				sensor0_twi_addr = <0x78>;
				sensor0_mclk_id = <0>;
				sensor0_pos = "rear";
				sensor0_isp_used = <0>;
				sensor0_fmt = <0>;
				sensor0_stby_mode = <0>;
				sensor0_vflip = <0>;
				sensor0_hflip = <0>;
				sensor0_iovdd-supply = <>;
				sensor0_iovdd_vol = <>;
				sensor0_avdd-supply = <>;
				sensor0_avdd_vol = <>;
				sensor0_dvdd-supply = <>;
				sensor0_dvdd_vol = <>;
				sensor0_power_en = <>;
				sensor0_reset = <&pio PE 9 GPIO_ACTIVE_LOW>;
				sensor0_pwdn = <&pio PE 8 GPIO_ACTIVE_LOW>;
				sensor0_sm_vs = <>;
				flash_handle = <&flash0>;
				act_handle = <&actuator0>;
				device_id = <0>;
				status	= "okay";
			};
			sensor1: sensor@5809480 {
				reg = <0x0 0x05809480 0x0 0x10>;
				device_type = "sensor1";
				compatible = "allwinner,sunxi-sensor";
				sensor1_mname = "ov5647";
				sensor1_twi_cci_id = <3>;
				sensor1_twi_addr = <0x6c>;
				sensor1_mclk_id = <1>;
				sensor1_pos = "front";
				sensor1_isp_used = <0>;
				sensor1_fmt = <0>;
				sensor1_stby_mode = <0>;
				sensor1_vflip = <0>;
				sensor1_hflip = <0>;
				sensor1_iovdd-supply = <>;
				sensor1_iovdd_vol = <>;
				sensor1_avdd-supply = <>;
				sensor1_avdd_vol = <>;
				sensor1_dvdd-supply = <>;
				sensor1_dvdd_vol = <>;
				sensor1_power_en = <>;
				sensor1_reset = <&pio PE 7 GPIO_ACTIVE_LOW>;
				sensor1_pwdn = <&pio PE 6 GPIO_ACTIVE_LOW>;
				sensor1_sm_vs = <>;
				flash_handle = <>;
				act_handle = <>;
				device_id = <1>;
				status	= "okay";
			};
			vinc0: vinc@5809000 {
				compatible = "allwinner,sunxi-vin-core";
				device_type = "vinc0";
				reg = <0x0 0x05809000 0x0 0x200>;
				interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
				vinc0_csi_sel = <0>;
				vinc0_mipi_sel = <0xff>;
				vinc0_isp_sel = <0>;
				vinc0_tdm_rx_sel = <0xff>;
				vinc0_rear_sensor_sel = <0>;
				vinc0_front_sensor_sel = <0>;
				vinc0_sensor_list = <0>;
				device_id = <0>;
				iommus = <&mmu_aw 1 1>;
				status = "okay";
			};
			vinc1: vinc@5809200 {
				device_type = "vinc1";
				compatible = "allwinner,sunxi-vin-core";
				reg = <0x0 0x05809200 0x0 0x200>;
				interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
				vinc1_csi_sel = <0>;
				vinc1_mipi_sel = <0xff>;
				vinc1_isp_sel = <1>;
				vinc1_tdm_rx_sel = <0xff>;
				vinc1_rear_sensor_sel = <0>;
				vinc1_front_sensor_sel = <0>;
				vinc1_sensor_list = <0>;
				device_id = <1>;
				iommus = <&mmu_aw 1 1>;
				status = "okay";
			};

		};

3.修改内核配置

在buildroot目录下,输入

make linux-menuconfig

在这里插入图片描述

进入内核配置界面中的下面目录:
Location:
│ -> Device Drivers
│ -> Multimedia support
在这里插入图片描述

对于Media USB Adapters:
在这里插入图片描述

对于V4L platform devices:
在这里插入图片描述

对于SUNXI platform devices:
在这里插入图片描述

对于Memory-to-memory multimedia devices:
在这里插入图片描述

修改完成后,保存并退出。
在这里插入图片描述

4.重新编译和烧写

在buildroot目录下执行

make linux-rebuild

在这里插入图片描述

执行完成后,再打包生成SD卡镜像,输入

make -j4

在这里插入图片描述

5.使用tina的根文件系统启动

将烧录到sd卡的t113系统挂载到ubuntu中 使用 df -h 查看分区
在这里插入图片描述

进入分区

cd /media/book/dd79b15c-ce3f-4d2d-8a75-437303b2df61/

拷贝lib中的驱动到桌面备用

sudo cp -rf lib/modules/5.4.61 ~/Desktop

删除全部文件

sudo rm -rf *

在这里插入图片描述

将source文件夹中的tina_rootfs目录下的rootfs.img拷贝到Ubuntu中,解压tina系统

unsquashfs  rootfs.img

在这里插入图片描述

拷贝tina系统中的文件到当前目录

sudo cp /home/book/squashfs-root/* ./ -rfd

进入lib/modules目录下删除5.4.61文件夹

cd lib/modules/
sudo rm -rf 5.4.61

将5.4.61文件夹拷贝回去

sudo cp ~/Desktop/5.4.61/ ./ -rf

从虚拟机中弹出SD卡。

6.使用camerademo测试

将SD卡插入T113开发板,上电启动。启动界面如下:
在这里插入图片描述

进入sunxi-vin目录:

cd /lib/modules/5.4.61/kernel/drivers/media/platform/sunxi-vin/

装载vin_io.ko驱动

在这里插入图片描述

进入sensor目录:

cdcd modules/sensor/

装载ov5640.ko驱动:

insmod ov5640.ko

在这里插入图片描述

回到sunxi-vin目录:
在这里插入图片描述

装载vin_v4l2.ko驱动:

insmod vin_v4l2.ko

在这里插入图片描述

注意:上述大部分打印信息为我调试时加的打印,与自带驱动无关,全志自带的驱动程序是正常。

插入U盘或无系统的TF卡将获取到的图片提取出来查看。

挂载U盘。
在这里插入图片描述

mount /dev/sda1 /mnt/

使用camerademo拍摄照片,存放到U盘内

camerademo NV21 640 480 30 bmp  /mnt 5

在这里插入图片描述

卸载U盘分区

umount /mnt/

拔下u盘,插入电脑中,即可查看到刚刚在T113开发板上使用ov5640拍摄的5张照片
在这里插入图片描述

原贴链接:https://bbs.aw-ol.com/topic/2589/
资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
全志及开发者最新动态可以关注全志在线微信公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2核心完整笔记

文章目录 [TOC](文章目录)前言1. vue2基础知识和原理1.1 初识Vue 和 Vue简介1.2 模板语法1.3 数据绑定1.4 el与data的两种写法1.5 Vue中的MVVM1.6 数据代理1.7 事件处理1.8 键盘事件1.9 计算属性1.10 监视属性1.11 绑定样式class样式style样式 1.12 条件渲染v-ifv-show 1.13 列…

echarts 图表饼状图 实例

效果图&#xff1a; 代码&#xff1a; draw(data1, data2) {var option {// backgroundColor: rgb(10,36,68),color: [#F19611 ,#0095FE,#162D86,#0096FF,#05F8FF,#FFD985,#FACDAA,#F4A49E,#EE7B91,#E85285,#BE408C,#942D93,#171E6D,#1E3388,#27539B,#3073AE,#3993C2,#42B3D…

比较IP代理与路由器获取IP地址的三大差异

在今天的文章中&#xff0c;我们将与大家一起探讨IP代理与路由器获取IP地址的差异。这两种方式在获取IP地址上有一些区别&#xff0c;而这些区别会对我们的网络使用体验产生影响。今天我们深入分析并提供一些实际的例子与操作经验。 稳定性差异&#xff1a; 通过路由器获取IP地…

STM32基于CubeIDE和HAL库 基础入门学习笔记:基础知识理论 开发环境建立

文章目录&#xff1a; 一&#xff1a;开发板和基础知识理论 1.开发板 2.基础知识理论* 二&#xff1a;CubeMX图形化编程 1.设置时钟&#xff08;心脏&#xff09; 1.1 开启RCC功能 1.2 开启RTC功能 1.3 配置时钟树 2.设置端口&#xff08;五官四肢&#xff09; 3.工…

Shopee、国际站卖家测评自养号方法大揭秘!

很多虾皮卖家都会经常提到“权重”这个词语&#xff0c;什么是权重&#xff1f;权重的作用是什么&#xff1f;如何提高产品的权重&#xff1f;今天就带大家来仔细了解下这个“权重”。 什么是权重&#xff1f; 权重泛指某一因素或指标相对于某一事物的重要程度。而Shopee权重…

由 Base64 展开的知识探讨

前言 在我们的业务应用中越来越多的应用到编码内容&#xff0c;例如在 API 中&#xff0c;给到后端的 SQL 都是通过 Base64 加密的数据等等。 能够发现我们的代码中&#xff0c;使用的 window 对象上的 btoa 方法实现的 Base64 编码&#xff0c;那 btoa 具体是如何实现的呢&a…

第二篇|研究数据哪里来——建筑业

数据是研究和产业发展的重要基石&#xff0c;然而无论是学者、企业还是研究机构往往都面临着“找数据难”的局面。本期将分享一些查找建筑相关的数据及资料的渠道。希望可以帮大家解决这一难题&#xff0c;有用求收藏求收藏求收藏~ 1.政府机构 可以查找国家、地方政府的建筑行…

应用在室外LED电子显示屏中的MiniLED背光

LED电子显示屏是一种通过控制半导体发光二极管的显示方式&#xff0c;是由几万–几十万个半导体发光二极管像素点均匀排列组成。它利用不同的材料可以制造不同色彩的LED像素点&#xff0c;以显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。 LED显示屏…

安防监控视频汇聚EasyCVR平台的FLV视频流在VLC中无法播放的原因排查

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…

“中国软件杯”飞桨赛道晋级决赛现场名单公布

“中国软件杯”大学生软件设计大赛是由国家工业和信息化部、教育部、江苏省人民政府共同主办&#xff0c;是全国软件行业规格最高、最具影响力的国家级一类赛事&#xff0c;为《全国普通高校竞赛排行榜》榜单内赛事。今年&#xff0c;组委会联合百度飞桨共同设立了“智能系统设…

基于CAS的单点登录实践之路

前言 上个月我负责的系统SSO升级&#xff0c;对接京东ERP系统&#xff0c;这也让我想起了之前我做过一个单点登录的项目。想来单点登录有很多实现方案&#xff0c;不过最主流的还是基于CAS的方案&#xff0c;所以我也就分享一下我的CAS实践之路。 什么是单点登录 单点登录的…

Java Random 类的使用

Java中的Random类是用来生成伪随机数的工具类。它可以用来生成随机的整数、浮点数和布尔值。以下是Java Random类的一些常见用法&#xff1a; 创建Random对象&#xff1a; Random random new Random();生成随机整数&#xff1a; int randomNumber random.nextInt(); // 生…

新手也能看懂:如何理解 K8s 声明式 API ?

我们知道 Kubernetes&#xff08;以下简称“K8s”&#xff09;中各种资源对象的数据是通过 K8s 的 API 进行提交并持久化到存储 etcd 中的&#xff08;称为K8s对象&#xff09;&#xff0c;K8s 对象是使用 K8s 的接口&#xff0c;kubelet 客户端通过操作这些对象来使用K8s能力。…

uniapp使用空格占位符无效

uniapp文档&#xff1a; 错误写法&#xff1a; <text>筛 选</text> 正确写法&#xff1a; <text decode>{{ 筛 选 }}</text> //要加decode属性&#xff0c;且内容必须包裹在{{}}

无人驾驶实战-第十课(决策规划)

在七月算法上报了《无人驾驶实战》课程&#xff0c;老师讲的真好。好记性不如烂笔头&#xff0c;记录一下学习内容。 课程入口&#xff0c;感兴趣的也可以跟着学一下。 ————————————————————————————————————————— Planning是目前无…

openGauss学习笔记-32 openGauss 高级数据管理-批处理模式

文章目录 openGauss学习笔记-32 openGauss 高级数据管理-批处理模式32.1 语法格式32.2 参数说明32.3 示例 openGauss学习笔记-32 openGauss 高级数据管理-批处理模式 openGauss支持从文本文件执行SQL语句。openGauss提供了gsql工具实现SQL语句的批量处理。 以下场景建议使用批…

(JS逆向专栏十二)某乐平台网站登入RSA

声明: 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 名称:当乐 目标:登入参数 加密类型:RSA 目标网址:https://oauth.d.cn/auth/goLogin…

【前端 | CSS】5种经典布局

页面布局是样式开发的第一步&#xff0c;也是 CSS 最重要的功能之一。 常用的页面布局&#xff0c;其实就那么几个。下面我会介绍5个经典布局&#xff0c;只要掌握了它们&#xff0c;就能应对绝大多数常规页面。 这几个布局都是自适应的&#xff0c;自动适配桌面设备和移动设备…

Linux:管道命令与文本处理三剑客(grep、sed、awk)

1 管道命令&#xff08;pipe&#xff09;介绍 众所周知&#xff0c;bash命令执行的时候会输出信息&#xff0c;但有时这些信息必须要经过几次处理之后才能得到我们想要的格式&#xff0c;此时应该如何处置&#xff1f;这就牵涉到 管道命令(pipe) 了。管道命令使用的是|这个界定…

GaussDB数据库SQL系列-表连接(JOIN)

目录 一、前言 二、GaussDB JOIN 1、LEFT JOIN 2、LEFT JOIN EXCLUDING INNER JOIN 3、RIGHT JOIN 4、LEFT JOIN EXCLUDING INNER JOIN 5、INNER JOIN 6、FULL OUTER JOIN 7、FULL OUTER JOIN EXCLUDING INNER JOIN 三、GaussDB 实验示例 1、初始化实验表 2、LEFT …