第4季3:Hi3518e的sensor接口引脚复用设置

news2024/9/30 1:31:39

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

在第2、3季的内容中,在板载系统的配置脚本即/etc/profile文件中,都有如下这句代码:

./load3518e -i -sensor ar0130 -osmem 32 -total 64

在第4季1:将AR0130摄像头更换为OV9712摄像头中提到,Hi3518E_SDK_V1.0.3.0/mpp/ko目录下的load3518e文件是一个shell脚本,主要用来设置Hi3518E的引脚中那些与sensor有关的引脚的复用。

本文将详细分析 load3518e 这个脚本文件的内容,尤其是设置引脚复用的方法。

一、分析load3518e文件

(1)首先定义了一些变量:

#!/bin/sh

SNS_TYPE=ar0230             # sensor type
mem_total=64;               # 64M, total mem
mem_start=0x80000000;       # phy mem start
os_mem_size=32;             # 32M, os mem
mmz_start=0x82000000;       # mmz start addr
mmz_size=32M;               # 32M, mmz size

(2)然后定义了一些函数:

(3)然后通过判断一些变量的值来决定是否执行(2)中的某些函数:

 

重点关注一下insert_ko函数,当在板载系统的/etc/profile文件中执行load3518e脚本时,如果参数中有“ -i ”选项,则“for arg in $@”这段代码会将变量b_arg_insmod赋值为1,则会执行insert_ko函数。

我们来看一下insert_ko函数中的内容,主要完成一些驱动模块即ko文件的安装。在安装这些驱动模块的时候,会显示一些安装信息,这也就是为啥执行load3518e脚本时,SCRT上显示诸多信息的原因,“==== Your input Sensor type is ar0130 ====”也是在这函数中打印的。

insert_ko()
{
	# sys config
	sys_config;

	# driver load
	insmod mmz.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_error
	insmod hi_media.ko
	insmod hi3518e_base.ko

	insmod hi3518e_sys.ko vi_vpss_online=$b_arg_online sensor=$SNS_TYPE
	if [[ $? -ne 0 ]]; then 
		exit;
	fi  

	insmod hi3518e_tde.ko
	insmod hi3518e_region.ko
	insmod hi3518e_vgs.ko

	insert_isp;
	insmod hi3518e_viu.ko detect_err_frame=10;
	insmod hi3518e_vpss.ko rfr_frame_comp=1;
	insmod hi3518e_vou.ko
	#insmod hi3518e_vou.ko transparentTransmit=1 #enable transparentTransmit
	insmod hifb.ko video="hifb:vram0_size:1620"     # default pal

	insmod hi3518e_rc.ko
	insmod hi3518e_venc.ko 
	insmod hi3518e_chnl.ko ChnlLowPower=1
	insmod hi3518e_h264e.ko
	insmod hi3518e_jpege.ko
	insmod hi3518e_ive.ko save_power=0;
#	insmod hi3518e_ive.ko	
	insmod extdrv/sensor_i2c.ko
	echo "==== Your input Sensor type is $SNS_TYPE ===="
	insmod extdrv/pwm.ko
	insmod extdrv/piris.ko

	#insert_sns > /dev/null
#重点关注一些insert_sns这个函数
	insert_sns
	insert_audio

	insmod hi_mipi.ko
	echo "==== Your input Sensor type is $SNS_TYPE ===="
}

(4)在insert_ko函数的内容中,我们重点关注一下insert_sns这个函数,因为它涉及到本文主题即如何设置引脚复用的内容。insert_sns函数的内容如下所示。从中可知,该函数会根据sensor的不同型号来执行不同的操作,这里的操作主要是设置Hi3518e和sensor之间的引脚复用,其中用到了海思自己的设置工具himm,比如“himm 0x200f0040 0x2”表示将地址为0x200f0040的寄存器的值设置为0x2。

insert_sns()
{
        case $SNS_TYPE in
                ar0130|9m034)
                        himm 0x200f0040 0x2;                            # I2C0_SCL
                        himm 0x200f0044 0x2;                            # I2C0_SDA
 
                        #cmos pinmux
                        himm 0x200f007c 0x1;                            # VI_DATA13
                        himm 0x200f0080 0x1;                            # VI_DATA10
                        himm 0x200f0084 0x1;                            # VI_DATA12
                        himm 0x200f0088 0x1;                            # VI_DATA11
                        himm 0x200f008c 0x2;                            # VI_VS
                        himm 0x200f0090 0x2;                            # VI_HS
                        himm 0x200f0094 0x1;                            # VI_DATA9
 
                        himm 0x2003002c 0xb4001;                        # sensor unreset, clk 27MHz, VI 99MHz
                        ;;
                #省略部分代码
                ov9712)
                        himm 0x200f0040 0x2;                            # I2C0_SCL
                        himm 0x200f0044 0x2;                            # I2C0_SDA
 
                        #cmos pinmux
                        himm 0x200f007c 0x1;                            # VI_DATA13
                        himm 0x200f0080 0x1;                            # VI_DATA10
                        himm 0x200f0084 0x1;                            # VI_DATA12
                        himm 0x200f0088 0x1;                            # VI_DATA11
                        himm 0x200f008c 0x2;                            # VI_VS
                        himm 0x200f0090 0x2;                            # VI_HS
                        himm 0x200f0094 0x1;                            # VI_DATA9
 
                        himm 0x2003002c 0xc4001;                        # sensor unreset, clk 24MHz, VI 99MHz
                        ;;
                  #省略部分代码
}

二、设置引脚复用的方法

引脚资源是有限的,需要根据情况进行引脚复用,即一个引脚可能具备诸多功能,需要根据实际情况来设置这个引脚的功能。如何设置引脚复用呢?不同的SoC可能有不同的设置方法,比如S5PV210使用专门的控制寄存器来配置某个引脚的作用,其实Hi3518E也是如此。

一般设置引脚复用的步骤如下。

(1)查看引脚定义框图

比如在《Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南》文档中,大概第37页的地方有如下的内容。这图是这样理解的:物理引脚A1的功能(之一)是VSS;物理引脚C4的功能(之一)是JTAG_TDO……

接下来我们看一下Hi3518E的开发板原理图。比如在开发板原理图中查看引脚C4,如下所示。该引脚功能之一是JTAG_TDO,其他的功能有SPI1_SDO、I2C1_SDA、GPIO7_0。

(2)找到配置这个引脚功能的设置寄存器

比如我们想配置C4引脚的复用功能。我们在《Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南》文档中搜索“C4”或者“JTAG_TDO”,找到相关的描述如下,可以得知设置C4这个引脚复用功能的寄存器是PADCTRL_REG67 。

我们在文档中搜索“PADCTRL_REG67 ”,可以得知这个寄存器的地址(基址+偏移地址)为0x200F_090C。

 

 我们点击该寄存器的页码,可以得知这个寄存器的bit设置含义。

(3)利用himm工具设置寄存器的值

在步骤(2)中,我们得知设置C4这个引脚复用功能的寄存器的信息,包括寄存器的名字、寄存器的地址、寄存器的bit含义。根据这些信息,我们可以利用海思提供的himm命令(这个命令已经部署在根文件系统中,直接使用即可)对寄存器进行赋值操作,进而配置这个引脚起什么作用。

比如load3518e文件中的insert_sns函数里,就利用himm命令对相关引脚的复用功能进行了配置。

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

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

相关文章

MAC glucuronide linker-1/MAC glucuronide linker-2蛋白降解酶

ERRa_PROTAC(Cpd11,D1oonM40%)蛋白降解活性随着Linker的增长而减弱。Linker -(CHz)s-的化合物13d在浓度30 nM时能够降解58%的蛋白,浓度为100 nM时能够降解78%的ERRα蛋白,其降解活性不如 13c。Linker -(CHz)z-的13f&…

java计算机毕业设计ssm齐市疫苗管理系统w80jw(附源码、数据库)

java计算机毕业设计ssm齐市疫苗管理系统w80jw(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校心理咨询管理系统0e78p

大部分步骤是 1.确定选题 选题的确定需要查阅大量的资料,要搞清楚自己大概想要研究的方向是什么。可以选择自己感兴趣的学科或者强势的学科进行研究,同时要多和毕业指导老师多交流,征求老师的意见和建议,最后确立选题。计算机专业…

面试官:你知道 Java 中的回调机制吗?

调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种。 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b(), 一直等待b()方法执行完毕, a()方法继续往下走. 这种调用方式适用于方法b()执…

【论文速读】Scene Text Telescope: Text-Focused Scene Image Super-Resolution

前言 在阅读这篇文章的时候,我花费了近一周的时间在将其基本消化理解,至于为什么花费如此长的时间,我发现主要原因是我对transformer一知半解,所以在transformer中提出的名词,例如:Postion-Wise Feed-Forw…

365天深度学习训练营-第P3周:天气识别

🍨 本文为🔗365天深度学习训练营 内部限免文章(版权归 K同学啊 所有)🍦 参考文章地址: 🔗第P3周:天气识别 | 365天深度学习训练营🍖 作者:K同学啊 | 接辅导、…

视频转文字怎么操作?这三种转换方法你该学会

如今短视频让各种知识传播变得生动形象,但是视频学习对于后期的整理复习不是很便捷,现在教大家一种好用的视频知识整理方法,那就是视频转文字,可以将视频内容轻松转换为文字形式。那么就有人问了,怎样转换才更简单呢&a…

WeakHashMap 和 HashMap 的区别是什么,何时使用?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在之前的文章里,我们聊到了 Java 标准库中 HashMap 与 LinkedHashMap 的实现原理。HashMap 是一个标准的散列表数据结构&…

eval()方法字符串转对象; 分别取对象属性名和属性的方法

字符串转对象 ⬇️ A是字符串 转对象: let B eval(‘ (‘ A ‘) ‘) B就是A转成的对象 取对象属性名(for ... in ... ) ⬇️ let C []; for(let key in B) { C.push(key); console.log(key); // 打印所有属性名 console.log(B[key]); // 打印所有属性值…

“元宇宙”虚拟世界的营销法则 “品牌元宇宙空间”算什么?

虚拟世界从来不缺吃螃蟹的品牌。 “元宇宙”依旧是当下品牌创新营销的重要形式,从时趣的行业观察来看,大量品牌方都有着元宇宙的营销意向,但在营销落地上存在不同的进度。一个显而易见的事实是,元宇宙不仅仅是一个虚拟的游戏空间…

RabbitMQ之负载均衡-HAProxy

将客户端的连接和操作的压力分散到集群中的不同节点,防止单个或几台服务器压力过大成为访问的瓶颈,甚至宕机。HAProxy是一款开源免费,并提供高可用性、负载均衡以及基于TCP和HTTP协议的代理软件,可以支持四层、七层负载均衡&#…

虚拟列表渲染-前端性能优化

目录 1 使用场景 2 小插曲 3 虚拟列表渲染实现原理 4 代码实现 1 使用场景 在做EMBP项目时,有个模板新建的需求,需要点击获取子任务时获取所有的子任务,当时有的数据比较大,会有几百条的情况,此时接口请求变得很慢…

高可用网站架构云化

高可用网站架构云化 一、背景 早期互联网产品用户量少,并发量低,数据量小,多数只需要单个应用服务器可以满足需要,而数据库和文件服务部署在外部单个服务器上。随着业务在线化、互联网化的高速发展,企业对核心业务系统…

微信云开发AI短视频一键换脸小程序源码

简介: 微信云开发AI一键视频换脸小程序源码是由极客二改后发布的,小程序增加了广告控制, 插屏广告,激励广告和原生广告,由于采用了微信云开发没有后台, 所以不需要域名和服务器也可以正常搭建使用&#xf…

【论文精读6】MVSNet系列论文详解-CIDER

CIDER全名:Learning Inverse Depth Regression for Multi-View Stereo with Correlation Cost Volume,AAAI 2020(CCF A) 本文是MVSNet系列的第6篇,建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再看便于理解。 一、问题引入 针对问题&#xff1a…

理解 CNN

理解 CNN 注意:下面提到的图像指位图 目录理解 CNNCNN人类的视觉原理几个关键层卷积层(fliter、kernel)池化层 (pooling)激活层(activate)全连接层(Linear)pytorch实现TextCNN卷积传播图解不同视角看CNN参考CNN 卷积神经网络-CNN 最擅长的就是图片的处理。它受到人…

[附源码]JAVA毕业设计机房预约系统(系统+LW)

[附源码]JAVA毕业设计机房预约系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

Spring Data JPA 中的分页和排序

让我们学习如何使用 在 Spring 数据 JPA 中使用分页和排序有效地处理大量记录。 什么是分页和排序? 大多数情况下,来自数据库的结果集可能会让人不知所措。它可能会让人不知所措,以至于系统崩溃,因为它们无法在一次传递中处理那…

2019-10《信息资源管理 02378》真卷(独家文字版),圈定章节考点+统计真题分布

本系列博客合计 21 篇,每篇都将解析一张《信息资源管理》真卷,并附带答案解析与背诵技巧。 搜索 梦想橡皮擦,擦姐整理 全国 2019 年 10 月自学考试信息资源管理试题(02378) 单选题 1,信息技术是应用信息科学的原理和…

Linux基本工具——yum

Linux基本工具软件包管理器yum什么是软件包Linux的软件包yum的三板斧yum的扩展软件包管理器yum 工具的本质就是指令 什么是软件包 我们平时用手机与电脑的时候,如果想安装一个软件就需要去下载它的安装包(软件包),下载安装包的…