@
目录前言
整理关于T107的所有底层驱动
底层驱动结构
graph LR XinPian[T107芯片]-->SXT(摄像头) XinPian-->Ping(LCD屏) XinPian-->SDT(手电筒,闪光灯) XinPian-->MaDa(马达) XinPian-->AJD(按键灯) XinPian-->JP(键盘) XinPian-->FM(FM) XinPian-->HYP(合音频) Ping-->TPPing(TP屏) Ping-->NoTPPing(非TP屏)摄像头
作用
摄像头(webcam)一般具有视频摄像/传播和静态图像捕捉等基本功能,它是借由镜头采集图像后,由摄像头内的感光组件电路及控制组件对图像进行处理并转换成电脑所能识别的数字信号,然后借由并行端口或USB连接输入到芯片后由软件再进行图像还原。
移植
添加GC032A
将要移植的sensor_gc032A.c放到工程目录下面 ...\Prj_mk\FF605V01_QVGA_64MB_CF1_CF833_0002690目录下:
在...\MS_Customize\source\product\config\ums9117_barphone\sensor_cfg.c文件里面
//sensor_cfg.c
//首先声明
extern const SENSOR_INFO_T g_GC032A_yuv_info;
//添加摄像头驱动表
LOCAL const SENSOR_INFO_T* main_sensor_infor_tab[]=
{
//接着后面添加,避免新添加的影响以前的摄像头
#if defined(SENSOR_SP0A39) //其他摄像头
&g_SP0A39_yuv_info,
#endif
#if defined(SENSOR_GC032A)
&g_GC032A_yuv_info,
#endif
PNULL
};
在make\custom_drv\custom_drv.mk文件添加对应的sensor_gc032A.c文件:
# IMG SENSOR DRIVER
SOURCES += sensor_gc0312.c \
sensor_gc032A.c \ #新增摄像头.c文件
摄像头初始化
在...\Prj_mk\FF605V01_QVGA_64MB_CF1_CF833_0002690\sensor_gc032A.c文件:
//这里进行摄像头参数的初始化设置
//每一项的含义以及对应修改需要参考DateSheet或者其他项目已添加过的.c文件。
__align(4) const SENSOR_REG_T GC032A_YUV_640X480[] =
{
/*System*/
{0xf3,0x83},
{0xf5,0x0c},
{0xf7,0x01},
{0xf8,0x01},//PLL 01 //03
{0xf9,0x4e},
{0xfa,0x10},
{0xfc,0x02},
{0xfe,0x02},
{0x81,0x03},
...
}
摄像头参数调整
输出角度校准
在对应的工程目录下面的.mk文件修改
// 如FF615V20_QQVGA_128MB_DWE_0006885.mk 文件里面
//摄像头旋转角度
CAMERA_SENSOR_ANGLE = 0 ### Sensor Angle
# Option1:0
# Option2:90
//摄像头输出的角度调整
SENSOR_INSTALL_ANGEL = 0 ### Sensor install Angle
# Option1:0
# Option2:90
# Option2:180
# Option2:270
摄像头类型选择
在对应的工程目录下面的.mk文件修改
//摄像头类型选择 默认NONE 有特殊需要才增加
MOTION_SENSOR_TYPE = NONE ### MOTION SENSOR SUPPORT:
# Option1:NONE
# Option2:ADXL346
//摄像头类型选择 默认NONE 有特殊需要才增加
MOTION_SENSOR_TYPE_OPTICAL = NONE ### MOTION SENSOR OPTICAL SUPPORT:
# Option1:NONE
# Option2:LTR501
问题
摄像头无法打开
-
打开摄像头失败时,是否有提示open failed
- 如果没有打印 确认摄像头添加是否正确
- 如果有打印 则表明有调用到摄像头,是其他问题导致
-
确认通过命令是否能读取到摄像头的IC
// sensor_gc032A.c 文件里面
LOCAL uint32 GC032A_Identify(uint32 param)
{
...
ret = GC032A_ReadReg(reg[i]); // 查看该函数返回值是否正常
...
}
- 确认摄像头的IC是什么(什么型号摄像头)
// sensor_gc032A.c 文件里面
LOCAL uint32 GC032A_Identify(uint32 param);
// 确认读取到IC和我们当前设置的IC是否一致
// 如GC032A_Identify: it is GC032A 表示当前型号是GC032A
LCD屏
作用
屏幕是一种用于显示图像及色彩的设备或者电器,用户可以从屏幕上面获取到展示的信息。
移植
添加JD9851
将要移植的tft_JD9851.c放到工程目录下面 ...\Prj_mk\Watch_demo_xm\Base_Resource目录下:
在对应的工程目录下面...\Prj_mk\Watch_demo_xm\Base_Driver_Revise添加JD9851支持
// Driver.mk 文件里面
####----LCD----####
LCD_JD9851 = TRUE
在对应的工程目录下面...\Prj_mk\FF620V01_48X128_QVGA_6872 设置通讯类型
// FF620V01_48X128_QVGA_6872.mk 文件里面
// 当前这款使用SPI通讯
MAINLCM_INTERFACE = SPI #### LCM interface support
# Option1:LCM
# Option2:SPI
# Option3:NONE
// 根据实际硬件接线
// 这里2DATA表示使用2条数据线 1DATA是指使用1条数据线
LCD_SPI = 4WIRE_8BIT_1DATA #### LCD SPI mode support
# Option1:3WIRE_9BIT_1DATA
# Option2:3WIRE_9BIT_2DATA
# Option3:4WIRE_8BIT_1DATA
# Option4:4WIRE_8BIT_2DATA
在...\MS_Customize\source\product\config\ums9117_barphone目录下
//lcm_cfg_info.c 文件里面添加到驱动表里
LOCAL LCM_CFG_INFO_T s_main_lcm_cfg_tab[] = {
...
#ifdef LCD_JD9851
// LCD_DRV_ID_JD9851 该值是根据数据手册该型号的DEV_ID在lcm_cfg.h里设置的
{LCD_DRV_ID_JD9851, 0, 0, 0, SPI1_0_CS0, SPI1_0_CD, LCD_CTRL_MODULE_SPI, (LCD_SPEC_T_PTR)&g_lcd_JD9851, LCD_BACKLIGHT_TYPE_BB_ANALOG, 0, 0, 0, PNULL},
#endif
...
};
LCD屏初始化
在...\Prj_mk\Watch_demo_xm\Base_Resource\tft_JD9851.c文件:
//这里进行LCD屏参数的初始化设置
//每一项的含义以及对应修改需要参考DateSheet或者其他项目已添加过的.c文件。
LOCAL void JD9851_TP_driver(void)
{
LCD_Reset();
LCD_Delayms(120);
//Password
LCD_CtrlWrite_JD9851_TP(0xDF);
LCD_DataWrite_JD9851_TP(0x98);
LCD_DataWrite_JD9851_TP(0x51);
LCD_DataWrite_JD9851_TP(0xE9);
LCD_Delayms(1);
//PAGE0
LCD_CtrlWrite_JD9851_TP(0xDE);
LCD_DataWrite_JD9851_TP(0x00);
LCD_Delayms(1);
...
}