说明:安卓系统:Android M
芯片:全志A40I
难点说明:在全志的A40I中,预留了三组摄像头。uvc tvin csi。 在内核注册的时候默认将video0 留给UVC。
将video2留给CSI的摄像头。将video4留给tvin的摄像头。
现在问题就是说,我手上没有接出来TVIN的摄像头,也没有UVC的USB摄像头。只有一个CSI的OV5640的摄像头。
但是存在一个问题就是,系统默认调用的是UVC的摄像头如果这个UVC摄像头没有的话,就会去调用TVIN的摄像头。就是没有CSI的份
当在安卓系统点击照相机的时候总是会提示打开相机失败,然后提示TVIN驱动代码打印出,连接TVIN总线失败。没办法自动转化到CSI摄像头
需要大家帮忙一下怎么调为安卓系统默认打开就是CSI(OV5640)的摄像头,而不是UVC或者是TVIN摄像头。
UVC = video0 (默认)
CSI = video2
tvin = video4 (次默认)
请问一下大家要修改那个文件,才将这个顺序给调换一下。点击安卓系统的相机应用的时候,默认调用的是CSI摄像头。而不是所谓UVC或者是TVIN
查找了config文件,发现A40I的系统下面居然找不到。心碎+N
特意发帖子请教一下大家。 在此感谢
离线
离线
按全志的惯例, 可能是改 sys_config.fex 文件.
但是你可以先把 /dev/video0 删除, 然后建立一个 /dev/video2 到 /dev/video0 的软链接:
rm /dev/video0
ln /dev/video0 /dev/video2 -s ###或者: ln /dev/video2 /dev/video0 -s
感谢晕哥 的确是可以这样用的。一打开这个东西就会出现mclk。 但是也同时提示我说
[ 383.006632] [VFE_ERR]bsp_csi_set_fmt error at sunxi_csi_subdev_set_fmt!
[ 383.014074] [VFE_ERR]v4l2 sub device csi set_fmt error!
这个是不是我的设置的时钟频率有问题啊
离线
可能是你的摄像头不支持某些像素格式, 而CPU正在依次检查, 不支持就跳过测试下一个。
以上纯属猜测。
晕哥 通过修改 media_profiles.xml这个错误就不在出现了那个仅仅是不支持里面的某一种格式吧。 当我按照你的想法软连接过去的
正常点开拍照应用卡着在那里,主时钟一直给出来,I2C也在持续的发信息过去。 但是唯独没有PCLK产生和图像传回来。 是不是配置出现了问题。导致
采集数据回不来啊
离线
MCLK是有源晶体产生的,还是CPU提供的?
我的是适用CPU提供的时钟。 开机上电都是有具体的电源。 点击相机应用的时候就出现了主时钟。但是就是一直卡在这个相机应用里面,系统也可以回到桌面。等待了好久之后就会发现相机获取回来的图像全部都是绿色的。并且点击拍照的时候居然还提示:一下的打印信息。
然后还带有PCLK时钟返回来。摄像头是OV5640的我想是不是我设置获取的数据太大了,还有设置的一些东西不正确导致他获取回来的数据都是绿色的。
[ 880.610078] [OV5640]s_fmt set width = 1600, height = 1200
[ 880.617066] csi->frame_info.frm_byte_size = 2880000
[ 880.622997] [VFE]queue_setup, buffer count=1, size=2880000
[ 880.904861] [VFE]capture image mode!
[ 881.150136] [OV5640]s_fmt set width = 640, height = 480
[ 881.156688] csi->frame_info.frm_byte_size = 460800
[ 881.162965] [VFE]queue_setup, buffer count=8, size=460800
[ 881.405738] [VFE]capture video mode!
[ 881.561215] [VFE]capture video first frame done!
最近编辑记录 2505300733 (2019-10-26 11:18:39)
离线
要不你改一下, 一直提供 MCLK 试一试, 或者改软件不方便就怼一个有源晶体上去。
先排除这些问题感染方便进一步调试。
MCLK一直都是有的。但是PCLK检测出来的时钟居然和MCLK是一样的频率。 这个就很是奇怪。 PCLK应该是MCLK的时钟的一半才对,发回来的数据一直有问题。
离线
那硬件有问题了, PCLK 是根据设置之后产生的像素时钟, 和MCLK 频率不同。
晕哥 video2软连接引用过去video0 ,但是video0默认是UVC的摄像头。那么配置的参数应该也是UVC的。 这个会不会就是导致传输回来的图像有问题呢? 毕竟安卓层也会对video0多多少少有配置。
现在理想就是在内核层将video0注册的UVC摄像头换成CSI的,但是关于全志芯片的这种操作我没有了解过,请问晕哥有没有操作过。 在内核到安卓层将video0配置模式等 全部配置成CSI摄像头。
离线
理论上没有问题,因为不管是什么摄像头,都是用 v4l2 接口操作。
我的想法和您也是一样的,但是都是操作V4L2接口,首先软连接过去之后,点击安卓拍照应用,一开始主时钟出来了但是APP一直卡在哪里,只有用手短路一下帧同步脚就会出现PCLK和显示绿色的图像.不然一直卡在打开应用的位置。打印信息如下屏幕是(12寸的 ,1280*800)(摄像头是OV5640)
--------------------------------------------------------------------------------
[VFE]vfe_open
[VFE]vfe_runtime_resume
[VFE]..........................vfe clk open!.......................
[VFE]vfe_open ok
[VFE]Set csi core clk = 324000000, after Set csi core clk = 300000000
[VFE]mclk on
[OV5640]s_fmt set width = 640, height = 480
csi->frame_info.frm_byte_size = 460800
[VFE]queue_setup, buffer count=8, size=460800
(在拍照模式下用手短路之后就会提示以下数据操作)
[OV5640]s_fmt set width = 640, height = 480
csi->frame_info.frm_byte_size = 460800
[VFE]queue_setup, buffer count=8, size=460800
[VFE]capture video mode! (视频模式)
[VFE]capture video first frame done!
这个就是很奇怪了。
-----------------------------------------------------------------------------------
之后点击拍照,也可以获取到图像,相册也可以看得到绿色图,PCLK也有出现。 难道是我模式没有选对,没有拍照默认所以才一直卡在这个位置
离线
如果接 USB 摄像头正常吗?
离线
如果接 USB 摄像头正常吗?
嗯嗯 调了好久 后来买了一个USB摄像头调 USB摄像头是可以用的。
最近编辑记录 2505300733 (2019-10-28 15:32:26)
离线
那建议先改下应用层的软件, 把默认值 video0(uvc) 改成 video2(csi)
离线
那建议先改下应用层的软件, 把默认值 video0(uvc) 改成 video2(csi)
具体的路径找不到。修改其默认给应用打开的摄像头
离线
用这个命令搜搜源码或者配置文件: grep /dev/video -r .
离线
用这个命令搜搜源码或者配置文件: grep /dev/video -r .
这个撒的网,搞了一下午。没有找到根本原因修改。出错太多。还是安卓7.1.1这个系统不太像以往的系统,奇奇怪怪的.
大哥 按照您的方法来找对于不太熟悉这个版本的我来说太心碎了。
最讨厌的是全志系统都更新到现在,给的手册还都是复制以前。太他吗的坑爹了有些配置明显是错误的也不改正。 恶心得要死。
最近编辑记录 2505300733 (2019-10-28 21:35:21)
离线
说明:安卓系统:Android M
芯片:全志A40I
难点说明:在全志的A40I中,预留了三组摄像头。uvc tvin csi。 在内核注册的时候默认将video0 留给UVC。
将video2留给CSI的摄像头。将video4留给tvin的摄像头。
现在问题就是说,我手上没有接出来TVIN的摄像头,也没有UVC的USB摄像头。只有一个CSI的OV5640的摄像头。但是存在一个问题就是,系统默认调用的是UVC的摄像头如果这个UVC摄像头没有的话,就会去调用TVIN的摄像头。就是没有CSI的份
当在安卓系统点击照相机的时候总是会提示打开相机失败,然后提示TVIN驱动代码打印出,连接TVIN总线失败。没办法自动转化到CSI摄像头需要大家帮忙一下怎么调为安卓系统默认打开就是CSI(OV5640)的摄像头,而不是UVC或者是TVIN摄像头。
UVC = video0 (默认)
CSI = video2
tvin = video4 (次默认)
请问一下大家要修改那个文件,才将这个顺序给调换一下。点击安卓系统的相机应用的时候,默认调用的是CSI摄像头。而不是所谓UVC或者是TVIN
查找了config文件,发现A40I的系统下面居然找不到。心碎+N
特意发帖子请教一下大家。 在此感谢
收到“我思故我在”这位老哥启示之后,我就去A40i_dir/AWW40I_DVK/hardware/aw/camera/V4L2CameraDevice2.cpp这个文件里面
发现以下这段话
1835 // open V4L2 device
LOGD(“AAAAAAA This is a sign in my \n ”) ; //我在这里做一个标志
1836 if((access(halInfo->device_name, F_OK)) == 0)
1837 { LOGD(“ HELLO MY IN access(halInfo->device_name, F_OK) \n ”); // 发现没有进入到这里面来
1838 strcpy(dev_node,halInfo->device_name);
1839 LOGD("openCameraDev device_name origin:%s",dev_node);
1840 }
1841 else
1842 {
1843 for(int i = 4; i < MAX_NUM_OF_CAMERAS; i++)
1844 {
1845 sprintf(dev_node, "/dev/video%d", i);
1846 ret = access(dev_node, F_OK);
1847 if(ret == 0)
1848 {
1849 break;
1850 }
1851 }
1852 LOGD("openCameraDev device_name:%s",dev_node);
1853 }
在这的基础上面我去到在启动这个函数的前面做一个标志:方便打印LOG出来到那一步
然后修改下面代码:并且我在上面的代码里面做一个标志位 发现 if((access(halInfo->device_name, F_OK)) == 0)没有成立。
*
* for(int i = 4; i < MAX_NUM_OF_CAMERAS; i++)
* {
* sprintf(dev_node, "/dev/video%d", i);
* ret = access(dev_node, F_OK);
* if(ret == 0)
* {
* break;
* }
*
修改代码如下,因为在内核打印信息里面我看到CSI的ov5640注册的设备为video2我试着强行将其打开为这个
+ for(i = 2;i<=2 ;i++)
+{
+ sprintf(dev_node, "/dev/video%d", i);
+ ret = access(dev_node, F_OK);
+ if(ret == 0) {
+ break;
+ }
+ }
+
开机的时候没住到内核居然打印出这种错误:
[ 63.067643] [VFE]vfe_open
[ 63.070654] [VFE]vfe_runtime_resume
[ 63.086356] [VFE]..........................vfe clk open!.......................
[ 63.094632] [VFE]vfe_open ok
[ 63.098219] [VFE]Set csi core clk = 324000000, after Set csi core clk = 300000000
[ 63.120722] [VFE]mclk on
[ 63.193809] sunxi_i2c_do_xfer()906 - [i2c3] incomplete xfer (status: 0x20, dev addr: 0x3c)
[ 63.203239] [VFE_DEV_I2C_ERR]cci_read_a16_d8 error! slave = 0x3c, addr = 0x300a, value = 0x 0
[ 63.213055] sunxi_i2c_do_xfer()906 - [i2c3] incomplete xfer (status: 0x20, dev addr: 0x3c)
[ 63.222678] [VFE_DEV_I2C_ERR]cci_read_a16_d8 error! slave = 0x3c, addr = 0x300a, value = 0x 0
[ 63.232515] sunxi_i2c_do_xfer()906 - [i2c3] incomplete xfer (status: 0x20, dev addr: 0x3c)
[ 63.241962] [VFE_DEV_I2C_ERR]cci_read_a16_d8 error! slave = 0x3c, addr = 0x300a, value = 0x 0
ov5640 sensor read retry=2
[ 63.254254] [OV5640]error at sensor_detect
[ 63.258735] [OV5640]chip found is not an target chip.
[ 63.264903] [VFE_ERR]sensor initial error when selecting target device!
[ 63.272456] [VFE]vfe_close
[ 63.275431] [VFE]mclk off
[ 63.314700] [VFE]vfe_runtime_suspend
[ 63.318633] [VFE]..........................vfe clk close!.......................
[ 63.333007] [VFE]vfe_close end
并且在我每次几点拍照功能的时候就会提示出以下错误:
[12739.846050] [VFE]vfe_open
[12739.848981] [VFE]vfe_runtime_resume
[12739.865745] [VFE]..........................vfe clk open!.......................
[12739.874064] [VFE]vfe_open ok
[12739.877463] [VFE_ERR]set input i(1)>dev_qty(1)-1 error!
[12739.883713] [VFE]vfe_close
[12739.886718] [VFE]vfe select input flag = 0, s_input have not be used .
[12739.894279] [VFE]vfe_runtime_suspend
[12739.898217] [VFE]..........................vfe clk close!.......................
[12739.913271] [VFE]vfe_close end
[12740.271792] [VFE]vfe_open
[12740.274797] [VFE]vfe_runtime_resume
[12740.291287] [VFE]..........................vfe clk open!.......................
[12740.299425] [VFE]vfe_open ok
[12740.303066] [VFE_ERR]set input i(1)>dev_qty(1)-1 error!
[12740.309143] [VFE]vfe_close
[12740.312564] [VFE]vfe select input flag = 0, s_input have not be used .
[12740.319861] [VFE]vfe_runtime_suspend
[12740.329032] [VFE]..........................vfe clk close!.......................
[12740.344394] [VFE]vfe_close end
我也是日了狗了,这个芯片真是醉了。
离线