A20平台增加camera

2023-10-28 19:30
文章标签 平台 增加 camera a20

本文主要是介绍A20平台增加camera,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

驱动采用模块加载的方式
1) 模块加载的文件在android中配置(修改点)
\A20-T2\android\device\softwinner\wing-n71j\init.sun7i.rc

# csi moduleinsmod /system/vendor/modules/videobuf-core.koinsmod /system/vendor/modules/videobuf-dma-contig.koinsmod /system/vendor/modules/camera.ko# insmod_modules camerainsmod /system/vendor/modules/nt99141.ko //需要修改的设备驱动insmod /system/vendor/modules/sunxi_csi0.ko //csi驱动

2) 修改android使用权限,video1 值可以变化,可能是video0 (一般不用修改)
\A20-T2\android\device\softwinner wing-n71j\ueventd.sun7i.rc这里写图片描述
这里写图片描述
3) 修改camera.cfg配置文件,设置摄像头的属性 (一般不用修改)
板子上的地址/system/etc/camera.cfg
系统地址:device/softwinner/wing-k70/configs/camera.cfg

;——————————————————————————-
; driver device name
;——————————————————————————-
camera_device = /dev/video0
摄像头挂载的设备节点
4) 修改media_profiles.xml配置录像参数 板子上的地址/system/etc/media_profiles.xml
系统地址:device/softwinner/wing-k70/configs/media_profiles.xml (一般不用修改)
5) 参数设置完毕,剩下的需要修改sys_config.fex (需要修改)
Linux kernel 给android的配置,使用哪个摄像头。
Z:\A20-T2\lichee\tools\pack\chips\sun7i\configs\android\wing-n71j\sys_config.fex
【配置如下】

;--------------------------------------------------------------------------------
;csi gpio configuration
;csi_if: 0:hv_8bit 1:hv_16bit 2:hv_24bit 3:bt656 1ch 4:bt656 2ch 5:bt656 4ch
;csi_mode: 0:sample one csi to one buffer 1:sample two csi to one buffer
;csi_dev_qty: The quantity of devices linked to csi interface
;csi_vflip: flip in vertical direction 0:disable 1:enable
;csi_hflip: flip in horizontal direction 0:disable 1:enable
;csi_stby_mode: 0:not shut down power at standby 1:shut down power at standby
;csi_iovdd: camera module io power , pmu power supply
;csi_avdd:  camera module analog power , pmu power supply
;csi_dvdd:  camera module core power , pmu power supply
;pmu_ldo3:  fill "axp20_pll"
;pmu_ldo4:  fill "axp20_hdmi"
;fill "" when not using any pmu power supply
;csi_flash_pol: the active polority of the flash light IO 0:low active 1:high active
;--------------------------------------------------------------------------------
[camera_list_para]
camera_list_para_used   = 1
ov7670                  = 0
nt99141                 = 1  //选择某个摄像头
gc0308                  = 0
gt2005                  = 0
hi704                   = 0
sp0838                  = 0
mt9m112                 = 0
mt9m113                 = 0
gc2035                  = 0
ov2655                  = 0
hi253                   = 0
gc0307                  = 0
mt9d112                 = 0
ov5640                  = 0
gc2015                  = 0
ov2643                  = 0
gc0329                  = 0
gc0309                  = 0
tvp5150                 = 0
s5k4ec                  = 0
ov5650_mv9335           = 0
siv121d                 = 0;--------------------------------------------------------------------------------
;csi gpio configuration
;csi_if: 0:hv_8bit 1:hv_16bit 2:hv_24bit 3:bt656 1ch 4:bt656 2ch 5:bt656 4ch
;csi_mode: 0:sample one csi to one buffer 1:sample two csi to one buffer
;csi_dev_qty: The quantity of devices linked to csi interface
;csi_vflip: flip in vertical direction 0:disable 1:enable
;csi_hflip: flip in horizontal direction 0:disable 1:enable
;csi_stby_mode: 0:not shut down power at standby 1:shut down power at standby
;csi_iovdd: camera module io power , pmu power supply
;csi_avdd:  camera module analog power , pmu power supply
;csi_dvdd:  camera module core power , pmu power supply
;pmu_ldo3:  fill "axp20_pll"
;pmu_ldo4:  fill "axp20_hdmi"
;fill "" when not using any pmu power supply
;csi_flash_pol: the active polority of the flash light IO 0:low active 1:high active
;--------------------------------------------------------------------------------[csi0_para]      // CSI0 接口使用摄像头的配置
csi_used            = 1
csi_dev_qty         = 2  //数量2个
csi_stby_mode       = 0
csi_mname           = "nt99141"
csi_twi_id          = 1
csi_twi_addr        = 0x54  // I2C地址
csi_if              = 0
csi_vflip           = 0
csi_hflip           = 0
csi_iovdd           = "axp20_hdmi"
csi_avdd            = ""
csi_dvdd            = ""
csi_vol_iovdd       = 3300
csi_vol_dvdd        = 
csi_vol_avdd        = 
csi_flash_pol       = 0csi_mname_b         =   // 第二个摄像头的配置,若不存在,放空
csi_twi_id_b        = 
csi_twi_addr_b      = 
csi_if_b            = 
csi_vflip_b         = 
csi_hflip_b         = 
csi_iovdd_b         = 
csi_avdd_b          = 
csi_dvdd_b          = 
csi_vol_iovdd_b     =
csi_vol_avdd_b      = 
csi_vol_dvdd_b      = 
csi_flash_pol_b     = 
// 以下为摄像头的硬件GPIO口配置,需要HW提供
csi_pck             = port:PE00<3><default><default><default>
csi_ck              = port:PE01<3><default><default><default>
csi_hsync           = port:PE02<3><default><default><default>
csi_vsync           = port:PE03<3><default><default><default>
csi_d0              = port:PE04<3><default><default><default>
csi_d1              = port:PE05<3><default><default><default>
csi_d2              = port:PE06<3><default><default><default>
csi_d3              = port:PE07<3><default><default><default>
csi_d4              = port:PE08<3><default><default><default>
csi_d5              = port:PE09<3><default><default><default>
csi_d6              = port:PE10<3><default><default><default>
csi_d7              = port:PE11<3><default><default><default>
csi_reset           = port:PH14<1><default><default><0>
csi_power_en        = port:PH16<1><default><default><0>
csi_stby            = port:PH19<1><default><default><0>
csi_flash           =
csi_af_en           =
csi_reset_b         = port:PH13<1><default><default><0>
csi_power_en_b      = port:PH16<1><default><default><0>
csi_stby_b          = port:PH18<1><default><default><0>
csi_flash_b         =
csi_af_en_b         =[csi1_para]   // CSI1 接口使用摄像头的配置
csi_used            = 0
csi_dev_qty         = 1
csi_stby_mode       = 0
csi_mname           = "gc0308"
csi_if              = 0
csi_iovdd           = "axp20_pll"
csi_avdd            = ""
csi_dvdd            = ""
csi_vol_iovdd       = 2800
csi_vol_dvdd        = 
csi_vol_avdd        = 
csi_vflip           = 0
csi_hflip           = 0
csi_flash_pol       = 0
csi_facing          = 1csi_twi_id          = 1
csi_twi_addr        = 0x42
csi_pck             = port:PG00<3><default><default><default>
csi_ck              = port:PG01<3><default><default><default>
csi_hsync           = port:PG02<3><default><default><default>
csi_vsync           = port:PG03<3><default><default><default>
csi_d0              = port:PG04<3><default><default><default>
csi_d1              = port:PG05<3><default><default><default>
csi_d2              = port:PG06<3><default><default><default>
csi_d3              = port:PG07<3><default><default><default>
csi_d4              = port:PG08<3><default><default><default>
csi_d5              = port:PG09<3><default><default><default>
csi_d6              = port:PG10<3><default><default><default>
csi_d7              = port:PG11<3><default><default><default>
csi_reset           = port:PH13<1><default><default><0>
csi_power_en        = port:PH16<1><default><default><0>
csi_stby            = port:PH19<1><default><default><0>

6) 增加驱动 (需要修改)以上分几个步骤说明
Z:\A20-T2\lichee\linux-3.4\drivers\media\video\sunxi_csi\device
init.sun7i.rc文件中增加的驱动如下图所示,与摄像头相关的驱动有3个
camera.ko sun7i_csi0.ko 和nt99141,ko,分别对应下面目录中的驱动
这里写图片描述
lichee\linux-3.4\drivers\media\video\sunxi_csi
的目录结构如下:
这里写图片描述
camera_detector:对摄像头的检测
csi0 csi1:
COMS Sensor Interface:CSI接口通常从COMS Sensor,Video Encoder和其它视频输出设备收集数据。Camera Serial Interface,相机串行接口,MIPI接口之一。
device:摄像头设备驱动
Kconfig:config文件,用于选择配置摄像头

第一步:修改camera_detector中camera_list.c
增加添加的摄像头,例如:

#define __NT99141__
static void camera_pwr_on_nt99141(__u32 list_index, __camera_info_t *camera_info)
{    camera_gpio_set_status(camera_info->stby_pin, 1);camera_gpio_set_status(camera_info->reset_pin, 1);//power supplycamera_gpio_write(camera_info->stby_pin, camera_list[list_index].CSI_STBY_ON);camera_gpio_write(camera_info->reset_pin, camera_list[list_index].CSI_RST_ON);mdelay(1);clk_enable(camera_info->module_clk);mdelay(10);camera_gpio_write(camera_info->pwr_pin, camera_list[list_index].CSI_PWR_ON);mdelay(10);if(camera_info->dvdd) {regulator_enable(camera_info->dvdd);mdelay(10);}if(camera_info->avdd){regulator_enable(camera_info->avdd);mdelay(10);}if(camera_info->iovdd) {regulator_enable(camera_info->iovdd);mdelay(10);}//standby off iocamera_gpio_write(camera_info->stby_pin, camera_list[list_index].CSI_STBY_OFF);mdelay(10);camera_gpio_write(camera_info->reset_pin, camera_list[list_index].CSI_RST_OFF);mdelay(10);camera_gpio_write(camera_info->reset_pin, camera_list[list_index].CSI_RST_ON);mdelay(10);camera_gpio_write(camera_info->reset_pin, camera_list[list_index].CSI_RST_OFF);mdelay(10);    
}
static void camera_pwr_off_nt99141(__u32 list_index, __camera_info_t *camera_info)
{    camera_gpio_write(camera_info->stby_pin, camera_list[list_index].CSI_STBY_ON);mdelay(10);//reset on iocamera_gpio_write(camera_info->reset_pin, camera_list[list_index].CSI_RST_ON);mdelay(10);//inactive mclk after power off//power supply offif(camera_info->iovdd) {regulator_disable(camera_info->iovdd);}if(camera_info->avdd) {regulator_disable(camera_info->avdd);}if(camera_info->dvdd) {regulator_disable(camera_info->dvdd);}camera_gpio_write(camera_info->pwr_pin, camera_list[list_index].CSI_PWR_OFF);mdelay(10);//standby of ioclk_disable(camera_info->module_clk);//set the io to hi-zcamera_gpio_set_status(camera_info->reset_pin, 0);//set the gpio to input// camera_gpio_set_status(camera_info->stby_pin, 0);//set the gpio to input
}static __s32 camera_detect_nt99141(__u32 list_index, struct i2c_adapter *i2c_adap)
{int ret;struct regval_list regs;__u32 i2c_addr  = camera_list[list_index].i2c_addr;__u32 addr_step = camera_list[list_index].REG_ADDR_STEP;__u32 data_step = camera_list[list_index].REG_DATA_STEP;list_print("try to detect nt99141 ...addr_step = %d data_step = %d\n", addr_step, data_step);return 0;regs.reg_num[0] = 0x30;regs.reg_num[1] = 0x21;ret = camera_i2c_read(i2c_adap, regs.reg_num, regs.value, i2c_addr, addr_step, data_step);if (ret < 0) {list_print("gaoliang no read \n");return ret;}list_print("gaoliang read value = 0x%d \n", regs.value[0]);if (regs.value[0] != 0x56) {return -ENODEV;}list_print("detect nt99141 success!!\n");return 0;
}
__camera_list_t camera_list[MAX_CAMERA_LIST_ITEM]中增加nt99141CAMERA_LIST_ITEM_INIT(nt99141,       2, 1, 0x54, 1, 0, 0, 1, 1, 0),

第二步:修改CSI驱动,目前有两路CSI,具体使用哪路在配置文件中设置
\lichee\tools\pack\chips\sun7i\configs\android\wing-n71j\sys_config.fex
一般驱动不做修改
第三步:在device文件夹中增加你所添加的驱动。例如添加nt99141
先修改Makefile增加你所添加的驱动
obj-$(CONFIG_CSI_NT99141) += nt99141.o
再增加驱动原始文件
第四步:修改Kconfig

config CSI_NT99141tristate "OmniVision NT99141 5M sensor support"default mdepends on I2C && VIDEO_V4L2select  CSI_DEV_SEL---help---This is a Video4Linux2 sensor-level driver for the OmniVisionNT99141 5M camera.

剩下就是测试,调试驱动文件了。

这篇关于A20平台增加camera的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295422

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下