• 请先下载文档sensor 移植指南,以及imx586规格书,imx586寄存器excel。读一遍
  • 跟厂商要一份imx586的初始化序列
  • 驱动代码(只是能驱动, 并不包含isa调节功能)

由于本次的sensor转接板是公司自制, 所以先测试硬件通信。

1. I2C通信

i2c_write 0x1 0x34 0x0100  0x01 2 1 
i2c_read 0x1 0x34 0x0100  0x0100 2 1 1

先写后读, 就可以判断I2C是不是写成功

2. 驱动修改

2.1  基于imx291的驱动(imx291_sensor_ctl.c )进行修改, 遵循FAE给的初始化序列修改寄存器即可,示意代码如下(太长了只能截取部分)

const unsigned short IMX291_SETTING_SHORT[]=
{//6000*8000 change on 20200225 , receive documents from the saler
//EXCK_FREQ 24MHZ ==
0x0136, 0x18,
0x0137, 0x00,
//EXCK_FREQ 24MHZ ==
0x3C7E, 0x01,
0x3C7F, 0x03,
0x0111, 0x02,
//not in the handbook
0x3702, 0x1F,
0x3706, 0x17,
0x3707, 0x6F,
0x3C00, 0x10,
0x3C01, 0x10,
0x3C02, 0x10,
0x3C03, 0x10,
0x3C04, 0x10,
0x3C05, 0x01,
0x3C06, 0x00,
0x3C07, 0x00,
0x3C08, 0x03,
0x3C09, 0xFF,
0x3C0A, 0x01,
0x3C0B, 0x00,
0x3C0C, 0x00,
0x3C0D, 0x03,
0x3C0E, 0xFF,
0x3C0F, 0x20,
0x4D14, 0xA6,
0x4D29, 0xB0,
0x4D45, 0x56,
0x4D49, 0x00,
0x4D53, 0xCF,
0x4D55, 0x00,
0x4D5C, 0xA6,
0x4D71, 0xB0,
0x4D8D, 0x86,
0x4D91, 0x00,
0x4D99, 0x3C,
0x4D9B, 0x17,
0x4D9D, ...

2.2按照《sensor调试指南》修改文件,主要集中在sample_comm_vi.c , sample_comm_isp.c

  • 下面为驱动程序分析

原文件为sample_comm_isp.c

HI_S32 SAMPLE_COMM_ISP_Sensor_Regiter_callback(ISP_DEV IspDev, HI_U32 u32SnsId)
{ALG_LIB_S stAeLib;ALG_LIB_S stAwbLib;const ISP_SNS_OBJ_S* pstSnsObj;HI_S32    s32Ret = -1;if (MAX_SENSOR_NUM <= u32SnsId){SAMPLE_PRT("invalid sensor id: %d\n", u32SnsId);return HI_FAILURE;}pstSnsObj = SAMPLE_COMM_ISP_GetSnsObj(u32SnsId);if (HI_NULL == pstSnsObj){SAMPLE_PRT("sensor %d not exist!\n", u32SnsId);return HI_FAILURE;}

跳入SAMPLE_COMM_ISP_GetSnsObj,发现原来是缺少了stSnsImx586Obj;所以我在这里添加了相应的代码

    switch (enSnsType){case SONY_IMX290_MIPI_2M_30FPS_12BIT:case SONY_IMX290_MIPI_2M_30FPS_12BIT_WDR2TO1:return &stSnsImx290Obj;/*添加的代码*/case SONY_IMX586_MIPI_2M_30FPS_12BIT:            return &stSnsImx586Obj;...}

该结构体定义在

imx290_cmos.c ; 添加stSnsImx586Obj

ISP_SNS_OBJ_S stSnsImx586Obj =
{.pfnRegisterCallback    = sensor_register_callback,.pfnUnRegisterCallback  = sensor_unregister_callback,.pfnStandby             = imx291_standby,.pfnRestart             = imx291_restart,.pfnMirrorFlip          = HI_NULL,.pfnWriteReg            = imx291_write_register,.pfnReadReg             = imx291_read_register,.pfnSetBusInfo          = imx291_set_bus_info,.pfnSetInit             = sensor_set_init
};

定义在.c文件所有肯定是外部引用,extern , 位置

hi_sns_ctrl.h ; 同理添加 extern ISP_SNS_OBJ_S stSnsImx586Obj

extern ISP_SNS_OBJ_S stSnsMn34220Obj;
extern ISP_SNS_OBJ_S stSnsImx377Obj;
extern ISP_SNS_OBJ_S stSnsImx299Obj;
extern ISP_SNS_OBJ_S stSnsImx477Obj;
extern ISP_SNS_OBJ_S stSnsImx299SlvsObj;
extern ISP_SNS_OBJ_S stSnsImx290Obj;
extern ISP_SNS_OBJ_S stSnsImx327Obj;
extern ISP_SNS_OBJ_S stSnsImx334Obj;
extern ISP_SNS_OBJ_S stSnsOV2718Obj;
extern ISP_SNS_OBJ_S stSnsCmv50000Obj;
extern ISP_SNS_OBJ_S stSnsImx277SlvsObj;
extern ISP_SNS_OBJ_S stSnsImx117Obj;
extern ISP_SNS_OBJ_S stSnsImx290SlaveObj;
extern ISP_SNS_OBJ_S stSnsImx334SlaveObj;
extern ISP_SNS_OBJ_S stSnsImx226Obj;
extern ISP_SNS_OBJ_S stSnsImx335Obj;
extern ISP_SNS_OBJ_S stSnsImx458Obj;
/*添加的代码*/
extern ISP_SNS_OBJ_S stSnsImx586Obj;

3. 使用示波器测量 Power信号, VANA, VDIG, VIF, 三个信号电平符合要求

4. 输入时钟信号INCK, 按照文档,该时钟输入应为6-27MHz.

4.1修改sys_config.c,  我这里用的是27M.

static BUS_TYPE parse_sensor_bus_type(char *name)
{unsigned int len;BUS_TYPE bus_type = BUS_TYPE_I2C;len = SENSOR_NAME_LEN;if (   (0 == strncmp("imx377", name, len))|| (0 == strncmp("imx334", name, len))|| (0 == strncmp("imx477", name, len))|| (0 == strncmp("imx290", name, len))|| (0 == strncmp("imx290_slave", name, len))|| (0 == strncmp("imx299", name, len))|| (0 == strncmp("imx117", name, len))
//添加代码|| (0 == strncmp("imx586", name, len))){bus_type = BUS_TYPE_I2C;}else if ((0 == strncmp("imx299_slvs", name, len))|| (0 == strncmp("cmv50000", name, len))|| (0 == strncmp("imx277_slvs", name, len))|| (0 == strncmp("imx117", name, len))|| (0 == strncmp("imx226", name, len))){bus_type = BUS_TYPE_SPI;}else{printk("FUNC:%s line:%d  SNS:[%s] is not supported !\n", __FUNCTION__,__LINE__, name);bus_type = BUS_TYPE_I2C;}return bus_type;
}
/*
0x0: 74.25MHz; 0x1: 72MHz;0x2: 54MHz;0x3: 50MHz;0x4: 24MHz;0x6: 32.4MHz;
0x8: 37.125MHz;0x9: 36MHz;0xA: 27MHz;0xB: 25MHz;0xC: 12MHz;
*/
static unsigned int parse_sensor_clock(char *name)
{unsigned int clock = 0x0;unsigned int len;len = SENSOR_NAME_LEN;if ( (0 == strncmp("imx377", name, len))|| (0 == strncmp("imx334", name, len))|| (0 == strncmp("imx477", name, len))|| (0 == strncmp("imx299", name, len))|| (0 == strncmp("cmv50000", name, len))){clock = 0x4;}else if (0 == strncmp("imx290", name, len)){clock = 0x8;}else if (0 == strncmp("imx290_slave", name, len)){clock = 0x0;}else if ( (0 == strncmp("imx299_slvs", name, len))|| (0 == strncmp("imx277_slvs", name, len))|| (0 == strncmp("imx117", name, len))|| (0 == strncmp("imx226", name, len))){clock = 0x1;}
//else if(0 == strncmp("imx586", name, len)){   //27Mclock = 0xA;}else{printk("FUNC:%s line:%d  SNS:[%s] is not supported !\n", __FUNCTION__, __LINE__, name);return clock;}return clock;
}

将编译好的sys_config.ko 拷贝到海思的/usr/ko目录下

4.2 运行脚本

cd /usr/ko
./load3519av100 -r
./load3519av100 -i sensor0 imx586

5 使用示波器测量复位信号:CMOS_RSTN,  mipi data信号

6. isa 算法调节

海思Hi3519AV100sensor移植之二-- imx586 sensor相关推荐

  1. 海思3559U-Boot移植(二):更换新的SPI Nand Flash

    前言:   在开发板上的折腾终归是小打小闹,真正的实践还需要从实际项目和自己参考画的板子选的器件入手,记录更换未经SDK包测试过的国产FLASH调试记录和踩到的坑,重点参考SDK文档包下的Releas ...

  2. 海思3559移植yolov3

    此人博客上有完整教程: https://blog.csdn.net/avideointerfaces/article/category/8762084 海思3559移植yolov3 海思AI芯片(Hi ...

  3. 海思Hi3559AV100移植Qt5.9.9(一)

    目录 前言 1 基础环境搭建 1.1 概述 1.2 Ubuntu虚拟机安装 1.2.1 准备 1.2.2 安装 1.3 软件包安装 2 安装编译SDK 2.1 准备 2.2 解压缩SDK 2.3 展开 ...

  4. 海思HI3516移植使用AP6181 BCM43362

    备注 平台:Hi3516dv300 WiFi:AP6181 (AP6XXX应该都差不多,我猜的):SDIO2.0接口(时钟设置在50M左右,其他 SDIO3.0的设置在150M左右,电压设置在1.8V ...

  5. 海思Hi3536移植QT5.9.8教程

    参考文章: <https://blog.csdn.net/understand125/article/details/87968043> <https://blog.csdn.net ...

  6. mysql移植海思_海思Hi3518EV200(5)图像sensor驱动开发

    1. sensor开发框图 2. 设备驱动加载及硬件系统配置 load3518e脚本主要是用来配置硬件系统的参数(引脚复用.sensor时钟.VI时钟)加载驱动(.ko),包括访问sensor的I2C ...

  7. 海思Hi3516移植opencv以及错误调试

    opencv移植总结------------------------------------------------------------ 使用cmake-gui------------------ ...

  8. nginx 在海思平台移植编译

    交叉编译移植到arm板中 1.准备源代码,依赖库 tar -zxvf zlib-1.2.11.tar.gz tar -zxvf openssl-1.1.1d.tar.gz tar -jxvf pcre ...

  9. 海思3559kernel移植(一):一路next的默认模式

    前言   安装环境篇过后的sdk包里实际上并没有kernel的源码,这点和开发说明文档里是有出入的,不过没关系,sdk包里的readme还是给了我们方向   主要参考两个文档   XXX/Hi3559 ...

  10. 海思Hi3559AV100移植Qt5.9.1

    目录 一.交叉编译QT库 二.安装QT Creator 三.部署开发板环境 一.交叉编译QT库         1. cd qt-everywhere-opensource-src-5.9.1/qtb ...

最新文章

  1. nodejs读取excel内容批量替换并生成新的html和新excel对照文件
  2. leetcode 110. 平衡二叉树
  3. css3新特性总结(视觉表现方面)
  4. Cloud for Customer的mobile setting前台实现
  5. ubuntu18 安装redis-manager
  6. 微信支付 签名算法 sign node实现
  7. 斐波那契 (Fibonacci)数列
  8. 特征向量的辨析(数学,机器学习)
  9. eclipse中要让一个 Java 源文件打开时编码格式为 UTF-8
  10. Google Python Style Guide
  11. mysql-5.7.19-winx64_mysql5.7.19 winx64安装配置方法图文教程(win10)
  12. android 数据存储之 Shared Preferences
  13. VMware下Hadoop 2.4.1完全分布式集群平台安装与设置
  14. AndroidStudio修改布局文件运行无效
  15. NotFoundError: Key v1_1 not found in checkpoint
  16. IBM PureApplication System如何使用DNS将工作负载部署到数据中心的网络上
  17. 渗透测试必备google插件
  18. 人工智能在石油勘探开发中的应用及发展趋势(总结部分)
  19. context.getContentResolver().query()详细用法详解
  20. STM32F411核心板固件库开发(二) USART配置

热门文章

  1. Apache OpenOffice-java调用时的问题总结
  2. 推荐给java新手的JAVA零基础入门书籍
  3. MP3 Lame 转换 参数 设置(转)
  4. 【CarMaker学习笔记】T型路口多车运行实验
  5. 《现代操作系统》知识点整理
  6. svn之删除文件并释放空间
  7. bilibili开源弹幕库UML类图
  8. 第一财经周刊:硅谷就是这样
  9. NLP 推荐算法 论文+博客整理
  10. 学科分类号查询 计算机工程,学科 分类号查询表.doc