接口引脚复用
1.查看引脚定义的框图
2.找相应的设置寄存器(基地址+偏移量=寄存器地址)
3.himm工具写入
himm是海思提供的一个专门来写这些寄存器的一个可执行程序。
himm在哪里会被使用?
在load3518e这个脚本里面调用了himm,去写sensor的寄存器。
load3518e脚本在哪里使用了?
在/etc/profile脚本里面
开机的时候装在摄像头 -i 是insmod的意思
load3518e脚本是专门装载摄像头用的,在脚本里面写好了很多海思支持的摄像头的寄存器配置,要用的时候直接调用这个脚本,然后就ok了
回到接口引脚复用设置
如何修改海思支持的这些寄存器的值?
分析load3518e这个脚本
里面有个insert_sns()
类似函数的东西。
不同的摄像头需要配置的东西也不同
看到有需要配置的有i2c
vi_data
vi_vs
vi_hs
clk
等等。
课程里面讲,很多时候这些data线都是厂家给你配置好的,但是呢clk线可以自己配置。
排线太长,如果clk频率太高的话会影响数据传输,这时候要把clk频率调低。
以himm 0x2003002c 0xb4001;
为例
himm
是工具
0x2003002c
是对应寄存器的地址
0xb4001
是设置的值
如何找到这些寄存器的定义
海思官方给的文档里面有这个用户指南
0x2003002c
一般都这样 基地址是前面 偏移量在后面
基地址:0x2003_0000
偏移量:0x002c
对应的寄存器是PERI_CRG11
这个寄存器有21
个位是有效的,但是这21
个位里面跟时钟频率有关的设置是bit16-bit18
0xb4001
是设置的值
转换成2进制是
1011 0100 0000 0000 0001
这么说除了[18:16]
要设置 bit19
bit14
bit0
也置位了
bit0
时钟打开
bit14
mipipix时钟打开
bit19
sensor clk out时钟打开
[18:16]
011对应27MHz 跟load3518e脚本里面的注释相对应。
至此完成了这个寄存器的分析。
对于其他寄存器
顺序应该是先查引脚定义的框图,然后找寄存器,然后再写寄存器的。
但是如果有例子的情况下可以模仿别人的写法来添加不同的sensor,当然这是在自己技术够好的情况下,不行的话就把这个任务丢给摄像头的厂商,问他们能不能帮你调这个sensor跟这款芯片的驱动。