用QSPI来扩展RAM,
比较省引脚。
(前言)
做这个小项目是想要开发一套简单的遥感系统,用于其他大项目的一部分。而ST的单片机价格也下去了些,即使是H7之类之前”高不可攀“的芯片也降到数十块钱,加上PCB的BOM成本也不高,适合随便做做。没想到过程却踩了不少坑,便写在这篇帖子中。
硬件配置:
单片机:STM32H750VBT6
CMOS传感器 / 摄像头:AR0130CSSM
选单片机时没什么想法,因为作者只对ST系单片机熟悉。STM32H7全系列均有硬件DCMI接口(ST对于DVP并口摄像头的叫法),用起来很方便。
选择CMOS摄像头时却出了不少问题,这是作者之前的心路历程:OV2640,OV5640之类的常见传感器太老,恐怕已经停产(?),且有效面积太小。而索尼的IMX系列监控摄像头CMOS又太贵,且不少都是MIPI接口,无法简单驱动。在逛了立创商城许久后,便看上了AR0130这款传感器,作为一只1/3''的黑白720p传感器,信噪比和动态范围看着也不错。
后面便很简单,画板打样即可。
初版PCB渲染图,传感器在背面。
在一系列软件调试后,终于出图了。
效果如图,好像不太妙。畸变是镜头的问题,但这只是个开始。
第一个问题:STM32H750的内存太小了,1MB分成多块,最大只能放下一张640*480的8位图片,而且由于引脚过少,FMC无法拓展外部SDRAM。
第二个问题,由于画板没考虑周全,传感器的模拟电压与STM32的数字电压共用电源轨,导致暗处有非常明显的竖纹。这都是能够通过改进解决的小问题,但最可怕的是——传感器的数据手册过于不全。
我也不知什么倒霉缘由选定了AR0130这款传感器。此传感器现可在ONSEMI的官网上免费获取数据手册,可AR开头的传感器均是从Aptina公司收购而来,而Aptina则是从镁光的图像部门拆分而出。而仅靠数据手册是无法使用该芯片的——I2C的寄存器配置完全是个黑盒。还好,简单搜索便能找到Aptina时期的寄存器手册,在画板前我便是找到该手册才决定的,可是没有细看。
XXXXXXXXXXXXXXXXXXXXXX/aptina_pdfs/AR0130_Register_Reference.pdf
第三方网站收藏的寄存器手册。。。
细看之后,发现手册长这个样子,完全没有解释。属于能用,但不完全能用的类型。没事,莫慌,网上还能找到linux的驱动。
XXXXXXXXXXXXXXXXXX/RyanDavis/Overo-AR0130/blob/master/ar0130.c抄了一抄,确实能用,却发现很多魔法。最大的问题是自动曝光功能不好用,日光时过曝,暗处又欠曝,怎么调也调不好。
如上图,初始化时要往“sequencer”里载入一堆东西,手册里并没有解释。那些ADC配置的寄存器,手册里干脆就没有。罢了,估计只有熟悉该领域的专家才能透彻理解。况且,仔细想想,该芯片若是继承自2014年被收购的Aptina公司,好像也不是很新。。。
总之,下一版本将会采用更加人性化的CMOS传感器芯片。
附kicad工程及固件源代码:
200字以内,仅用于支线交流,主线讨论请采用回复功能。