闲来无事,淘宝瞎逛,看到IMX662传感器仅需20大洋,遂购入,搓模块
IMX662是索尼为监控摄像头设计的1/2.8英寸传感器,总像素200w(也就是1080P),搭载了STARVIS2技术,在暗光下有良好的可见度,以及在白天时更宽的动态范围。
IMX662用的是MIPI CSI2接口,包括树莓派在内的大部分开发板都支持这接口,所以拿来给树莓派做摄像头也是顺理成章的事了。
寻找手册
索尼这种日厂,当然是要给手册捂得严严实实(很符合我对日企的刻板印象),大部分时候没法找到完整手册。尤其是最近几年的传感器,甚至会给手册拆成三部分:“硬件设计手册”,“软件参考手册”,“完整寄存器表格”,不签NDA很难找全。
不过一般而言,出货量大的传感器通常会有比较齐全的手册流出,IMX662就是其中一个,我在网上找到了它的硬件手册和软件手册。在文末的Github链接都有。
遗憾的是完整的寄存器表格没有找到,一般来说,索尼传感器会有一系列奇妙的寄存器(不给你说明用途)需要在上电时写入配置,如果没有这个表格会造成很大麻烦(直接没法驱动起来)。
不过好在已经有人为IMX662开发了树莓派驱动,驱动程序里面有完整的初始化寄存器序列,又因为我本来就打算接树莓派,所以寄存器表格的缺失并不是什么大问题。如果需要在其他板子上使用,可以参考那些驱动程序的源代码。
设计原理图/画PCB
拿到完整手册后就能够着手画板了。同前面的原因,网上当然是找不到IMX662现成的符号和封装(截止这篇文章发出前),得自己画一下。
符号部分主要分为三大块:电源、数据、控制,对着手册一个个画出来就行。
至于封装,我使用KiCAD的封装向导,新建一个BGA封装,然后根据手册进行微调(删除无用点)即可。需要注意的是方向问题,在手册中,长边是用字母标号的,如果没注意可能会画错。
符号和封装准备完毕,开始设计原理图。电源部分,IMX662需要3.3V、1.1V、1.8V三种电压,分别为模拟、数字、IO三个部分供电。树莓派摄像头接口提供的电源是3.3V的,所以1.1V和1.8V需要降压。
我这里使用SPX3819-1.2和SPX3819-1.8来完成稳压(注:虽然数字部分推荐的电压是1.1V,但完全可以耐受1.2V)。模拟部分所需的3.3V直接从树莓派获取,通过一个磁珠+大电容进行了简单滤波。
通信部分分为MIPI和I2C,MIPI用于图像传输,I2C用于配置传感器。MIPI的电平我们不用关心,仅需要注意I2C即可。树莓派摄像头接口的I2C使用3.3V电压,而传感器的I2C使用1.8V电压,中间需要一个电平转换器。这里使用的是TXS0104,因为多了两个通道,我将多出来的通道接上传感器的复位信号,方便日后有需要时使用。
传感器时钟源,IMX662是最近几年才出的,时钟配置相比于过去那些索尼的传感器要简单太多了,只要在对应寄存器里设置输入频率即可。IMX662支持24/27/72/74.25MHz输入时钟(需要1.8V有源晶振),市面上前面三种比较好买,我这里用的74.25MHz,但对你来说哪个方便用哪个,到后面驱动环节都可以配置。
因为需要安装镜头,所以得先把固定镜头的螺丝孔确定下来,避免影响走线。我这里使用的是螺孔间距为22mm、M2螺丝固定的M12镜头座,淘宝可以很方便买到。
需要注意的是,镜头座的镜筒长度需要根据你买的镜头的法兰距、传感器安装后高度这两个条件确定,否则可能会出现对不上焦的情况。我买的镜头座镜筒长度约13mm。
这里使用了四层PCB来进行阻抗控制,MIPI信号线等长+阻抗控制,剩下的电源和信号只要走通即可。传感器耗电量很小因此不用担心线宽问题。
购买FPC排线时,需要的是图下这种两头触点都在同一面的
焊接
焊接部分没有太多讲究,背面的元件按照自己喜欢的方式焊接即可。
传感器买来是不带锡球的,需要自己植球,我这里使用的是183°直径0.5mm的锡球。植球/焊接传感器时,风枪温度最好不要超过240°,避免损坏传感器。
上机测试
掏出我吃灰已久的树莓派4B,刷入最新(当前是2024-11-29)64位系统,推荐使用lite。
原驱动来自于树莓派论坛的这篇帖子,不过由于系统更新和硬件区别,我在此基础上修改了一下。
本文仓库里下载修改过的驱动代码,按照Driver文件夹里的readme文件进行安装即可
如果你用了不同频率的晶振,请在imx662-overlay.dts文件中修改,如下图
分别在第54行和第99行
注意,晶振频率只能是传感器支持的那几个值(24/27/72/74.25MHz)
另外,需要手动将设备树文件(imx662-overlays.dts)编译成dto文件后,放入/boot/overlays文件夹
重启以后,检查dmesg是否检测到了摄像头
至此系统驱动安装完毕,但是,由于libcamera目前还没官方支持这款传感器,所以需要从源码编译,将驱动目录下的cam_helper文件一同添加到编译过程中,编译完成后还需要将imx662.json配置文件添加到libcamera目录才行。
我这里找到了另外一个Github仓库,可以按照里面的installer.sh文件自行编译安装libcamera。
拍张照片!
啊,才想起来我们好像还没安装镜头。M12监控镜头淘宝上有很多,我这里买的镜头参数:3.6mm焦距,光圈F2,中心分辨率5MP,带IR cut滤镜。
把镜头拧上去,用下面的命令拍一张照片
libcamera-still -o hello.jpg
(没对上焦+镜头畸变很严重,乐。不过这些都是能修正的,这里就懒得调了)