关于Techpoint2830的调试经验和技巧
从问题去分析
比如出现不出图情况要调时序或更改音频通道调试…
- 比如出现不出图情况要调时序时f2、f3、f5寄存器时,可以使用tp2802ioctl程序去在线更改值去观察
- 不出图可以查看0x1和0x3看AD有没有锁定摄像头信号
- 音频也可如此,比如audio_chn去改变0x0寄存器去切换同轴和模拟通道播放时,也可用tp2802ioctl程序去在线修改,效率高
- 当出现图像花屏或图像一闪一闪都可改变f2、f3、f5去尝试解决问题
8路级联音频模式下的音频开发
当你的ad1芯片作为主片去接受ad0从片…
当你的ad1芯片作为主片去接受ad0从片的音频数据时,有可能会出现音频通道跟视频通道对不上的问题
这里vi的1通道对应了ai的5通道这明显是不对的
解决方法:
ad1主芯片的audio_chn通道0x0=0x5(同轴模式的话本来是0x1a),0x1=0x6(同轴模式的话本来是0x1b),0x2=0x7(同轴模式的话本来是0x1c),0x3=0x8(同轴模式的话本来是0x1d),0x4=0x1a(级联模式下本来是0x5),0x5=0x1b(级联模式下本来是0x6),0x6=0x1c(级联模式下本来是0x7),0x7=0x1d(级联模式下本来是0x8),这样就能把ai通道换回来了
当同轴音频模式下接入不支持同轴音频的摄像头,播放音乐会有噗噗声的杂音
这个是硬件原理导致,避免不了
需要通过以下代码去获取摄像头是否支持
//500W
if(watchdog_info[j].mode[i]==0x21){
tp28xx_byte_write(j, 0x1e, 0x3d);
tp28xx_byte_write(j, 0x1f, 0x9);
}else if(watchdog_info[j].mode[i]==0x28||watchdog_info[j].mode[i]==0x68){
//400W
tp28xx_byte_write(j, 0x1e, 0x3e);
tp28xx_byte_write(j, 0x1f, 0xe);
//tp28xx_byte_write(j, 0x2f, 0xf);
}else
{
tp28xx_byte_write(j, 0x1e, 0x17);
tp28xx_byte_write(j, 0x1f, 0xb);
tp28xx_byte_write(j, 0x2f, 0xf);
}
msleep(500);
tp2802_set_reg_page(j, i);
audio_support = tp28xx_byte_read(j, 0x04);
//如果audio_support >=0x50则代表支持
当支持的时候相应通道设置为0x1a、0x1b、0x1c或者0x1d,不支持则相应通道必须关掉audiochn下0x0=0,0x1=0,0x2=0,0x3=0
如果八路级联的话就对应要关闭主芯片0x0、0x1、0x2、0x3、0x4、0x5、0x6、0x7
当摄像头支持同轴音频播放的时候有杂音
当播放支持同轴音频摄像头音乐有类似钻楼的声音时,更改0x83可解决
出现只插单通道概率不出图的情况
这个时候要看看0x35寄存器有没有对采集数据进行水平减半
举例:比如8路,你只插了第四通道,那相应的一二三通道0x35都要去查看是否(|0x40),否则会导致带宽不够(即使没插摄像头AD同样也在发送数据)概率不出图。那四路的话,如果0x35不需要减半,则一二三四通道就都不要(|0x40)
8路出现花纹闪烁
这也是大概率0x35、f2、f3、f5的问题
富瀚平台通过命令查看AD信息
echo help > /proc/umap/ad
/mnt # echo help > /proc/umap/ad
TP28xxProcWrite: cmd [help]
Usage:
echo chip=0,chn=1 > /proc/umap/ad
dump registers in chip 0 channel 1
echo chip=0,chn=1,reg=0x32 > /proc/umap/ad
read a register value
echo chip=0,chn=1,reg=0x32,val=0x44 > /proc/umap/ad
write a register value
echo c=0,n=1,r=0x32,v=0x44 > /proc/umap/ad
Abbr. write a register value
通过cat /proc/kmsg可以看看是否有通道报错(当AD0x1和0x3捕捉到信号后还不出图)
看富瀚VIU的DLL命令
port1:echo -r 0x34d0007c -l 1 > /sys/devices/platform/sysreg@10000000/lookat
port0:echo -r 0x34d00078 -l 1 > /sys/devices/platform/sysreg@10000000/lookat
当不出图时,可以用富瀚的脚本viu_port_dll_scan.sh去测VIU的正常出图DLL值(当AD0x1和0x3捕捉到信号后还不出图)
命令行直接修改VIU的DLL命令
//port0:
echo -s 0x34d00078 -l 1 0 > /sys/devices/platform/sysreg@10000000/lookat
//0是要设DLL的值
echo -s 0x34d00068 -l 1 0x7204 > /sys/devices/platform/sysreg@10000000/lookat
echo -s 0x34d00068 -l 1 0x5205 > /sys/devices/platform/sysreg@10000000/lookat
//port1:
echo -s 0x34d0007c -l 1 0 > /sys/devices/platform/sysreg@10000000/lookat
//0是要设DLL的值
echo -s 0x34d0006c -l 1 0x7204 > /sys/devices/platform/sysreg@10000000/lookat
echo -s 0x34d0006c -l 1 0x5205 > /sys/devices/platform/sysreg@10000000/lookat
看驱动加载了有几个AD芯片
cat /sys/module/tp2830/parameters/chips
用命令查看连接的两个AD芯片i2c地址
/mnt # i2cdetect -r 0
i2cdetect: WARNING! This program can confuse your I2C bus
Continue? [y/N] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- 46 -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
//所以0x46和0x44就是它们的地址
[TP2830关于时钟配置的主要寄存器]