目录

  • 为什么要引脚复用
  • 查看引脚定义框图
  • 找到相应设置寄存器
  • himm
  • 以AR0130分析sensor引脚复用


为什么要引脚复用

CPU的引脚数量有限,但外设所需要的引脚非常多。不管是简单的单片机还是复杂的CPU,引脚的复用都是不可避免的。

复用需要用软件去设置,让复用工作在某种特定的条件下,一般是有一些寄存器。

每个平台的复用方法不尽相同,本片分析海思平台的复用方法

但复用的思路都是一样的

  • 查看引脚对应框图
  • 找到相应设置的寄存器
  • himm工具

如果引脚较少,四五个功能都复用在同一个引脚上,这个时候就会很麻烦。

这个时候就需要去查看引脚定义的框图,CPU的定义手册里都会给出这么一张图。这样就能知道设计的功能和物理的引脚是怎么对应的。
比如能够了解,谁和谁是兼容,谁和谁是抵触的。

看完之后,就去找控制引脚复用的寄存器,比如一些三星的板子,设计是在ctl寄存器里放几个位来进行复用;而海思有一个专门的控制复用的寄存器。各个平台有差异,需要看手册

找到对应寄存器后,需要有读写的方法去配置寄存器。如何读取寄存器,不同平台也是不一样的。有的是用C写代码,有的可能是配置脚本,海思的平台提供了一个himm的工具来进行操作。

查看引脚定义框图

有的平台会把引脚定义框图放在data sheet里边,海思放在了IP Camera Soc用户指南.pdf当中

esim卡管脚定义_himm工具


先查看芯片手册

esim卡管脚定义_寄存器配置_02


比如R5是引脚的物理名称,MIPI_CKM/VI_DATA3是会被复用的网络名称再看复用图

C4是被用作JTAG_TDO,当然也会有其他功能,写在了其他地方

有些其他平台的复用图写的很清晰,将一个引脚的复用写的很清晰,海思写的不是特别好

esim卡管脚定义_esim卡管脚定义_03

找到相应设置寄存器

esim卡管脚定义_esim卡管脚定义_04


海思的文档在这一方面写的不是很清晰

在上面比较难看出一个引脚一共复用了哪些功能用寄存器控制复用功能,无非就是先找到寄存器,再找到寄存器的位定义

esim卡管脚定义_himm工具_05


就以这个首地址为例,控制SENSOR_CLK的复用

esim卡管脚定义_esim卡管脚定义_06


可以看到只有1位有用,其他都作为保留

说明这个引脚只有两个功能这里可以看出海思的逻辑是先给管脚起一个名字,比如这个管脚的名字是SENSOR_CLK

esim卡管脚定义_海思平台_07


然后再查看其对应寄存器,才能知道其他复用的功能

海思这样的设计是因为,海思是一个专用性非常强的平台,每个管脚怎么用都是设计好的,在设计的时候就已经决定了用什么功能。

himm

himm工具在sdk编译的时候就已经生成了,生成之后会cp到我们的根文件系统的环境中

load3518e中就已经调用himm做了很多事情

esim卡管脚定义_himm工具_08


这个工具一看就知道很好用

第一个参数是寄存器地址,第二个参数是要写的值在load3518e中,比较重要的是insert_sns函数,sns就是sensors

如上图,这些配置寄存器的操作就是对引脚的配置,#后面的注释都可以在对应sensor的原理图中找到相应的引脚,如下图

esim卡管脚定义_himm工具_09


下图是hi3518E的引脚图,如果接入的sensor是MIPI接口,那么就需要把它设置为MIPI

esim卡管脚定义_esim卡管脚定义_10


这里就可以看出,如果使用的是一个新的sensor,那么还是有很多事情要做的。

以AR0130分析sensor引脚复用

esim卡管脚定义_himm工具_08


再以这张图为例进行分析

第一个配置的寄存器基地址为0x200f0040

esim卡管脚定义_海思平台_12


查看相关手册

esim卡管脚定义_海思平台_13


我们将0x2写入寄存器,让其工作在I2C状态下

esim卡管脚定义_esim卡管脚定义_14

再来分析一组
007c,用于配置VI_DATA13

esim卡管脚定义_引脚复用_15