CubieBoard2解决摄像头反色

问题描述:

在安卓系统中,一般支持UVC架构的Camera,普通的USB摄像头只要支持UVC架构都可以直接通过USB接口正常运行。但是在CubieBoard2(即树莓派3)中,接入常规的USB摄像头,预览时的图像一切正常,但是拍摄出来的照片跟视频颜色均不正常,呈现出蓝色变红色,红色变蓝色的情况。

问题分析:

此类问题一般是UV反转造成,UV序列问题可引起颜色不正常。

具体步骤:

1) 查找硬件适配层CAMERA部分的代码。

在CubieBoard2开发板中,硬件适配层CAMERA部分的代码位置:

\android42\device\softwinner\common\hardware\camera

查看cameraHardware.cpp代码,有:

#ifdef __SUN7I__
			org_fmt = V4L2_PIX_FMT_NV12;		// SGX support NV12
#else
			org_fmt = V4L2_PIX_FMT_NV21;		// MALI support NV21
#endif

当前配置org_fmt为V4L2_PIX_FMT_NV21,由于颜色反转,所以应将其修改为V4L2_PIX_FMT_NV12。此处可通过定义__SUN7I__来修改帧格式。

2) 修改图像帧格式

为了在全局进行修改,在一个模块中公用的头文件中继续定义,确保修改成功。

在CAMERA源码目录中找到CameraDebug.h,在其中定义__SUN7I__,加入如下代码:

#define __SUN7I__ 1

3) 编译并加载固件,启动摄像头应用即可正常使用。




<think>嗯,用户遇到了I2C OLED显示屏显示的问题,需要找出硬件原因和修复方法。首先,我得回忆一下OLED显示的基本原理。显示通常指的是原本应该亮的部分变暗,暗的部分变亮,这可能涉及到显示配置或者硬件连接的问题。 首先考虑软件配置,用户可能误设置了显示模式。比如SSD1306这类驱动芯片,通常有命令可以控制显示模式,比如0xA6是正常,0xA7是。但用户可能已经检查过代码,或者问题出现在硬件层面,所以需要进一步分析。 硬件方面,电源稳定是一个可能因素。如果OLED的供电电压稳,可能导致驱动芯片工作异常,显示异常。比如电压过低,芯片可能无法正确驱动像素点,导致。需要检查电源电压是否符合规格,比如通常OLED需要3.3V或5V,电流是否足够,是否有滤波电容来稳定电压。 然后是I2C信号干扰问题。I2C的时钟线SCL和数据线SDA如果受到干扰,可能导致数据传输错误。比如在初始化过程中,发送的配置命令可能被干扰,导致错误地设置了模式。这时候需要检查线路是否过长,是否有适当的上拉电阻,通常I2C总线需要上拉到VCC,确保信号稳定。用户提供的引用[2]提到初始化I2C时配置了GPIO引脚,如果线路连接错误,比如SCL和SDA接,也可能导致通信异常,但这种情况可能直接导致无法显示,而过信号质量问题仍然需要考虑。 另一个可能是屏幕本身故障。比如驱动芯片部分损坏,或者屏幕内部线路短路,导致像素点电压异常。这时候可能需要更换屏幕来测试。用户提供的引用[3]中有驱动程序链接,如果软件没有问题,硬件故障的可能性就增加了。 此外,初始化配置错误也可能导致问题。比如在初始化过程中,发送的命令是否正确,是否有正确设置显示模式。用户提供的引用[2]中的初始化代码可能没有正确配置显示模式,需要检查发送的命令是否包含设置正常显示模式的指令,比如0xA6。如果驱动程序版本有问题,可能需要更新,如引用[3]提到的修复了一些bug,可能涉及显示函数的问题。 接下来,修复方法方面,首先建议用户检查软件配置,确保发送了正确的显示模式命令。如果软件没问题,再检查硬件连接,电源是否稳定,信号线是否干扰,上拉电阻是否合适。最后,考虑更换屏幕或检查硬件故障。 可能用户没有意识到电源波动的影响,或者线路连接存在接触良。需要指导用户逐步排查,从软件到硬件,由简到难。比如先确认软件配置,再测量电压,检查线路,最后替换组件测试。</think>### I2C OLED显示屏显示的硬件原因及修复方法 #### 一、硬件原因分析 1. **驱动芯片配置错误** SSD1306/SH1106等OLED驱动芯片支持通过指令$0xA6$(正常显示)和$0xA7$(显示)切换显示模式。若初始化代码未正确配置相关寄存器,可能导致默认进入模式[^3]。 2. **电源电压异常** OLED屏对电压敏感,若供电电压稳定或超出范围(如低于$3.3V$或高于$5V$),可能导致驱动芯片逻辑混乱,触发异常显示模式[^1]。 3. **I2C信号干扰** SCL/SDA信号线若未添加上拉电阻或受到电磁干扰,可能引发通信数据错误。例如初始化阶段发送的配置命令被干扰后,可能误触发显示模式[^2]。 4. **屏幕物理损坏** 屏幕内部驱动电路短路或像素阵列损坏时,可能直接导致显示(如像素点电压极性转)。 --- #### 二、修复方法 1. **检查软件配置** 在初始化代码中明确添加模式切换指令: ```c // SSD1306正常显示指令 Send_Command(0xA6); // 则用0xA7 ``` 参考驱动程序版本需确认是否包含正确显示模式设置。 2. **优化电源设计** - 测量供电电压是否稳定在$3.3V$(或屏幕规格要求值) - 在VCC与GND之间并联$10\mu F$钽电容+$0.1\mu F$陶瓷电容滤波 - 检查I2C总线是否独立供电(避免与高功耗设备共用电源) 3. **增强信号完整性** - 在SCL/SDA线上添加$4.7k\Omega$上拉电阻(直接连接到VCC) - 缩短I2C走线长度(建议超过$20cm$) - 使用双绞线或屏蔽线减少干扰 4. **硬件替换测试** - 更换同型号OLED屏幕验证是否仍存在问题 - 检查屏幕FPC排线是否接触良(可轻压排线接口测试) --- #### 三、操作验证步骤 1. 通过ST-Link等调试器单步执行初始化代码,确认$0xA6$指令被正确发送 2. 用示波器观测I2C波形,检查起止信号、ACK响应是否符合协议 3. 测量工作电流:正常显示时电流约$15mA$,全白屏时$30mA$,异常值可能指示硬件故障 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值