OV7725寄存器配置(为了替换NT99141研究了很长一段时间)
部分参考链接:
OV7725 电器特性和时序图:https://www.cnblogs.com/raymon-tec/p/5087088.html
OV7725摄像头的彩色图像采集原理与液晶显示(有必要了解框图):https://blog.csdn.net/huzhoudaxia/article/details/75269392
OV7725的一些必要认识
XCLK:工作时钟输入,由主控器产生(由外部输入到摄像头),频率常用为24MHz;
PCLK:像素时钟输出,由XCLK产生,用于控制器采样图像数据(时钟速率<5ns,比如PCL84MHZ,30fps); 配置寄存器设置不同频率
HREF:行参考信号输出;
VSYNC:场同步信号输出; 一帧图像产生的中断,配置寄存器可使用该功能
D[9:0] 像素数据输出;
RSTB:复位输入,低电平有效;
PWDN:低功耗模式选择输入,正常工作期间需拉低;
SCL:SCCB管理接口时钟,最高频率400KHz;
SDA:SCCB接口串行数据总线;
OV7725寄存器配置(引自野火的配置)
//寄存器宏定义#define GAIN 0x00#define BLUE 0x01#define RED 0x02#define GREEN 0x03#define BAVG 0x05#define GAVG 0x06#define RAVG 0x07#define AECH 0x08#define COM2 0x09#define PID 0x0A#define VER 0x0B#define COM3 0x0C#define COM4 0x0D#define COM5 0x0E#define COM6 0x0F#define AEC 0x10#define CLKRC 0x11#define COM7 0x12#define COM8 0x13#define COM9 0x14#define COM10 0x15#define REG16 0x16#define HSTART 0x17#define HSIZE 0x18#define VSTRT 0x19#define VSIZE 0x1A#define PSHFT 0x1B#define MIDH 0x1C#define MIDL 0x1D#define RSVD 0x1E#define LAEC 0x1F#define COM11 0x20#define BDBase 0x22#define BDMStep 0x23#define AEW 0x24#define AEB 0x25#define VPT 0x26#define REG28 0x28#define HOutSize 0x29#define EXHCH 0x2A#define EXHCL 0x2B#define VOutSize 0x2C#define ADVFL 0x2D#define ADVFH 0x2E#define YAVE 0x2F#define LumHTh 0x30#define LumLTh 0x31#define HREF 0x32#define DM_LNL 0x33#define DM_LNH 0x34#define ADoff_B 0x35#define ADoff_R 0x36#define ADoff_Gb 0x37#define ADoff_Gr 0x38#define Off_B 0x39#define Off_R 0x3A#define Off_Gb 0x3B#define Off_Gr 0x3C#define COM12 0x3D#define COM13 0x3E#define COM14 0x3F#define COM15 0x40#define COM16 0x41#define TGT_B 0x42#define TGT_R 0x43#define TGT_Gb 0x44#define TGT_Gr 0x45#define LC_CTR 0x46#define LC_XC 0x47#define LC_YC 0x48#define LC_COEF 0x49#define LC_RADI 0x4A#define LC_COEFB 0x4B #define LC_COEFR 0x4C#define FixGain 0x4D#define AREF0 0x4E#define AREF1 0x4F#define AREF2 0x50#define AREF3 0x51#define AREF4 0x52#define AREF5 0x53#define AREF6 0x54#define AREF7 0x55#define UFix 0x60#define VFix 0x61#define AWBb_blk 0x62#define AWB_Ctrl0 0x63#define DSP_Ctrl1 0x64#define DSP_Ctrl2 0x65#define DSP_Ctrl3 0x66#define DSP_Ctrl4 0x67#define AWB_bias 0x68#define AWBCtrl1 0x69#define AWBCtrl2 0x6A#define AWBCtrl3 0x6B#define AWBCtrl4 0x6C#define AWBCtrl5 0x6D#define AWBCtrl6 0x6E#define AWBCtrl7 0x6F#define AWBCtrl8 0x70#define AWBCtrl9 0x71#define AWBCtrl10 0x72#define AWBCtrl11 0x73#define AWBCtrl12 0x74#define AWBCtrl13 0x75#define AWBCtrl14 0x76#define AWBCtrl15 0x77#define AWBCtrl16 0x78#define AWBCtrl17 0x79#define AWBCtrl18 0x7A#define AWBCtrl19 0x7B#define AWBCtrl20 0x7C#define AWBCtrl21 0x7D #define GAM1 0x7E#define GAM2 0x7F#define GAM3 0x80#define GAM4 0x81#define GAM5 0x82#define GAM6 0x83#define GAM7 0x84#define GAM8 0x85#define GAM9 0x86#define GAM10 0x87#define GAM11 0x88#define GAM12 0x89#define GAM13 0x8A#define GAM14 0x8B#define GAM15 0x8C#define SLOP 0x8D#define DNSTh 0x8E#define EDGE0 0x8F#define EDGE1 0x90#define DNSOff 0x91#define EDGE2 0x92#define EDGE3 0x93#define MTX1 0x94#define MTX2 0x95#define MTX3 0x96#define MTX4 0x97#define MTX5 0x98#define MTX6 0x99#define MTX_Ctrl 0x9A#define BRIGHT 0x9B#define CNST 0x9C#define UVADJ0 0x9E#define UVADJ1 0x9F#define SCAL0 0xA0#define SCAL1 0xA1#define SCAL2 0xA2#define SDE 0xA6#define USAT 0xA7#define VSAT 0xA8#define HUECOS 0xA9#define HUESIN 0xAA#define SIGN 0xAB#define DSPAuto 0xAC//寄存器配置表static Register_Info Sensor_Config[] ={{COM7, 0x80}, //恢复默认设置{COM10, 0x02},//激活场中断/*输出格式,分辨率配置*/{CLKRC, 0x00}, /*clock config*/{COM7, 0x00}, /*VGA RGB422 */{HSTART, 0x23}, //VGA = 0x23,QVGA = 0x3F {HSIZE, 0xA0}, //VGA = 0xA0,QVGA = 0X50{VSTRT, 0x07}, //VGA = 0x07,QVGA = 0X03{VSIZE, 0xf0}, //VGA = 0xf0,QVGA = 0X78{HREF, 0x00},{HOutSize, 0xA0},{VOutSize, 0xF0},{EXHCH, 0x00},/*DSP control*/{TGT_B, 0x7f},{FixGain, 0x09},{AWB_Ctrl0, 0xe0},{DSP_Ctrl1, 0xff},{DSP_Ctrl2, 0x20},{DSP_Ctrl3, 0x00},{DSP_Ctrl4, 0x00},/*AGC AEC AWB*/{COM8, 0xf0},{COM4, 0x41}, /*Pll AEC CONFIG,对输出颜色有影响*/{COM6, 0xc5},{COM9, 0x21},{AEW, 0x34},{AEB, 0x3c},{VPT, 0xa1},{EXHCL, 0x00},{AWBCtrl3, 0xaa},{AWBCtrl1, 0x5d},{EDGE1, 0x0a},{DNSOff, 0x01},{MTX1, 0x5f},{MTX2, 0x53},{MTX3, 0x11},{MTX4, 0x1a},{MTX5, 0x3d},{MTX6, 0x5a},{MTX_Ctrl, 0x1e},{BRIGHT, 0x00},{CNST, 0x25},{USAT, 0x65},{VSAT, 0x65},{UVADJ0, 0x81},{SDE, 0x20}, //二值化,个人需求,根据寄存器手册进行配置,这个寄存器还有其他功能,可以多看看/*GAMMA config*/{GAM1, 0x0c},{GAM2, 0x16},{GAM3, 0x2a},{GAM4, 0x4e},{GAM5, 0x61},{GAM6, 0x6f},{GAM7, 0x7b},{GAM8, 0x86},{GAM9, 0x8e},{GAM10, 0x97},{GAM11, 0xa4},{GAM12, 0xaf},{GAM13, 0xc5},{GAM14, 0xd7},{GAM15, 0xe8},{SLOP, 0x20},{HUECOS, 0x80},{HUESIN, 0x80},{DSPAuto, 0xff},{DM_LNL, 0x00},{BDBase, 0x99},{BDMStep, 0x03},{LC_RADI, 0x00},{LC_COEF, 0x13},{LC_XC, 0x08},{LC_COEFB, 0x14},{LC_COEFR, 0x17},{LC_CTR, 0x05},/*Horizontal mirror image*/{COM3, 0xd0},//垂直翻转,水平翻转/*night mode auto frame rate control*/// {COM5, 0xf5}, /*在夜视环境下,自动降低帧率,保证低照度画面质量*/{COM5, 0x31}, /*夜视环境帧率不变*/}//部分缩写解释:AGC(Auto maticGain Control):自动增益控制,AWB:自动白平衡,AEC(automatic exposure control):自动曝光控制,BLC(back light control):背光补偿
个人总结
OV7725的基本启动配置主要有时钟、分辨率、输出格式。
部分需要关注的寄存器:
COM3:可以换数据输出顺序,比如可以RGB顺序,也可以BGR顺序
COM4:PLL设置,影响帧率
COM8:AGC,AWB,WEC使能
COM10:行中断(HSYNC),场中断使能
还有上面分辨率配置那一块是很必要配置的
再说说我替换NT99141遇到的坑(不熟悉代码流程(开发板配套demo)带来的坑最多):
1…未激活场中断(或者说帧中断)。开发板缓存的采集依据估计是根据帧中断来的,开启过后,LCD上能够显示图像轮廓
2.XCLK输入超范围,采集图像不准确
3.寄存器配置PLL带来PCLK不匹配,图像也不准确
4.分辨率配置错误带来图像大小不准确
5.以为NT99141输出的是RGB565格式,导致LCD看到的图像是绿色的图像轮廓,这是坑我坑的最久的,被同事误导了一波,还得靠自己啊。
关于OV7725的其他功能,参见官方《OV7725 Software Application Note》,主要是摄像头的微调,白平衡,曝光量,帧率之类的。