功率调试,是1Khz 0db的源将soc dsp到pa的幅度降到一样(理想状态,调到dsp最大幅度),再调pa相对增益以达到特定功率(这里为5W),只需要调试这个功率的相对增益就行,设置到pa之后再调dsp的幅度,每个幅度都会做相应的增益补偿(与最大功率一样)

整个调试过程中比较纠结,到最后才发现i2s bit clock mclock波形质量不好

且模块需要在提供i2s clock的时候,读写才有效

在调试音频功率时发现,做line in时,pm8916有异常波形出来,需要削除掉这个异常15k正弦波形
后面是发现是从mic1进来的,由硬件进行滤波来解决这个问题,后面在解决中还出现了23k正弦波,同样是硬件解决的

最后硬件只将tinymix “ADC1 Volume” 5就可以调pa的功率为5w
只需在mix_path将默认值修改为5,再将ftm_test_config配置文件中去掉ADC1 Volume:6的设置

Index: android/hardware/qcom/audio/configs/msm8909/mixer_paths_msm8909_pm8916.xml
===================================================================
--- android/hardware/qcom/audio/configs/msm8909/mixer_paths_msm8909_pm8916.xml  (revision 281)
+++ android/hardware/qcom/audio/configs/msm8909/mixer_paths_msm8909_pm8916.xml  (revision 282)
@@ -56,7 +56,7 @@<ctl name="IIR1 INP2 Volume" value="84" /><ctl name="IIR1 INP3 Volume" value="84" /><ctl name="IIR1 INP4 Volume" value="84" />
-    <ctl name="ADC1 Volume" value="4" />
+    <ctl name="ADC1 Volume" value="5" /><ctl name="ADC2 Volume" value="4" /><ctl name="ADC3 Volume" value="4" /><ctl name="DEC1 Volume" value="84" />
Index: android/vendor/qcom/proprietary/mm-audio/audio_ftm/family-b/config/8909/ftm_test_config
===================================================================
--- android/vendor/qcom/proprietary/mm-audio/audio_ftm/family-b/config/8909/ftm_test_config     (revision 281)
+++ android/vendor/qcom/proprietary/mm-audio/audio_ftm/family-b/config/8909/ftm_test_config     (revision 282)
@@ -802,8 +802,6 @@DEC1 MUX:ADC1-ADC1 Volume:6
-QUAT_MI2S_RX Port Mixer TERT_MI2S_TX:1QUAT_MI2S_RX_DL_HL Switch:1

在调试过程中,还发现
针对tas5782m模块
ppc3仿真工具操作不方便,数据误发
写的i2c地址是0x92其实是0x90需要手动再发一现,非常麻烦,
导出来的寄存器数据有误
导出来的数据发现有问题,有一定的风险
如下导出来是
{ 0x22, 0x03 },实现操作的是96k

后来发现ppc3无法加载单声道,此时pa是采用声道设计的,且原来i2c地址采用的0x90

原来关于tas5782m,TI SW(ppc3)内部已经固定的立体声设备地址为0x90而Mono设备为0x92,这就是无法选择相应的单声道模式的原因

从上说0x90是立体声道,因此需要硬件将i2c 地址修改为0x92,软件也需要修改

因为默认为低,因此adr0必须拉高,且驱动将i2c地址修改为0x49
重新修改后可以识别了,重新用ppc3调试

在没有连接的状态下,在recent files选 一个ppc3文件

点end system integration,确保一下参数是否与调试相匹配

后面在调tas5805m时,导出没有声音,发现要用以下配置

原因:

点左下角的连接,

系统检测


硬件检测后喇叭就会发出声音,检测完成后就没有声音,说明硬件检测通了,可以开始调试了
回到home进入audio processing音频调试界面

重新调96K


导出寄存器表



这里导出表的头文件内容类型为,如果ppc3软件有问题,还需要根据spec修改寄存器里面的信息,如clk源,i2s 格式,电压等

调节音量直接走调pa的相对音量增益
在高通的audio hal 中修改即文件 audio_hw.c的out_set_volume中

#if 1
#define ESP (0.000001)
static float volume_value[]=
{0.000000,0.002701,0.006464,0.013924,0.023646,0.040156,0.072862,0.123738,0.189453,0.294274,0.435262,0.643799,1.000000,
};//打印出来用于定位到声音处于哪一阶
#endif
static int out_set_volume(struct audio_stream_out *stream, float left,float right)
{struct stream_out *out = (struct stream_out *)stream;int volume[2];int ret = 0;ALOGE("[Linda]11 %s: left:%f, right: %f, out->usecase:%d",__func__, left, right,out->usecase);if (out->usecase == USECASE_AUDIO_PLAYBACK_MULTI_CH) {/* only take left channel into account: the API is for stereo anyway */out->muted = (left == 0.0f);return 0;} else if (is_offload_usecase(out->usecase)) {if (audio_extn_passthru_is_passthrough_stream(out)) {/** Set mute or umute on HDMI passthrough stream.* Only take left channel into account.* Mute is 0 and unmute 1*/audio_extn_passthru_set_volume(out, (left == 0.0f));} else if (out->format == AUDIO_FORMAT_DSD){char mixer_ctl_name[128] =  "DSD Volume";struct audio_device *adev = out->dev;struct mixer_ctl *ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);if (!ctl) {ALOGE("%s: Could not get ctl for mixer cmd - %s",__func__, mixer_ctl_name);return -EINVAL;}volume[0] = (int)(AmpToDb(left));volume[1] = (int)(AmpToDb(right));mixer_ctl_set_array(ctl, volume, sizeof(volume)/sizeof(volume[0]));return 0;} else {ALOGE("[Linda]77 %s:",__func__);pthread_mutex_lock(&out->compr_mute_lock);ALOGE("%s: compress mute %d", __func__, out->a2dp_compress_mute);#if 0if (!out->a2dp_compress_mute)ret = out_set_compr_volume(stream, left, right);//注释掉这里正常播放的音量全部都是在这里设到adsp#else{#if 0FILE * fd;unsigned int value =10;ALOGE("%s: start test", __func__);fd = fopen("/sys/devices/soc/78b8000.i2c/i2c-4/4-0048/pa_vol","rw");if (fd == NULL){ALOGE("%s: start test  fd == null", __func__);//return -1;}ALOGE("%s: start wrtie", __func__);if(fd != NULL){ALOGE("%s: start wrtie 0", __func__);fwrite(&value, sizeof(value), 1, fd);ALOGE("%s: start wrtie 1", __func__);}fclose(fd);#elseALOGE("%s: start test", __func__);int i =0;char devicepath[512] = {0};for(i = 0; i < 12; i++){ALOGE("%s: volume_value[i]: %f,right:%f,left:%f", __func__,volume_value[i],right,left);if(((volume_value[i] - left) > (-1) * ESP) && ((volume_value[i] - left) < ESP) &&((volume_value[i] - right) > (-1) * ESP) && ((volume_value[i] - right) < ESP) ){sprintf(devicepath, "echo %d > /sys/devices/soc/78b8000.i2c/i2c-4/4-0048/pa_vol", i);ALOGE("%s: test  command: %s", __func__,devicepath);system(devicepath);//将音量除数写到pa中,驱动层直接控制音量的相对增益寄存器break;}}#endifALOGE("%s: test end", __func__);}#endifout->volume_l = left;out->volume_r = right;pthread_mutex_unlock(&out->compr_mute_lock);return ret;}} else if (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP) {char mixer_ctl_name[] = "App Type Gain";struct audio_device *adev = out->dev;struct mixer_ctl *ctl;uint32_t set_values[4];ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);if (!ctl) {ALOGE("%s: Could not get ctl for mixer cmd - %s",__func__, mixer_ctl_name);return -EINVAL;}set_values[0] = 0; //0: Rx Session 1:Tx Sessionset_values[1] = out->app_type_cfg.app_type;set_values[2] = (int)(left * VOIP_PLAYBACK_VOLUME_MAX);set_values[3] = (int)(right * VOIP_PLAYBACK_VOLUME_MAX);mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));return 0;}return -ENOSYS;
}

但后来发现以上的修改只能对播放mp3之类的有效果,对wav类的pcm数据没有影响,后来发现是audioflinger针对不同的流在混音时做了不同的处理,需要在AudioFlinger::setStreamVolume中作处理
https://blog.csdn.net/yangchangwen/article/details/78348317

tas5782m功率调试相关推荐

  1. 2018.7.6 TX射频调试-PP

    1  电路图 2 layout 3调试 Y1是谐振器,Q1是放大器,C3决定功率(C3容值越大,功率越大)L2与C2构成振荡器(用于调节频偏),R1对功率影响最大. a 功率调试 用频谱仪:功率每+3 ...

  2. 10G SR光模块取消ER调试可行性分析

    1.背景 对于10G SR 光模块,目前消光比调节采用的是TW100 1G 速率下调试,而终测使用的是2100 示波器10G 速率下测试,这样会有以下几个误差因素, A TW100 消光比本身探测误差 ...

  3. STM32——TIM输出比较

    文章目录 一.TIM输出比较 输出比较简介 PWM简介 输出比较通道(高级) 输出比较通道(通用) 输出比较模式控制器工作原理 PWM基本结构 参数计算 三.PWM驱动LED呼吸灯 电路设计 关键代码 ...

  4. 超声波电路板驱动线路设计

    超声波电路板驱动线路通电交流电压220V±10%,电源电压需稳定.体积小.占用空间小,功率大.清洗效果好,自动化程度高.超声波电路板驱动线路驱动超声清洗换能器依次启动低频初洗.中频精洗.换水.高频漂洗 ...

  5. 四轴飞控DIY集成FPV功能

    四轴飞控DIY集成FPV功能 1. 功能需求 2. 概念介绍 2.1 制式 2.2 显示分辨率 2.3 摄像头线数 高于700线 低于700线 3. 需求分析 4. 组件选择 5. 接线组装 5.1 ...

  6. 无线信标功能调试-2021-3-9-输出功率恒定限制

    ▌01 无线信标比赛功能 1.功能介绍 在 无线节能信标调试说明-2021-3-3 对于 第十六届全国大学智能汽车竞赛竞速比赛规则 中的无线节能信标组的无线功率部分进行了调试.并对在输出功率50W,1 ...

  7. 使嵌入式系统调试更容易:有用的硬件和软件提示

    使嵌入式系统调试更容易:有用的硬件和软件提示 Making embedded system debug easier: useful hardware & software tips 嵌入式系 ...

  8. 可以控制到多低(功率)?

    可以控制到多低(功率)? How low (power) can you go? 在我的上一篇文章"Arm Cortex-M低功耗模式基础知识"中,我们探讨了在每个Arm Cort ...

  9. 信标节能电路模块第二版本调试-无线充电-2021-3-21

    ▌01 节能信标 1.前期调试 在 第十六届全国大学生智能车竞赛 竞速组比赛中,有一组节能信标组.它使用带有无线充电线圈的信号源,能够为比赛的车模提供: 50W无线充电 无线导航 红色.红外灯光导航: ...

  10. 无线信标功能调试-2021-3-9-HALL检测与主控接口

    ▌01 无线信标控制板 1.功能介绍 在 无线节能信标调试说明-2021-3-3 对于 第十六届全国大学智能汽车竞赛竞速比赛规则 中的无线节能信标组的无线功率部分进行了调试.并对在输出功率50W,15 ...

最新文章

  1. Linux中kill,pkill,killall和xkill命令汇总讲解
  2. 使用用户自定义类型作为map的key
  3. 设置Dialog全屏显示(转)
  4. 10行Python代码自动清理电脑内重复文件,解放双手!
  5. numpy 矩阵与向量相乘_高能!8段代码演示Numpy数据运算的神操作
  6. dubbo的端口地址和ip写在那_开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~...
  7. Linux命令之查找
  8. SQL那些事儿(七)--oracle表空间、用户查看基本语句
  9. python selenium安装失败_python:学习selenium遇到的坑
  10. 对列 、生产者与消费者
  11. cocos2dx面试题整理
  12. 一名大二废柴今后目标
  13. 微信棋牌源码虚拟机搭建Hadoop集群
  14. 深度思考故事1:贴发票和贴海报
  15. 单组学的多变量分析|1.PCA和PLS-DA
  16. 辛巴学院-Unity-剑英陪你零基础学c#系列(三)计算与类型
  17. java8 Stream的基本操作
  18. PCL点云处理之计算三角形的外接圆半径(一百二十七)
  19. vue脚手架的使用,下载依赖方法
  20. 【语音告警】Zabbix与语音报警灯联动实现语音告警语音播报

热门文章

  1. 一文读懂李洪元被捕251天:先后涉及三项罪名 录音成关键证据
  2. 华盛顿大学计算机专业gpa,华盛顿大学计算机专业基本信息全盘点 学习来这里就对了...
  3. 服务器版系统里无线网卡如何打开,无线网卡被禁用了怎么开启
  4. 【程序员如何买基金 十二】实战操作篇
  5. 操作系统——进程管理的功能
  6. alt复制选区就会卡 ps_PS经常用到的复制技巧
  7. 淘宝运营 DSR评分太低的影响 用补单的方法具体操作步骤,提高DSR评分
  8. MT6573 android 系统默认语言处理流程
  9. STM32实现薄膜压力传感器数据采集(标准库和HAL库实现)
  10. ESP8266-Arduino编程实例-MPL3115A2压力传感器驱动