AC692X软件问题整理
AC692X软件问题整理
链接:https://pan.baidu.com/s/1kjhBSPTfegAm3xRpuVv8NAF
提取码:fxq3
TOC \o "1-1" \h \u HYPERLINK \l _Toc519456908 1.AC692X的升级复位可以选择软复位跳转和绝对地址跳转 PAGEREF _Toc519456908 \h 5
HYPERLINK \l _Toc1086253609 2. 来电时样机播放手机铃声 PAGEREF _Toc1086253609 \h 5
HYPERLINK \l _Toc2140041148 3.V200版本SDK进入RTC睡眠以后RTC时钟不走 PAGEREF _Toc2140041148 \h 6
HYPERLINK \l _Toc1856321114 4.V200版本SDK有一些安卓手机会出现无法蓝牙无法回连问题 PAGEREF _Toc1856321114 \h 6
HYPERLINK \l _Toc1926500794 5.控制开关DACVDD电压 PAGEREF _Toc1926500794 \h 6
HYPERLINK \l _Toc330048345 6. V2.0SDK FM模式播放最大音量MP3提示音可能有杂音 提示音播完以后FM可能会没有声音了 PAGEREF _Toc330048345 \h 7
HYPERLINK \l _Toc404502325 7.V2.0SDK 最大提示改用播放音频文件时一直按vol+ 解码提示音被打断 PAGEREF _Toc404502325 \h 9
HYPERLINK \l _Toc387368031 8. FM白噪声大 PAGEREF _Toc387368031 \h 9
HYPERLINK \l _Toc910289224 9.手机音量一格蓝牙播放可能会断断续续 PAGEREF _Toc910289224 \h 9
HYPERLINK \l _Toc93825837 10.在使用is_dac_mute和is_auto_mute两个函数时应注意两个的接口的意义 PAGEREF _Toc93825837 \h 10
HYPERLINK \l _Toc1414498974 11.692X的OUTPUTCHANNEL对比690X的设置有修改 PAGEREF _Toc1414498974 \h 10
HYPERLINK \l _Toc475780501 12.692X 3路PWM输出参数 PAGEREF _Toc475780501 \h 10
HYPERLINK \l _Toc1240344188 13.获取对箱主机和从机的播放状态 PAGEREF _Toc1240344188 \h 10
HYPERLINK \l _Toc1455377091 14. IO驱动能力有差异 注意选择适当的IO PAGEREF _Toc1455377091 \h 10
HYPERLINK \l _Toc2019375660 15.AC692X带有RTC时钟的方案,外挂32.768KHz的晶振,需注意PR口的设置 PAGEREF _Toc2019375660 \h 11
HYPERLINK \l _Toc1919313517 16.AC692x主从TWS实现同时关机 PAGEREF _Toc1919313517 \h 12
HYPERLINK \l _Toc1515861991 17.AC692X程序升级实现软复位还是绝对地址跳转的实现 PAGEREF _Toc1515861991 \h 15
HYPERLINK \l _Toc803357210 18.AC692X实现SD卡的CMD和DAT脚复用AD功能 PAGEREF _Toc803357210 \h 15
HYPERLINK \l _Toc1514136454 19.AC692X实现蓝牙三方通话功能 PAGEREF _Toc1514136454 \h 18
HYPERLINK \l _Toc327321020 20.AC692X开了ECHO_EN不能用测试盒无线升级 PAGEREF _Toc327321020 \h 20
HYPERLINK \l _Toc1245034401 21.AC692X调节数字音量不起作用以及调节数字音量影响混响效果的解决办法 PAGEREF _Toc1245034401 \h 20
HYPERLINK \l _Toc1094409643 22.AC692X实现低波特率的简单数据发送 PAGEREF _Toc1094409643 \h 21
HYPERLINK \l _Toc1874875259 23.AC692X电机PWM使用案例 PAGEREF _Toc1874875259 \h 22
HYPERLINK \l _Toc941542343 24、AC692X开启对箱硬件EQ没有效果 PAGEREF _Toc941542343 \h 23
HYPERLINK \l _Toc1919889679 25、AC692X通过蓝牙获取手机的日期和时间 PAGEREF _Toc1919889679 \h 23
HYPERLINK \l _Toc2072124679 26、AC692x_SDK_release_V2.2程序RTC时钟睡眠32K晶振不振 PAGEREF _Toc2072124679 \h 24
HYPERLINK \l _Toc1954441869 27、AC692X在各个模式读取RTC时间 PAGEREF _Toc1954441869 \h 25
HYPERLINK \l _Toc866600295 28、AC692X实现录音后退出录音模式进入音乐模式播放录音文件 PAGEREF _Toc866600295 \h 26
HYPERLINK \l _Toc1423386831 29、AC692X实现MIC混响和MUSIC/FM/BT/AUX背景音乐分别调试 PAGEREF _Toc1423386831 \h 29
HYPERLINK \l _Toc1198151798 30、AC691X固定提示音,手机音量同步跳变解决 PAGEREF _Toc1198151798 \h 30
HYPERLINK \l _Toc1785090659 31、AC692X的SPDIF光纤输入实现 PAGEREF _Toc1785090659 \h 31
HYPERLINK \l _Toc1942843739 32、AC692X 最大可放代码FLASH空间扩大修改 PAGEREF _Toc1942843739 \h 32
HYPERLINK \l _Toc136921759 33、FM声音太尖大声调节 PAGEREF _Toc136921759 \h 33
HYPERLINK \l _Toc1777648159 34、AC692X获取对箱配对前后的状态 PAGEREF _Toc1777648159 \h 34
HYPERLINK \l _Toc1651681205 35.开机有设备播设备没设备进入蓝牙模式 PAGEREF _Toc1651681205 \h 37
HYPERLINK \l _Toc2063422553 36.V2.3SDK切换模式的时候播完模式提示音以后会有一点杂音 PAGEREF _Toc2063422553 \h 38
HYPERLINK \l _Toc2107696505 37.播正玄波声连续调音量有杂音 PAGEREF _Toc2107696505 \h 38
HYPERLINK \l _Toc2056183530 38.V2.3SDK时钟模式下闹钟开关关掉,软关开机起来进时钟模式会重新打开闹钟 PAGEREF _Toc2056183530 \h 41
HYPERLINK \l _Toc303306937 39.AC692X动态调节蓝牙发射功率 PAGEREF _Toc303306937 \h 42
HYPERLINK \l _Toc870502081 40.AC692X动态切换手机或者蓝牙接听电话 PAGEREF _Toc870502081 \h 46
HYPERLINK \l _Toc2525720 41.AC692X MIC和AUX 使用同一个IO做信号输入设置 PAGEREF _Toc2525720 \h 46
HYPERLINK \l _Toc1717805911 42.AC692获取U盘或者SD/tf卡里头文件夹序号、文件夹总数和文件序号、总数 PAGEREF _Toc1717805911 \h 48
HYPERLINK \l _Toc1346282582 43.AC692外挂FM IIC与SD卡复用 PAGEREF _Toc1346282582 \h 50
HYPERLINK \l _Toc1242869908 44.样机开了一拖二或者对箱连接手机播放卡顿在特殊环境才会出现 可能是因为旁边有多个测试盒开着 PAGEREF _Toc1242869908 \h 52
HYPERLINK \l _Toc1025699354 45.LINEIN从DAC进去可能出现LINEIN关不掉的问题 PAGEREF _Toc1025699354 \h 52
HYPERLINK \l _Toc1218174595 46.开机判断电压是否允许开机的处理放在了这个函数里面power_on_detect_deal 公版SDK默认没有打开 PAGEREF _Toc1218174595 \h 52
HYPERLINK \l _Toc1014699778 47.录音回放功能公版SDK已经做好了 看这个宏REC_PLAY_EN PAGEREF _Toc1014699778 \h 53
HYPERLINK \l _Toc394077697 48. SPI DMA传输数据 PAGEREF _Toc394077697 \h 53
HYPERLINK \l _Toc2021531805 49.插MIC有杂音问题 PAGEREF _Toc2021531805 \h 53
HYPERLINK \l _Toc381352584 50.692X 2.31和2.4版本开TWS开硬件EQ在线调试声音变调 PAGEREF _Toc381352584 \h 54
HYPERLINK \l _Toc721398717 51.数字信号与模拟信号layout注意 PAGEREF _Toc721398717 \h 55
HYPERLINK \l _Toc1119082558 52.AC692X调节对箱的主从声道输出设置 PAGEREF _Toc1119082558 \h 55
HYPERLINK \l _Toc1475762228 53.AC692X获取每次所连接手机蓝牙地址 PAGEREF _Toc1475762228 \h 56
HYPERLINK \l _Toc448790328 54.AC691X 24M晶振输出电流档位调节 PAGEREF _Toc448790328 \h 56
HYPERLINK \l _Toc2060624901 55.AC692X蓝牙版本5.0描述 PAGEREF _Toc2060624901 \h 57
HYPERLINK \l _Toc1248168259 56.AC692X上一文件夹改为播放文件夹第一首 PAGEREF _Toc1248168259 \h 57
HYPERLINK \l _Toc373431359 57.AC692读取当前设备播放的文件格式 PAGEREF _Toc373431359 \h 58
HYPERLINK \l _Toc1867583122 58.AC692系列解决开关机”POPO”声 PAGEREF _Toc1867583122 \h 59
HYPERLINK \l _Toc2114768554 59.AC692系列判断连接是否为Iphone还是Android手机 PAGEREF _Toc2114768554 \h 60
HYPERLINK \l _Toc1796818191 60. FM 和AUX模式下EQ不起作用修改方法 PAGEREF _Toc1796818191 \h 62
HYPERLINK \l _Toc918251273 61. 使用外部硬件EQ配置文件作为SDK中六项EQ中的normal 类型,其他类型(Rock、Pop等)不变,且可调处理方法 PAGEREF _Toc918251273 \h 63
HYPERLINK \l _Toc1752375565 62. 使用USB 、SD引脚复用后,添加AD和 SD 的CMD 复用方法 PAGEREF _Toc1752375565 \h 67
HYPERLINK \l _Toc1592178282 63.歌词buf不够导致歌词显示不了解决方法 PAGEREF _Toc1592178282 \h 67
HYPERLINK \l _Toc1055173032 64.播放Flac有卡顿现象的处理方法 PAGEREF _Toc1055173032 \h 68
HYPERLINK \l _Toc1382540077 65.692N开混响,蓝牙通话时去掉远端听到的通话有混响的效果,及关闭近端的喇叭同时会出来MIC的声音处理方法 PAGEREF _Toc1382540077 \h 69
HYPERLINK \l _Toc1096375840 66.AC692系列FM不支持50K步长,FM灵敏度调节方法 PAGEREF _Toc1096375840 \h 72
HYPERLINK \l _Toc971111938 67.AC692x系列,AC691x系列,AC690x系列RTCVDD电容需改为104 PAGEREF _Toc971111938 \h 72
HYPERLINK \l _Toc1342752934 68.AC692x 使用内置硬件EQ动态调高低音及变化不平滑处理方法 PAGEREF _Toc1342752934 \h 73
HYPERLINK \l _Toc1005075722 69.AC692x 添加外挂flash驱动及实现音乐播放功能 PAGEREF _Toc1005075722 \h 75
HYPERLINK \l _Toc1274418875 70.AC692系列去掉原唱人声实现 PAGEREF _Toc1274418875 \h 78
HYPERLINK \l _Toc65771367 71.AC692系列连接杰理蓝牙测试盒标志和后台切去蓝牙的使用 PAGEREF _Toc65771367 \h 79
HYPERLINK \l _Toc1007601442 72.AC692系列普通IO口睡眠和唤醒操作方式 PAGEREF _Toc1007601442 \h 80
HYPERLINK \l _Toc844741138 73.AC692开启蓝牙对箱和IIS功能,需要注意TWS音频流同步 PAGEREF _Toc844741138 \h 82
HYPERLINK \l _Toc1412053950 74.AC692X系列使用PR口做ad按键复用LED和aux功能 PAGEREF _Toc1412053950 \h 83
HYPERLINK \l _Toc102987703 75.AC692X系列linein能量值避免声道耦合 PAGEREF _Toc102987703 \h 88
HYPERLINK \l _Toc1870440492 76.AC692X播放文件加密后不播放提示音或者正常歌曲问题 PAGEREF _Toc1870440492 \h 89
HYPERLINK \l _Toc482744897 77.AC692X 混响声音不经过硬件EQ处理方法 PAGEREF _Toc482744897 \h 90
HYPERLINK \l _Toc1117687481 78.AC692系列RTC闹钟Pending位清除 PAGEREF _Toc1117687481 \h 91
HYPERLINK \l _Toc117034541 79.AC692系列LINEIN使用DACL/R的输入从DACR/L输出流程 PAGEREF _Toc117034541 \h 93
HYPERLINK \l _Toc356793054 80.使用RTCVDD做AD按键上拉电源,电池低电时播放音乐,长按按键有时会串键或不按按键时,按键自己会被触发情况处理办法。 PAGEREF _Toc356793054 \h 95
HYPERLINK \l _Toc1499040065 81.样机带双击回拨功能,连接手机测试功能正常。用杰理测试盒也能正常测试通话。但使用市面上(非杰理)BT168测试盒连接测试,有时双击回拨测试通话没有声音,解决方法。 PAGEREF _Toc1499040065 \h 99
HYPERLINK \l _Toc838433258 82.针对DAC左右声道串音问题的分离处理方法 PAGEREF _Toc838433258 \h 100
HYPERLINK \l _Toc1475875612 83.开K歌宝或混响模式,检测MIC能量小时,关MIC处理方法。处理后对于减少喊话底噪和啸叫有明显效果 PAGEREF _Toc1475875612 \h 104
HYPERLINK \l _Toc827318645 84. AI SDK自定义命令操作流程 PAGEREF _Toc827318645 \h 105
HYPERLINK \l _Toc1287223586 85.AC692的FCC或者BQB认证资料获取 PAGEREF _Toc1287223586 \h 108
HYPERLINK \l _Toc1389016865 86.AC692开了AUX_AD_ENABLE后,退出linein再开其他AUX通道会串音 PAGEREF _Toc1389016865 \h 108
HYPERLINK \l _Toc2075486904 87.预防主控电源引脚滤波电容大导致的概率不开机一般表现在大音箱和车机 PAGEREF _Toc2075486904 \h 110
HYPERLINK \l _Toc1660654945 88.空U盘、空SD卡检测不到设备数 PAGEREF _Toc1660654945 \h 110
HYPERLINK \l _Toc1109116339 89.在蓝牙不开后台模式时,在非蓝牙模式下(FM、MUSIC等模式)清除所有蓝牙配对信息处理方法 PAGEREF _Toc1109116339 \h 111
HYPERLINK \l _Toc2042771811 90.SDK2.6.1以上版本蓝牙ID3的调用 PAGEREF _Toc2042771811 \h 113
HYPERLINK \l _Toc1309989488 91.SDK2.6.1以上版本的电话本获取 PAGEREF _Toc1309989488 \h 115
HYPERLINK \l _Toc2027367612 92.FM模式单声道或立体声选择设置 PAGEREF _Toc2027367612 \h 118
HYPERLINK \l _Toc1647663728 93.AC692x_SDK_Emitter_V1.0发射端在接收端关机之后假死机 PAGEREF _Toc1647663728 \h 119
HYPERLINK \l _Toc754684123 94.AC692系列RTC时钟开发大整合注意点补充 PAGEREF _Toc754684123 \h 120
HYPERLINK \l _Toc935056997 95.关于DAC输出功率问题 PAGEREF _Toc935056997 \h 120
HYPERLINK \l _Toc882720157 96.692X无间断循环播放处理办法 PAGEREF _Toc882720157 \h 121
HYPERLINK \l _Toc1851059963 97.692X发射SDK减小延时方法 PAGEREF _Toc1851059963 \h 121
HYPERLINK \l _Toc1906168935 98.AC692X蓝牙跑后台,在非蓝牙模式下,手机连接蓝牙不要跳回蓝牙模式处理方法 PAGEREF _Toc1906168935 \h 122
HYPERLINK \l _Toc77989443 99.AC692系列V2.6.0以上版本开BLE退出蓝牙模式卡机问题 PAGEREF _Toc77989443 \h 124
HYPERLINK \l _Toc708652037 100.AC692系列开启经典蓝牙HID手机的显示图标为键盘设置 PAGEREF _Toc708652037 \h 124
HYPERLINK \l _Toc1033104162 101.AC692系列播内置flash提示音控制播放暂停处理方法 PAGEREF _Toc1033104162 \h 125
HYPERLINK \l _Toc143760811 102.AC692发射SDK内置FM没有声音 PAGEREF _Toc143760811 \h 127
HYPERLINK \l _Toc1716253480 103.AC692发射SDK 接收模式添加读卡器功能(自定义USB设备描述符) PAGEREF _Toc1716253480 \h 128
HYPERLINK \l _Toc1877845300 104.AC692x_SDK_release_AI_V2.4开FM时会串linein的声音 PAGEREF _Toc1877845300 \h 129
HYPERLINK \l _Toc1555814761 105.AC692系列2.6.2、2.6.3音箱SDK不播歌时与iPhone同步音量修改 PAGEREF _Toc1555814761 \h 130
HYPERLINK \l _Toc1819241183 106.AC692系列多台带对箱功能的音箱交叉配对,主机和主机配对连接后出现蓝牙断开,又快速连上问题处理方法 PAGEREF _Toc1819241183 \h 130
HYPERLINK \l _Toc1600802144 107.AC692的USB兼容性优化点 20200610 PAGEREF _Toc1600802144 \h 131
HYPERLINK \l _Toc2038559658 108.AC692的DACVDD偏置设置 20200610 PAGEREF _Toc2038559658 \h 131
HYPERLINK \l _Toc789445016 109. SDK2.6.3 开音量同步,苹果手机音量调到0,再断开连接,再连接,音量同步手机传过来一个错误音值,需要换库。 PAGEREF _Toc789445016 \h 132
HYPERLINK \l _Toc1717836685 110. SDK2.6.3 回连上苹果时,手机会播放2-3S的静音数据,导致在这个时间段内按PP键不会播放音乐问题 20200717 PAGEREF _Toc1717836685 \h 132
HYPERLINK \l _Toc247869064 111. SDK2.6.3 开对箱后,进DUT测试模式(即BQB测试模式)很难连上蓝牙测试仪(N4010或8852)解决方法 20200817 WTS PAGEREF _Toc247869064 \h 132
HYPERLINK \l _Toc141001433 112. BLE连接小米10、K30手机出现断连现象 20200910 xin PAGEREF _Toc141001433 \h 134
HYPERLINK \l _Toc408786295 113.AC692的内置FM获取电台信号指标 20200910 YWP PAGEREF _Toc408786295 \h 134
HYPERLINK \l _Toc1723744676 114.AC692系列显示大歌词文件的解决方法 20201017 YWP PAGEREF _Toc1723744676 \h 135
HYPERLINK \l _Toc968320079 115.AC692系列 2.6.3连接最新的苹果电脑会出现断开问题解决方法 20220616 lzk PAGEREF _Toc968320079 \h 137
HYPERLINK \l _Toc1696009881 116.AC692系列所有SDK版本开启频谱功能,播音乐煲机出现概率死机处理方法 20220928 WTS PAGEREF _Toc1696009881 \h 138
HYPERLINK \l _Toc965277893 117. AC692系列2.6.3sdk 播放比特率较高的wav音频文件,例如2116kbps,会出现沙沙杂音,播放比特率1411kbps的wav音频文件则没有 PAGEREF _Toc965277893 \h 139
HYPERLINK \l _Toc896323335 118. 复用SDCMD引脚应用方式 20230821 ZGH PAGEREF _Toc896323335 \h 139
HYPERLINK \l _Toc1209181178 119. AC692x_SDK_release_AI_V2.4.2_beta - Export-231024- 连接杰理之家在线调试eq复现eq的后几段无法调节 CYL PAGEREF _Toc1209181178 \h 141
HYPERLINK \l _Toc2074394232
PAGEREF _Toc2074394232 \h 141
HYPERLINK \l _Toc791611498 120. AC692x_SDK_release_V2.6.3 直接处理USB scsi的接口 PAGEREF _Toc791611498 \h 141
HYPERLINK \l _Toc371687019 121. AC692x_SDK_release_V2.6.3解除使用exfat同一目录最多只能2W多文件限制 PAGEREF _Toc371687019 \h 143
HYPERLINK \l _Toc1954278197 122. AC692x_SDK_release_V2.6.3 FAT系统获取剩余容量功能 PAGEREF _Toc1954278197 \h 143
HYPERLINK \l _Toc291791579 123. AC692x_SDK_release_V2.6.3 概率出现进入睡眠的过程中触发唤醒导致无法开机 PAGEREF _Toc291791579 \h 143
1.AC692X的升级复位可以选择软复位跳转和绝对地址跳转
如果选择软复位跳转会导致外围IO口复位,例如IO口控制的MOSF管电源电路会导致电源断电,无法升级,此时得选择绝对地址跳转。

- 来电时样机播放手机铃声 找到如下位置修改即可。
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\Tencent\Users\271964349\QQ\WinTemp\RichOle\CN_8D2{4AG%O8NAL5AN`I83.png" * MERGEFORMATINET
3.V200版本SDK进入RTC睡眠以后RTC时钟不走
需要更换一个库,后续SDK会修复此问题。
库文件百度网盘地址,请客户自己下载。
https://pan.baidu.com/s/1wLKyxa93iiPHf9cxojATGg 密码kyqr
enter_sys_soft_poweroff(); 调用进入睡眠之前一定要调用下面这个保持32768晶振的函数
set_lowpower_keep_32K_osc_flag(1);
4.V200版本SDK有一些安卓手机会出现无法蓝牙无法回连问题
需要更换一个库,后续SDK会修复此问题。
库文件百度网盘地址,请客户自己下载。
https://pan.baidu.com/s/1cpsA9XXOwnE2ctX5EpNXzg 密码ht57
5.控制开关DACVDD电压
LDO1_EN(x) 传入0或者1控制开关
- V2.0SDK FM模式播放最大音量MP3提示音可能有杂音 提示音播完以后FM可能会没有声音了 FM模式播放MP3提示音又杂音可能是因为获取这个状态get_tone_status() 不对,导致在播最大声MP3提示音的时候打开了FM的声音通道让提示音和FM的声音一起拨出来了所有出现杂音。自己在外面添加一个标志来做判断。
一.在fm_inside.c中的修改如下
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\feiq\RichOle\1170747153.bmp" * MERGEFORMATINET
二、 task_fm.c中的修改如下
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\feiq\RichOle\3552447047.bmp" * MERGEFORMATINET
FM模式播放最大音量MP3提示音以后可能会出现没声音的情况可能是因为播放完提示音以后没有释放播放提示音的资源
一.在播最大音量提示音这里第二个参数要写1.
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\Foxmail7\Temp-1784-20180606091503\Catch3534(06-06-10-01-00).jpg" * MERGEFORMATINET
二.1.void tone_play(u8 index, u8 repeat_flag)使用说明
1)repeat_flag取值 0:在播放完MP3音频文件之后自动释放RAM资源
1:在播放完MP3音频文件之后需要手动释放RAM资源
2)如果repeat_flag为1 需要手动调用mutex_resource_release("tone");来释放RAM资源。
如下图,添加音量长按放手的消息,在这个消息里面调用mutex_resource_release("tone");
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\Foxmail7\Temp-1784-20180606091503\CatchC4D1(06-06-10-01-00).jpg" * MERGEFORMATINET
7.V2.0SDK 最大提示改用播放音频文件时一直按vol+ 解码提示音被打断
参考第6点,在播最大声那里加一个判断当前在播提示音则不播放提示音即可。
8. FM白噪声大 如果客户不要求FM有立体声则直接把这个函数的参数写0,可以减小白噪声。
这个参数设置的越大立体声越明显但是白噪声也会越大
fm_inside_set_stereo(0); //set[0,128], 0 mono, 127 stereo.
9.手机音量一格蓝牙播放可能会断断续续
可能是因为有些手机音量调到1格的时候音量太小,SDK默认的AUTO_MUTE的参数阈值设的太小导致被MUTE住了。
调节AUTO_MUTE的参数,可能是因为AUTO_MUTE的是阈值设的太大导致被MUTE
sound_automute_set(AUTO_MUTE_CFG, 4, 1200, 200);
void sound_automute_set(u8 ctl, u16 packet_cnt, u16 Threshold, u8 max_cnt);
packet_cnt 连续小于阀值包的数量
Threshold 阀值
max_cnt 连续小于阀值的时间max_cnt*2ms
满足以上三个条件就会AUTO_MUTE,把音量设成0。
10.在使用is_dac_mute和is_auto_mute两个函数时应注意两个的接口的意义
is_dac_mute 用来获取当前DAC_MUTE的状态
注:
dac_mute(1,1)调用这个函数以后is_dac_mute();返回1;
dac_mute(0,1)调用这个函数以后is_dac_mute();返回0;
is_auto_mute 获取ATUO_MUTE的状态,AUTO_MUTE不会MUTE掉DAC只是把音量调成0。
注:
sound_automute_set(AUTO_MUTE_CFG, 4, 1200, 200);
AUTO_MUTE_CFG这个参数使能了AUTO_MUTE才有效果。
11.692X的OUTPUTCHANNEL对比690X的设置有修改
690X的IO选择OUTPUTCHANNEL使用DIE寄存器选择,这个寄存器的0/1选择输出OUTPUTCHANNEL的0/1。
692X有4个OUTPUTCHANNEL使用OUT和DIE两个寄存器组成2位二进制数来选择。
详细信息请查看数据手册。
12.692X 3路PWM输出参数
请去以下地址下载文档
https://pan.baidu.com/s/1acesIvng72DtfT9tq_bofw 密码iien
13.获取对箱主机和从机的播放状态
主机获取蓝牙状态get_bt_connect_status
从机获取状态用这个函数 get_tws_connect_status
14. IO驱动能力有差异 注意选择适当的IO 对于AC692X系列,在使用IO口推LED灯或者数码管的时候,需要注意IO口的可输出的驱动能力,因为对于不同颜色的LED灯需求的电流各不相同,
例如红色的LED灯需求的电流10mA,蓝牙的LED灯电流接近20mA。
如下表是AC6921A的,其他AC692X系列的IC请查看各自封装的规格书,在硬件设计上需要选择合适的IO口去推灯,不然会导致有些灯段明亮有些暗。
INCLUDEPICTURE \d "C:\Users\Administrator\AppData\Roaming\Foxmail7\Temp-3816-20180612083108\Catch5(06-13-17-14-20).jpg" * MERGEFORMATINET
15.AC692X带有RTC时钟的方案,外挂32.768KHz的晶振,需注意PR口的设置
AC692X带有RTC时钟方案,例如,在开发板可以跑,直接在样机时钟不跑,除了查找软件问题还需要注意硬件的设置,例如AC6921A主控,PR3/OSC32KI、PR0/OSC32KI复用,所以在程序需要把PR3和PR0设置为高阻态,因为PRN口有些开机的默认值。


16.AC692x主从TWS实现同时关机
在msg.h的MSG_MAIN_MAX之前添加MSG_POWER_OFF_TWS_MAIN消息,在Task_bt_key里头加入此按键消息。
Bt_tws.C文件void tws_deal_cmd(int msg, u8 value)函数加入MSG_POWER_OFF_TWS_MAIN消息。
bool tws_master_cmd_filt(int msg)函数加入过滤。
在bool tws_key_cmd_send(int msg, u8 value)函数加入MSG_POWER_OFF_TWS_MAIN处理CASE。
在void task_bt_deal(void *hdl)函数BT_TWS宏之内加入MSG_POWER_OFF_TWS_MAIN消息处理语句。
17.AC692X程序升级实现软复位还是绝对地址跳转的实现
软复位和绝对地址跳转是有差异的,主控软复位后所有寄存器和程序设置回复主控原始状态,
绝对地址跳转可以保持寄存器和程序一些变量的设置。
18.AC692X实现SD卡的CMD和DAT脚复用AD功能
#if 1//SD_DADA_MULT
#include "cpu\Adc_api.h"
extern volatile u8 adc_busy_flag;
extern u16 adc_res_api(u32 channel);
extern u32 get_next_adc_ch(void);
u16 adc_value_PB4;
u8 g_aux_online_flag;
extern u32 get_sd0_dev_busy_status_api(void);
extern void close_sd0_controller(void);
extern void release_sd0_controller(void);
void sd_data_multiplex(void)
{
u16 res = 0;
static u8 dev_online_cnt,dev_offline_cnt,adc_timeout_cnt,adc_err_cnt;
if(!get_sd0_dev_busy_status_api())
{
adc_busy_flag = 1;
//CPU_SR_ALLOC();
//OS_ENTER_CRITICAL();
//关闭 sd controller
close_sd0_controller();
//设置PA1 IO
JL_PORTB->DIR |= BIT(4);
JL_PORTB->HD &= ~BIT(4);
JL_PORTB->PU |= BIT(4);
JL_PORTB->PD &= ~BIT(4);
JL_PORTB->DIE &= ~BIT(4);
//启动ADC
//adc_ch_sel(AD_KEY_PA1);
res = adc_res_api(AD_CH_PB4);
res = adc_res_api(get_next_adc_ch());
//恢复 sd io
JL_PORTB->DIR &= ~BIT(4);
JL_PORTB->HD |= BIT(4);
JL_PORTB->PU |= BIT(4);
JL_PORTB->DIE |= BIT(4);
adc_busy_flag = 0;
//恢复 sd controller
release_sd0_controller();
//OS_EXIT_CRITICAL();
\#if 1
u8 tmp_sfr = JL_SD0->CON1 & BIT(5);
JL_SD0->CON1 |= BIT(5);
delay(5);
if(tmp_sfr == 0){
JL_SD0->CON1 &=~BIT(5);
}
\#endif
}
else {
//putchar('B');
return;
}
adc_value_PB4 = (res*33)/0x3ffL;
if(++adc_timeout_cnt > 20)
{
if(dev_online_cnt > 13) {
//puts("aux_online\n");
g_aux_online_flag = 1;
}
else if(dev_offline_cnt > 13) {
//puts("*************aux_offline*************\n");
g_aux_online_flag = 0;
}
dev_online_cnt = 0;
adc_timeout_cnt = 0;
dev_offline_cnt = 0;
adc_err_cnt = 0;
}
if((adc_value_PB4>27)&&(adc_value_PB4<31)) {
dev_online_cnt++;
}
else if(adc_value_PB4 >= 31) {
dev_offline_cnt++;
}
else {
adc_err_cnt++;
//printf("\n========err======= %d %d \n",res ,adc_value_PB4);
}
//printf("[%d]",adc_value_PB4);
}
LOOP_DETECT_REGISTER(sd_addata_multiplex) = {
.time = 5,
.fun = sd_data_multiplex,
};
#endif //SD_DADA_MULT
Adc_api.c文件作如下修改,添加u32 get_next_adc_ch(void)函数

19.AC692X实现蓝牙三方通话功能
外部声明函数: extern u8 get_second_call_status();
在Task_bt.c文件的void task_bt_deal(void *hdl)函数添加如下语句。

case MSG_BT_THREE_CALLING:
puts("MSG_BT_THREE_CALLING\n");
if ((get_call_status() == BT_CALL_OUTGOING) ||
(get_call_status() == BT_CALL_ALERT) ||
(get_call_status() == BT_CALL_INCOMING)||
(get_call_status() == BT_CALL_ACTIVE))
{
puts("222MSG_BT_THREE_CALLING\n");
status_phone = get_second_call_status();
printf("status_phone=0x%0x\n",status_phone);
if(0!=status_phone){
puts("gggggggggggg\n");
if(status_phone&0x0e){
puts("mmmmmmmmm\n");
user_send_cmd_prepare(USER_CTRL_HFP_THREE_WAY_ANSWER2,0,NULL);
}
else{
puts("????????\n");
user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
}
}
else{
user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL);
}
break;
}
break;
20.AC692X开了ECHO_EN不能用测试盒无线升级
e'q升级前关闭混响可以解决这个问题。

21.AC692X调节数字音量不起作用以及调节数字音量影响混响效果的解决办法
AC692调节数字音量不起作用,按下图修改可以解决。
AC692调节数字音量影响混响效果,因为混响效果是调数字量的,但是SDK里面是先处理了混响才处理数字音量,所以数字音量变小的时候,混响效果会减弱甚至没有。在dac_isr_cb函数直接调一下处理顺序可以解决这个问题。
22.AC692X实现低波特率的简单数据发送
#ifdef ANOTHER_UART
#define ANOTHER_BAUD 4800
void another_uart_write(char a)
{
JL_UART1->BUF = a;
asm volatile("csync");
while ((JL_UART1->CON0 & BIT(15)) == 0); //TX IDLE
}
static s32 another_test_uart_init(u32 baud)
{
u32 status = 0;
JL_IOMAP->CON1 &= ~(BIT(3) | BIT(2));
JL_PORTB->OUT |= BIT(0) ;
JL_PORTB->DIR |= BIT(1) ;
JL_PORTB->DIR &= ~BIT(0) ;
JL_UART1->BAUD = (UART_CLK / baud) / 4;
// JL_UART1->BAUD = (UART_CLK / baud_rate) / 4 - 1;
JL_UART1->CON0 = BIT(13) | BIT(12) | BIT(10) | BIT(0);
return 0;
}
#endif
23.AC692X电机PWM使用案例
1、电机PWM对应的IO如下.(电机PWM支持IO mapping,详细参考用户手册)
MCPMW0 H-PA0 L-PA3
MCPMW1 H-PC1 L-PC5
MCPMW2 H-PB5 L-PB0
2、参考代码:
///初始化电机PWM参数,各电机PWM均使用该参数,使用时调节各自的占空比即可。
mcpwm_module_on(MCPWM_INCREASE_REDUCE_MODE, 48000000L, MCPWM_CLK_DIV8, 10000L, MCPWM_USE_DENOMINATOR);
///MCPMW0 H-PA0 L-PA3
mcpwm0_init(MCPWMCH0_H_OPPOSITE, MCPWMCH0_H | MCPWMCH0_L); //若使用映射,对应io输出使能 传0即可。
set_mcpwm0(50);///占空比///MCPMW1 H-PC1 L-PC5
mcpwm1_init(MCPWMCH1_L_OPPOSITE, MCPWMCH1_H | MCPWMCH1_L);
set_mcpwm1(22);///占空比
///IO初始化
JL_PORTC->PU |= BIT(5);
JL_PORTC->PD &= ~BIT(5);
JL_PORTC->DIR &= ~BIT(5);
///MCPMW2 H-PB5 L-PB0
mcpwm2_init(MCPWMCH2_L_OPPOSITE, MCPWMCH2_H | MCPWMCH2_L);
set_mcpwm2(33);///占空比
24、AC692X开启对箱硬件EQ没有效果
需要在audio_stream.h做如下修改
25、AC692X通过蓝牙获取手机的日期和时间
在void task_bt_deal(void *hdl)函数里添加
在int btstack_status_update_deal(u8 *info, u16 len)函数获取对应的手机连接的时间。


注意:目前测试仅有Iphone手机才支持,Android的要看兼容性。
26、AC692x_SDK_release_V2.2程序RTC时钟睡眠32K晶振不振
导致此问题主要是如果开启了PR口的AD功能就会,如果是普通的IO口AD是没有问题的。
在Power.c文件的set_poweroff_wakeup_io函数末端加入adc_mux_ch_set(0);语句。
在task_idle_deal函数的加入如下几句语句,预防进入发生中断。
27、AC692X在各个模式读取RTC时间
void othermode_get_rtctime(void)
{
rtc_read_datetime(rtc_set.calendar_set.curr_rtc_time);
rtc_read_alarmtime(rtc_set.alarm_set.curr_alm_time);
puts_time(rtc_set.calendar_set.curr_rtc_time);
}




28、AC692X实现录音后退出录音模式进入音乐模式播放录音文件
AC692X的录音后播放最后录音文件有两种方式。
方式一:
把REC_PLAY_EN宏打开,在Rec_api.c文件通过MSG_REC_PLAY消息即可播放最后的录音文件。
方式二:
此种方式录音完毕后从录音模式退出到音乐文件播放录音下来的文件。
在music_player.c文件加入如下函数。
/*
MUSIC_PLAYER *obj
u32 dev usb sd0 sd1
u8 *path 文件夹"/xxxx/" 文件"/xxxx/xxxx.mp3"
u32 index 文件序号
ENUM_FILE_SELECT_MODE mode 文件播放方式
*/
extern u32 path_firstfile;
extern u32 path_totolfile;
Tbool music_play_path_dev(MUSIC_PLAYER *obj, u32 dev, u8 *path, u32 index, ENUM_FILE_SELECT_MODE mode)
{
tbool ret;
if (obj == NULL) {
puts("obj == NULL\n");
return false;
}
puts("obj == YES\n");
file_operate_set_file_sel_mode(obj->fop, PLAY_FILE_BYPATH);
file_operate_set_path(obj->fop, path, index);
file_operate_set_dev_sel_mode(obj->fop, DEV_SEL_SPEC);
file_operate_set_dev(obj->fop, dev);
puts("2\n");
ret = music_player_play(obj, NULL, 1);
if (ret == false) {
puts(">>>music_play faild\n");
return ret;
}
///stop dec
music_decoder_stop(obj->dop);
file_operate_set_file_sel_mode(obj->fop, PLAY_SPEC_FILE);
if(PLAY_LAST_FILE== mode)
{
file_operate_set_file_number(obj->fop, path_totolfile);
}else{
file_operate_set_file_number(obj->fop, path_firstfile+index-1);
}
ret = music_player_play(obj, NULL, 1);
return ret;
}
在File_operate.c文件定义如下两变量。
u32 path_firstfile=0;
u32 path_totolfile=0;

在Task_music.c文件加入消息MSG_REC_TO_MUSICMODE,如下语句。

在Task_rec.c文件定义如下变量作为从录音跳转到音乐模式的标志。
u8 rec_to_music_flag = 0;
在Rec_api.c文件的MSG_REC_STOP消息加入下语句。
29、AC692X实现MIC混响和MUSIC/FM/BT/AUX背景音乐分别调试
硬件设计上对于AUX功能最好是外部硬件耦合然后从IC的AMUX单声道输入,看AMUX输入的是左声道还是右声道,在程序上区分,如果AMUX输入是左声道,那么MIC混响数据选择右声道,如果AMUX输入是右声道,那么MIC混响数据选择左声道,同理,MUSIC/FM/BT也跟AMUX选择相同的声道,芯片DAC输出左右声道再硬件耦合一路输出。
在Echo_api.c文件echo_output_mix_dac函数作如下修改。
在Echo_api.c文件echo_audio_ctrl函数作如下修改。此语句作用是把MIC模拟输入到DAC的通道关闭。
DAC.c文件的dac_isr_cb函数里头DAC_SOUNDTRACK_COMPOUND宏关于声道耦合需要开启。
调节声音大小的例如下面的案例,对应信息加入在Task_common.c的task_common_msg_deal函数,

30、AC691X固定提示音,手机音量同步跳变解决


31、AC692X的SPDIF光纤输入实现
硬件上,需要外加电路,光纤接入主控需要一个转换电路,不能直接接入,请参考如下电路,PA5对应SPDIF的输入口。
软件上,有一个spdif.c和spdif.h的文件对应的功能实现代码。
32、AC692X 最大可放代码FLASH空间扩大修改
AC692X如果生成的目标文件大于FLASH支持可放的最大空间,前提先考虑压缩代码空间和音频文件规格,如果压缩不下来,需要修改下VM的存储大小,无论FLASH多大,VM默认大小为64KByte,可以适当的减少VM的大小,省出的空间可以用于放代码,注意,VM的大小必须是4KByte的偶数倍,而且不能小于40KByte,最多只能腾出24KByte出来。
33、FM声音太尖大声调节
对于AC692X系列,如果发现FM下的音量太大可以如下解决。直接在FM数据输入DAC_BUF前端把数据降低音量。
//static const u16 digital_fmvol_tab[MAX_DIGITAL_VOL_L + 1] AT_AUDIO = {
// 0 , //min
// 93 ,
// 111 ,
// 132 ,
// 158 ,
// 189 ,
// 226 ,
// 270 ,
// 323 ,
// 386 , //9
// 462 ,
// 552 ,
// 660 ,
// 789 ,
// 943 ,
// 1127,
// 1347,
// 1610,
// 1925,
// 2301, //19
// 2751,
// 3288,
// 3930,
// 4698,
// 5616,
// 6713,
// 8025,
// 9592,
// 11466,
// 15200, //29
// 16000, //30
// 16384 //31 max
//};
static void fm_src_output_cb(u8 *buf, u16 len, u8 flag)
{
u32 wlen;
u16 i;
s16 fm_data = (s16)buf;
s32 valuetemp;
if (flag & BIT(0)) {
if (fm_inside_dat.stream_io) {
for (i = 0; i < len/2; i++) {
valuetemp = fm_data[i];
valuetemp = (valuetemp * 5616) >> 14 ;
fm_data[i] = (s16)valuetemp;
}
fm_inside_dat.stream_io->output(fm_inside_dat.stream_io->priv, buf, len);
}
}
if (flag == BIT(0)) {
src_kick_start(1);/*idat remaind,need not read data */
} else {
src_kick_start(0);/*idat done,need read data again*/
}
}
34、AC692X获取对箱配对前后的状态
#if 1
u8 TWS_CONN_STATUS=0;
enum
{
BT_NOCONN_PHONE_AND_TWS=0, ///当前音箱既没有连接手机也没有连接上TWS
BT_CURRENT_CONN_PHONE=1, //当前只有手机连接上
BT_CURRENT_CONN_STEREO_MASTER, //当前主机连接从成功,没有手机连接
BT_CURRENT_CONN_STEREO_SALVE, //从机与主机连接成功
BT_CURRENT_CONN_STEREO_MASTER_PHONE,//当前连接的是手机,并且对箱从已经连接上
BT_CURRENT_CONN_STEREO_PHONE_MASTER,//当前主机连接从成功,同时手机已连接
};
extern u8 get_bt_current_conn_type();
u8 get_bt_current_conn_type()
{
u8 tws_role;
tws_role = get_tws_device_role();
if(tws_role == TWS_ROLE_MASTER) ///是主机
{
switch(TWS_CONN_STATUS)
{
case 0x04:
log_printf("master 0x04,BT_CURRENT_CONN_STEREO_SALVE\n");
return BT_CURRENT_CONN_STEREO_SALVE;
case 0x08: ///主从机连接上,没有连接手机
log_printf("master 0x08,BT_CURRENT_CONN_STEREO_MASTER\n");
return BT_CURRENT_CONN_STEREO_MASTER;
case 0x0a:
log_printf("master 0x0a,BT_CURRENT_CONN_STEREO_PHONE_MASTER\n");
return BT_CURRENT_CONN_STEREO_PHONE_MASTER;
default:
return BT_CURRENT_CONN_PHONE;
}
}
else if(tws_role == TWS_ROLE_SLAVE) ///是从机
{
switch(TWS_CONN_STATUS)
{
case 0x04:
log_printf("slave 0x04,BT_CURRENT_CONN_STEREO_SALVE\n");
return BT_CURRENT_CONN_STEREO_SALVE;
default:
return BT_CURRENT_CONN_PHONE;
}
}
else
{
// 如果TWS没有连接,直接返回
//主机有些按键消息,从机不需要同步实现
switch(TWS_CONN_STATUS)
{
case 0x02:
log_printf("master 0x02,BT_CURRENT_CONN_PHONE\n");
return BT_CURRENT_CONN_PHONE; ///仅连接上手机
default:
return BT_NOCONN_PHONE_AND_TWS;
}
}
return BT_NOCONN_PHONE_AND_TWS;
}
void stereo_led_deal()
{
u8 get_bt_status=0;
get_bt_status = get_bt_current_conn_type();
switch(get_bt_status)
{
case BT_NOCONN_PHONE_AND_TWS:
log_printf("BT_NOCONN_PHONE_AND_TWS\n");
break;
case BT_CURRENT_CONN_PHONE:
log_printf("BT_CURRENT_CONN_PHONE\n");
break;
case BT_CURRENT_CONN_STEREO_MASTER:
log_printf("BT_CURRENT_CONN_STEREO_MASTER\n");
break;
case BT_CURRENT_CONN_STEREO_SALVE:
log_printf("BT_CURRENT_CONN_STEREO_SALVE\n");
break;
case BT_CURRENT_CONN_STEREO_MASTER_PHONE:
log_printf("BT_CURRENT_CONN_STEREO_MASTER_PHONE\n");
break;
case BT_CURRENT_CONN_STEREO_PHONE_MASTER:
log_printf("BT_CURRENT_CONN_STEREO_PHONE_MASTER\n");
break;
default:
log_printf("BT_NOCONN_PHONE_AND_TWS\n");
break;
}
}
#endif
在Task_bt.c这里如下截图对应加入TWS_CONN_ATATUS变量赋值,同时定义变量u8 TWS_CONN_STATUS。

在Bt_tws.c加入上面的代码。
35.开机有设备播设备没设备进入蓝牙模式
开机进入IDLE模式,在IDLE模式下加上以下半秒消息的处理。
case MSG_HALF_SECOND:
puts("idle_wait_device \n");
if(os_time_get() < 200)
{
if(dev_get_phydev_total(MUSIC_DEV_TYPE, DEV_ONLINE) >0)
{
task_switch(TASK_ID_MUSIC, NULL);
return;
}
}
else if ((os_time_get() > 200) && (os_time_get() < 500)) { //2~5s
//task_time_out, run default task
task_switch(TASK_ID_BT, NULL);
return;
}
break;
36.V2.3SDK切换模式的时候播完模式提示音以后会有一点杂音
屏蔽一下两行代码即可

37.播正玄波声连续调音量有杂音
- 固定模拟音量,音量键调数字音量。 set_sys_vol 初始化的时候用这个函数设置最大等级。
屏蔽调音量处理里面的set_sys_vol 这个设置模拟音量的函数,直接设置音量数字等级sound.digital_fade_vol_l。 - 如下代码,替换void digital_vol_ctrl(void *buffer, u32 len, u8 analog_vol)函数里面的内容
volatile u16 last_val_temp = 16000;
AT_AUDIO
void digital_vol_ctrl(void *buffer, u32 len, u8 analog_vol)
{
s32 valuetemp;
u16 data_temp = 0;
u32 i;
u8 flag;
u16 curtabvol;
u16 curtabvor;
u16 fade_vol = sound.vol.digital_vol_l;
static u16 cnt;
s16 *buf = buffer;
len >>= 1;
if (sound.digital_fade == D_FADE_IN) {
sound.digital_fade_vol_l++;
if (sound.digital_fade_vol_l >= sound.vol.digital_vol_l) {
sound.digital_fade_vol_l = sound.vol.digital_vol_l;
sound.digital_fade = D_FADE_NULL;
}
} else if (sound.digital_fade == D_FADE_OUT) {
if (sound.digital_fade_vol_l) {
sound.digital_fade_vol_l--;
if (sound.digital_fade_vol_l == 0) {
sound.digital_fade = D_FADE_NULL;
}
}
}
sound.digital_fade_vol_l = analog_vol;
sound.digital_fade_vol_r = sound.digital_fade_vol_l;
if (analog_vol) {
// putchar('.');
curtabvol = digital_vol_tab[sound.digital_fade_vol_l];
curtabvor = digital_vol_tab[sound.digital_fade_vol_r];
} else {
// putchar('x');
curtabvol = 0;
curtabvor = 0;
}
for (i = 0; i < len; i += 2) {
///left channel
valuetemp = buf[i];
valuetemp = (valuetemp * last_val_temp) >> 14 ;
// valuetemp = (valuetemp * curtabvol) >> 14 ;
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i] = (s16)valuetemp;
///right channel
valuetemp = buf[i + 1];
valuetemp = (valuetemp * last_val_temp) >> 14 ;
// valuetemp = (valuetemp * curtabvor) >> 14 ;
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
buf[i + 1] = (s16)valuetemp;
}
cnt++;
if(last_val_temp < digital_vol_tab[sound.digital_fade_vol_r])
{
if(sound.digital_fade_vol_r < 5)
{
if(cnt%2 == 0)
last_val_temp += 1;
}
else if(sound.digital_fade_vol_r < 10)
{
last_val_temp += 1;
}
else if(sound.digital_fade_vol_r < 15)
{
last_val_temp += 2;
}
else if(sound.digital_fade_vol_r < 20)
{
last_val_temp += 4;
}
else if(sound.digital_fade_vol_r < 25)
{
last_val_temp += 7;
}
else
{
last_val_temp += 10;
}
}
else if(last_val_temp > digital_vol_tab[sound.digital_fade_vol_r])
{
valuetemp = last_val_temp-digital_vol_tab[sound.digital_fade_vol_r];
if((sound.digital_fade_vol_r > 25) || (valuetemp > 1500))
{
last_val_temp -= 10;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 750))
{
last_val_temp -= 7;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 300))
{
last_val_temp -= 4;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 100))
{
last_val_temp -= 2;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 50))
{
last_val_temp -= 1;
}
else if((sound.digital_fade_vol_r > 20) || (valuetemp > 20))
{
if(cnt%2 == 0)
last_val_temp -= 1;
}
}
}
38.V2.3SDK时钟模式下闹钟开关关掉,软关开机起来进时钟模式会重新打开闹钟
详细原因见下图:void reset_irtc(RTC_TIME *curr_time, RTC_TIME *curr_alm)函数里面
INCLUDEPICTURE \d "F:\QQ File\1652580557\Image\C2C\]$_KR5[8C`G~6OCG]GLPNM4.jpg" * MERGEFORMATINET

解决方法:void reset_irtc(RTC_TIME *curr_time, RTC_TIME *curr_alm)函数里面,先获取闹钟状态再执行rtc_reset_irtc();,然后重设闹钟开关。
39.AC692X动态调节蓝牙发射功率
步骤一:在bt_configs_users.c的bt_setup_init函数作如下改动

步骤二:把task_bt_deal函数半秒去加入如下语句。
步骤三:在btstack_status_update_deal函数添加如下语句。



步骤四:在bt_discon_complete_handle函数添加如下语句。
40.AC692X动态切换手机或者蓝牙接听电话
变量phone_connect_flag这个标志在需要清0和置1设置,清0就是来电用蓝牙,置1就是来电在手机端,BT_HFP_EN_SCO_DIS宏要打开。
41.AC692X MIC和AUX 使用同一个IO做信号输入设置
这种使用方式仅适用于那些,AUX口和MIC同时绑定在一个IO引出的IC。比如AC6925B:

实现原理是:MIC电路上拉电源使用DAC_VDD电源。当进入AUX模式时,就把DAC_VDD电源关掉。音频信号无法从MIC电路进入。退出AUX后恢复DAC_VDD电源。
弊端:1、K歌宝类产品不适用此类设计。 2、当正在通话时,如果样机有接入AUX信号。那么AUX信号跟MIC信号将一同混入,无法关掉AUX信号。
软件修改:

42.AC692获取U盘或者SD/tf卡里头文件夹序号、文件夹总数和文件序号、总数
err = file_operate_file_sel(obj->fop, &(bp_info->f_info));
/////////////////////以下信息需要在file_operate_file_sel函数之后调用20180821//////////////////////////
{
u32 dir_cnt=0,dir_total=0,file_cnt=0,file_tatals=0;
dir_cnt = music_player_get_folder_number(obj);
file_cnt = music_player_get_file_number(obj);
dir_total = music_player_get_folder_total(obj);
file_tatals = music_player_get_total_file(obj);
printf("******************dir_cnt= %d file_cnt=%d dir_total=%d file_tatals=%d\n",dir_cnt, file_cnt, dir_total, file_tatals);
}
在函数music_player_play调用如上语句。




43.AC692外挂FM IIC与SD卡复用
总的方法就是iic处理的时候关掉SD检测和电源,iic处理完再开启检测,FM模式退出后开启SD电源。支持AC692所有 SDK 版本。
1、在FM初始化关闭SD电源:
添加头文件 #include "dev_sd.h"
关闭SD电源: SD0调用:sd0_power_api(DEV_POWER_OFF);
SD1调用:sd1_power_api(DEV_POWER_OFF);
2、在iic.c的void iic_start(void)函数里面先关掉SD卡检测:
SD0调用:sd0_ioctl_api((void *)&sd_busy, SDMMC_GET_CTRLER_FLAG);
SD1调用:sd1_ioctl_api((void *)&sd_busy, SDMMC_GET_CTRLER_FLAG);
注意:需要添加外部声明:extern s32 sd0_ioctl_api(void *parm, u32 cmd);
extern s32 sd1_ioctl_api(void *parm, u32 cmd);
3、在iic.c的void iic_stop(void)函数里面打开SD卡检测:
SD0调用:sd0_ioctl_api((void *)&sd_busy, SDMMC_GET_CTRLER_FLAG);
SD1调用:sd1_ioctl_api((void *)&sd_busy, SDMMC_GET_CTRLER_FLAG);
4、在FM退出时打开SD电源:
SD0调用:sd0_power_api(DEV_POWER_ON);
SD1调用:sd1_power_api(DEV_POWER_ON);
44.样机开了一拖二或者对箱连接手机播放卡顿在特殊环境才会出现 可能是因为旁边有多个测试盒开着
公版SDK开了一拖二或者对箱连上手机后SDK默认设置是还可以被其他设备搜索到,如果旁边用多个测试盒开机频繁连接这个样机就会导致播放声音卡顿,手动用手机连不会又问题。
判断是否是这个问题引起的可以在连接手机以后关掉蓝牙可发现测试是否还有问题。
可发现可连接用这个函数设置 bt_work_state_control
45.LINEIN从DAC进去可能出现LINEIN关不掉的问题
在关LINE IN的后面加上
LR_2_L(0);
LR_2_R(0);
HP_R_EN(1); LINEIN从右声道进用这行
HP_L_EN(1); LINEIN从左声道进用这行
46.开机判断电压是否允许开机的处理放在了这个函数里面power_on_detect_deal 公版SDK默认没有打开
注意这个函数里面还有长按开机的判断如果是上电开机的要注意处理。
47.录音回放功能公版SDK已经做好了 看这个宏REC_PLAY_EN

具体处理可以在这里自行修改。
48. SPI DMA传输数据 两个692发送和接收播放SPI 传输的声音数据我们有做好DEMO。
主要DMA指针不能指向常量数组,因为常量数组本质是代码存在FLASH里面,读FLASH的时间可能会卡住DMA传输。
49.插MIC有杂音问题
处理流程如下:
检测到插MIC打开模拟通道把MIC增益设成0切MUTE掉MIC。延迟一段时间再开MIC。

混响第一声改成数字,在混响数据输入函数里面把前面一段时间的数据清掉,然后再把第一声改回模拟。

50.692X 2.31和2.4版本开TWS开硬件EQ在线调试声音变调
AC692X 开TWS 音效配置解决方法如下:
硬件EQ:#define AUDIO_EFFECT_A2DP (AUDIO_EFFECT_TWS_SYNC | AUDIO_EFFECT_HW_EQ)
软件EQ: #define AUDIO_EFFECT_A2DP (AUDIO_EFFECT_TWS_SYNC |AUDIO_EFFECT_SW_EQ) //不能开限幅器
51.数字信号与模拟信号layout注意
1)AC692X AC691X的layout DACL/R与数字信号不可并行layout,数字信号会干扰DACL/R模拟信号。播放歌曲会有杂音。
2)OSC24M IN/OUT晶振周围尽量避开数字信号,不可与数字信号并行layout,OSC24M IN/OUT易受数字信号干扰,表现在引起蓝牙播歌咔音,距离短,特别是RGB灯板的更应注意。
52.AC692X调节对箱的主从声道输出设置

53.AC692X获取每次所连接手机蓝牙地址

54.AC691X 24M晶振输出电流档位调节
/////时钟初始化后调用 范围0-0x1f,最高0x1f
SFR(WLA_CON8, 8, 5, 0X8);
55.AC692X蓝牙版本5.0描述
在上层APP程序加入如下修改,把蓝牙版本修改为5.0版本。
extern u8 *get_device_version(void);
u8 *lmp_pal_version = get_device_version();
*lmp_pal_version = 0x09;
56.AC692X上一文件夹改为播放文件夹第一首
在file_operate.c文件的u32 file_operate_file_sel(FILE_OPERATE *obj, FOP_BP *bp_info)函数,
obj->fop_info->filenum = curr_file;
status = file_operate_op(obj, FOP_OPEN_FILE_BYNUM, NULL, NULL);修改为如下。
57.AC692读取当前设备播放的文件格式
在music_decode.c文件如下
应用案例在music_player.c的music_player_ab_repeat_close函数有呈现。
58.AC692系列解决开关机”POPO”声
出现原因:导致开关机有”POPO”声(特别是DACL/R串接有隔直电容更大声),是因为关机后DACL/R高阻态,电容存储的电释放缓慢,如果这时再开机再初始化DAC模块,就会有快速下拉然后快速上升的的脉冲,从而出现”PO”声。
解决思路:把DACL/R的电释放完。
解决方法:程序上DAC模块初始化前,开内部DAC寄存器的下拉10K和VCOMO寄存器的下拉1K,然后示波器看DACL/R的放电到0V的时间,此时间就是开了下拉10K和1K后需要等待的延时时间。关机“PO”在进入关机时调用DAC_OFF,关闭DAC模块,延时一会,然后进入关机。
开机DAC模块打开处加入如下语句。
SFR(JL_AUDIO->DAA_CON0, 7, 1, 1); ///DACL/R下拉10K使能,1打开
SFR(JL_AUDIO->DAA_CON1, 15, 1, 1); ///VCOMO下拉1K使能,1打开
delay(5000000);delay(5000000); /////此延时时间根据实际示波器确定
delay(5000000);delay(5000000);
delay(5000000);delay(5000000);
delay(5000000);delay(5000000);
delay(5000000);delay(5000000);
SFR(JL_AUDIO->DAA_CON0, 7, 1, 0);
SFR(JL_AUDIO->DAA_CON1, 15, 1, 0);
解决关闭“PO”声
sound_drv->off(NULL); ///关闭DAC模块
delay(500000);delay(500000); ///根据实际延时

59.AC692系列判断连接是否为Iphone还是Android手机
AC690系列区分手机连接的是Iphone还是Android,可以如下配置。
char apple_string[]="Apple Inc";
u8 Is_Iphone =0;
void manufacturer_handle(char *msg)
{
puts(msg);
putchar('\n');
log_printf("app_len=%0d\n",sizeof(apple_string));
if(0==memcmp(msg, apple_string, (sizeof(apple_string)-1))){
Is_Iphone=1;
log_printf("\nPPPP\n");
}else{
Is_Iphone=0;
log_printf("\ntttyy\n");
}
}

user_send_cmd_prepare(USER_CTRL_HFP_CMD_GET_MANUFACTURER, 0, NULL);
60. FM 和AUX模式下EQ不起作用修改方法
AUX模式下设置:

FM模式下设置:

61. 使用外部硬件EQ配置文件作为SDK中六项EQ中的normal 类型,其他类型(Rock、Pop等)不变,且可调处理方法
1、加载调式好的EQ配置文件:

2、(右边为修改之后代码)


3、(右边为修改之后代码)

4、(右边为修改之后代码)

使用USB 、SD引脚复用后,添加AD和 SD 的CMD 复用方法 1、USB_SD0_MULT_EN 宏定义 置1

在dev_manage.c文件中的void suspend_sd_io(void)添加 ad检测函数sd1_ad_deal()

void sd1_ad_deal(void) 具体实现代码如下:
void sd1_ad_deal(void)
{
if(is_adc_busy){
printf("i");
return;
}
is_adc_busy = 1;
adc_res_api(AD_CH_MULT_SD_CMD_CH);
//channel 为sdk局部变量,需改为全局变量
earphone_check_ad_val = adc_res_api(ad_table[channel]);
is_adc_busy = 0;
}
63.歌词buf不够导致歌词显示不了解决方法
- 从歌词文件中可以看到如下图,有较长(20多分钟)的时间标签并且有对应的歌词;一般还会有歌词解析错误、歌词buf不够的打印信息。

2)在lyrics_api.h中设置歌词时间标签的buf大小
64.播放Flac有卡顿现象的处理方法
1)在audio_param.h中设置相关的bug大小

2)把music模式的主频提高
65.692N开混响,蓝牙通话时去掉远端听到的通话有混响的效果,及关闭近端的喇叭同时会出来MIC的声音处理方法
1、修改方法:左边为原始SDK,右边为修改的
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\9CGH{8%OCQ$~RDSLE]94O_T.png" * MERGEFORMATINET
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\]M623O7ZO8]}~30M5C4{OGG.png" * MERGEFORMATINET
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\F_A~Y$(~%JK`@9F)FPMX415.png" * MERGEFORMATINET
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\X[{)SH3XSDAO32V5TBP3~WE.png" * MERGEFORMATINET
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\]275}SNC1%WXWW91OO2UR}S.png" * MERGEFORMATINET
INCLUDEPICTURE "C:\Users\admin01\AppData\Roaming\Tencent\Users\121063994\QQ\WinTemp\RichOle\FKY@$D3B5%AAG)({`[AE592.png" * MERGEFORMATINET
66.AC692系列FM不支持50K步长,FM灵敏度调节方法
AC692系列的FM不支持50K步长的调台,FM搜台灵敏度可以通过SDK发布的文档《AC692x_SDK_介绍》的第八章提供的方法解决。
67.AC692x系列,AC691x系列,AC690x系列RTCVDD电容需改为104
1、AC692x系列,AC691x系列,AC690x系列有拉出RTCVDD引脚的封装,
RTCVDD引脚的退耦电容生产时统一改为104,不能使用大于104的电容。
2、AC691x系列使用OTP版本生产时,前期一定要使用flash版本试产,待程序稳定后再切换到OTP版本量产。因OTP只能烧录一次,若生产过程中出了问题,修改后没办法重烧。
68.AC692x 使用内置硬件EQ动态调高低音及变化不平滑处理方法
1、在timer0中断中添加eq_gain_smooth_deal函数(变化时间根据实际调)如下图:
函数实现代码内容如下(放在eq.c文件中)
/*
** 函数功能 :EQ增益处理函数
** 函数形参 :void
** 返回值 :void
** 备注 :主要处理电位器调高低音时产生的PO~PO~声(实现原理:增益逐个等级变化,不直接设置)
: 该程序修改的是 用户自定义EQ文件中的增益值。
: 需更换一个audio_lib.a库文件(适用范围2.3、2.5.1SDK ,将EQ增益范围改为 -48 ~ 48)
*/
int eq_gain_smooth[10];
void eq_gain_smooth_deal(void)
{
u8 eq_update_flag = 0;
u8 i = 0;
if (eq_ops==0)return;
for(i=0;i<10;i++)
{
if(hw_eq_param.filt.freq_gain[6][i] > eq_gain_smooth[i])
{
hw_eq_param.filt.freq_gain[6][i]--;
eq_update_flag = 1;
}
else if(hw_eq_param.filt.freq_gain[6][i]< eq_gain_smooth[i])
{
hw_eq_param.filt.freq_gain[6][i]++;
eq_update_flag = 1;
}
}
if(eq_update_flag){
eq_mode_set(eq_arg.mode);
}
}
附:高低音调节例子:
需要替换audio库文件:
链接: https://pan.baidu.com/s/160Nvx-gICEnOBiJlNJGQ5w 提取码: 9h6x
69.AC692x 添加外挂flash驱动及实现音乐播放功能
功能简单说明:在音乐模式下实现播放外挂flash 里面的歌曲的功能,操作方式与SD卡,U盘一致。
注意:flash 需预先把音乐文件和fat文件系统烧录进flash、目前不支持写操作。
添加spi 驱动和读写Flash 驱动文件(一共4个文件如下)

配置FLASH所用到的信息(IO, 空间大小等)

添加外挂flash驱动 添加 EX_NOR_FLASH_EN flash使能的宏定义。
flash初始化(board.c中board_main函数中添加exflash_init()) 用户需注意该函数返回值,只有返回0才能正常使用
1:ID ERR :flash 读取全FF ,flash通信不正常
2:ID OK/FAT ERR:flash 读取非全FF ,flash没有fat文件系统
注册flash(dev_manage.c) 添加设备的句柄。


注册设备句柄

dev_manage.h 添加extern声明
- 把flash添加进音乐播放的设备


相关代码:
链接: https://pan.baidu.com/s/16LB9zduRgQXgybKXsc1P0g 提取码: x2ye
70.AC692系列去掉原唱人声实现
在void dac_isr_cb(void *dac_buf, u8 buf_flag)函数增加如下语句
把APP_dac_digital_lr_compare函数放置在DAC.c那里。
AT_AUDIO
u8 APP_dac_digital_lr_compare(void *buffer, u32 len)
{
u32 i=0;
u8 j=0;
s16 *buff = buffer;
u16 tmp1, tmp2;
len>>=1;
while(i<len){
if(buff[i]>=0) tmp1 = buff[i];
else tmp1 = -buff[i];
if(buff[i+1]>=0) tmp2 = buff[i+1];
else tmp2 = -buff[i+1];
if((tmp1-tmp2)==0)
{
j++;
}
i+=2;
}
len>>=1;
if(j>=len){
return 0;
}
return 2;
}
71.AC692系列连接杰理蓝牙测试盒标志和后台切去蓝牙的使用
log_printf("get_remote_test_flag=0x%0x\n",get_remote_test_flag());
if(get_remote_test_flag()){
no_background_suspend();
bt_task_sta = BT_WAITINT_INIT;
}else{
background_suspend();
bt_task_sta = BT_SUSPEND;
}

函数extern bool get_remote_test_flag();返回值为1则是连接了杰理的测试盒,0则没有连接杰理测试盒。
72.AC692系列普通IO口睡眠和唤醒操作方式
AC692系列可以通过普通IO口进入睡眠和唤醒,调用函数是enter_sys_sleep_mode();进入睡眠。
设置使用哪一个普通IO口唤醒的函数static void set_sleep_mode_wakeup_io();
注意:如果系统时钟跑192MHz,会无法唤醒,需要睡眠前设置下系统时钟为120MHz或者160MHz.
如下使用PB4 作为 WAKEUP_12唤醒口,
static void set_sleep_mode_wakeup_io(){
enter_sleep_mode_set(WAKEUP_12, WAKEUP_DOWN_EDGE);
}

唤醒后打印出来对应JL_WAKEUP->CON3的BIT(12)就是WAKEUP_12的唤醒标志。如下图。
WAKEUP_0也可以作为任意普通IO的映射来唤醒,
void app_enter_sleep_mode_1()
{
extern void set_sys_freq(u32 out_freq);
#define IDLE_Hz 120000000L
set_sys_freq(IDLE_Hz);
enter_sys_sleep_mode();
}
73.AC692开启蓝牙对箱和IIS功能,需要注意TWS音频流同步

74.AC692X系列使用PR口做ad按键复用LED和aux功能
在一些项目中可能会使用改到ad按键复用推普通LED,同时又要复用linein检测的功能的原理设计可以参考以下原理接线图,注意LED的接法,不可接反,否则会出现ad按键无法使用的问题。
上图是硬件的接线图,特别注意的一点是,复用了linein检测功能,最好不要使用100K以上的按键电阻,否则会有可能出现串键的可能。
软件设计如下:本次软件使用的是内部上拉电阻。
1、打开linein检测和复用ad按键的宏
2、按键电阻电压值的计算

- 按键电阻值的按键表修改


- 在获取按键值get_adkey_value(void)


- 下面是ad按键复用推灯的函数操作流程: 在adc_api.c中添加以下的修改:

相关的函数定义:
#if LED_2_ADKEY_EN
#define LED_2_ADC_IO_PRX PORTR2
#define LED_2_ADC_CHECK() do{PORTR_PU(LED_2_ADC_IO_PRX, 1);\
PORTR_PD(LED_2_ADC_IO_PRX, 0);\
PORTR_DIR(LED_2_ADC_IO_PRX, 1);\
PORTR_DIE(LED_2_ADC_IO_PRX, 1);}while(0)
#define ADC_2_LED_CHECK() do{PORTR_PU(LED_2_ADC_IO_PRX, 0);\
PORTR_PD(LED_2_ADC_IO_PRX, 0);\
PORTR_DIR(LED_2_ADC_IO_PRX, 0);\
PORTR_DIE(LED_2_ADC_IO_PRX, 1);}while(0)
#endif
7. 在LED扫描函数的修改,注意的是这个是低电平点亮LED的功能,在设置LED的状态的时候要注意。 
75.AC692X系列linein能量值避免声道耦合

声音走模拟,可以左右声道,能量值采集只采一个声道,就可以保留左右模拟声道独立。
这样有个弊端,如果输入的linein只有一个声道有声音的话,就会出现能量值不对,这样无解了。

开了ladc的那个声道,会偏弱1-2个dB,有必要的话,在linein下,可以设置下左右声道的音量不一样。
开ladc的声道,比不开ladc的声道,大1-2级音量。
76.AC692X播放文件加密后不播放提示音或者正常歌曲问题
在如下的函数music_play_mutex_stop和music_play_stop加入语句 dec_cipher.cipher_enable=0;
77.AC692X 混响声音不经过硬件EQ处理方法
默认sdk如果打开了混响的开关及硬件eq,我们混响的数据是经过EQ处理的。如果需要不经过硬件EQ处理需要以下处理:开启EQ的中断处理函数,将混响数据输出的函数放进EQ的中断中。
1、在混响同步采样率处理的函数里添加初始化混响EQ的代码。
a、audio_stream.h文件中修改宏定义
#define AUDIO_EFFECT_ECHO (AUDIO_EFFECT_HW_EQ)
b、在echo_api.c文件中的 void echo_dac_adc_sr_sync(void)函数中添加以下内容(主要是灰色部分):
AUDIO_STREAM *echo_stream_io = NULL;
void echo_dac_adc_sr_sync(void)
{
if (!echo_var.run_flag) {
return;
}
u16 ladc_sr = ladc_get_samplerate();
u16 dac_sr = dac_get_samplerate();
printf("echo_sr_sync, ad_sr = %d, da_sr = %d\n", ladc_sr, dac_sr);
if (ladc_sr != dac_sr) {
ladc_set_samplerate(dac_sr);
}
#if (EQ_RUN_SEL == EQ_RUN_HW)
AUDIO_STREAM_PARAM stream_param;
stream_param.ef = AUDIO_EFFECT_ECHO;
stream_param.ch = 2;
stream_param.sr = dac_sr;
echo_stream_io = audio_stream_init(&stream_param, NULL);
if (echo_stream_io) {
echo_stream_io->clear(echo_stream_io->priv);
echo_stream_io->set_sr(echo_stream_io->priv, dac_get_samplerate(), 1);
}
#endif
}
3. 打开EQ的中断 
- EQ中断函数如下(将混响数据处理放进EQ的中断回调函数中) #include "echo_api.h"
void eq_isr(s16 *outbuf, u16 npoint)
{
//printf("e"); //若发现程序在运行过程发现没有混响,可打开打印若没有就是因为EQ被关掉了
#if ECHO_EN
echo_output_mix_dac(outbuf, DAC_BUF_LEN);
#endif
} - 注释掉原来sdk在 dac.c 中DAC中断回调dac_isr_cb中的混响数据处理函数:

78.AC692系列RTC闹钟Pending位清除
在软关机后闹钟唤醒没有清Pending再次进软关机会复位的问题,修复修改power.cvoid wakeup_pending_deal(void){ u8 reg = 0; u8 almen = 0; reg = get_wake_up_type(); if(reg &BIT(0)){ log_printf("--PCNT_OVF--\n"); RTC_SFR_SET(RTC_CON_ADDR11, 6, 1, 1); } if(reg &BIT(1)){ log_printf("--EDGE OVF--\n"); if(check_io_wakeup_pend()){ log_printf("--PR PORT--\n"); } } if(reg &BIT(2)){ log_printf("--ALMOUT--\n"); almen = get_rtc_alarm_en(); alarm_sw(0); alarm_sw(almen); } if(reg &BIT(3)){ log_printf("--LDO5v WKUP--\n"); RTC_SFR_SET(RTC_CON_ADDR07, 6, 1, 1); } if(reg &BIT(4)){ log_printf("--VDD5v_LVD_WKUP--\n"); void CLR_LVD_PND(void); CLR_LVD_PND(); } if(reg &BIT(5)){ log_printf("--RTCVDD_LVD_WKUP--\n"); }
}
79.AC692系列LINEIN使用DACL/R的输入从DACR/L输出流程

SDK_CFG.H里头的DAC_CHANNEL_SLECT宏根据实际选择。
//DAC声道选择:DAC_L_R_CHANNEL / DAC_L_CHANNEL / DAC_R_CHANNEL
#define DAC_CHANNEL_SLECT DAC_L_CHANNEL//DAC_L_R_CHANNEL

测试的时候可以借用示波器看波形的变化,要么就单独的拿3.5MM的音频接口引出DAC的L或者R出来测试。
80.使用RTCVDD做AD按键上拉电源,电池低电时播放音乐,长按按键有时会串键或不按按键时,按键自己会被触发情况处理办法。


以上这两处的做法目的是,过滤掉低电播歌时,特别是最大声播放时。电压抖动造成RTCVDD电压有时比VDDIO高的情况。但又保证开机时,RTCVDD会去跟VDDIO做比较,如果RTCVDD比VDDIO时,要降低RTCVDD电压。RTCVDD需要VDDIO做为参考,最高电压0x3FF . 当RTCVDD比VDDIO电压高时,容易导致按键错位串键。



建议:使用RTCVDD做AD按键上拉电源时,按键电压尽量低(2.5V 以下相对保险)。越小越好。样机功能不必要使用RTCVDD作为AD按键上拉电源时,都使用VDDIO做为AD按键上拉电源,这样可以直接避免掉以上串键等隐患。
81.样机带双击回拨功能,连接手机测试功能正常。用杰理测试盒也能正常测试通话。但使用市面上(非杰理)BT168测试盒连接测试,有时双击回拨测试通话没有声音,解决方法。

82.针对DAC左右声道串音问题的分离处理方法
原理:分别检测DAC左右声道能量,当哪个声道没有能量时就将它设置为高阻态。
检测实现函数内容:
static s32 abs(s32 a)
{
if(a > 0){
return a;
}else{
return (-a);
}
}
bool dac_l_mute = 0;
bool dac_r_mute = 0;
bool dac_l_r_control_flag = 0;
void dac_digit_vcomo_value_deal(void *buffer,u16 len)
{
u32 dac_l_energy_value=0;
u32 dac_r_energy_value=0;
static u16 dac_data_l_count=0;
static u16 dac_data_r_count=0;
static u16 dac_data_r_l_count=0;
u32 i;
s16 *buf = buffer;
len >>=1;
for(i = 0; i < len; i= i+2)
{
dac_l_energy_value += abs(buf[i]);
dac_r_energy_value += abs(buf[i + 1]);
}
if((dac_r_energy_value < 0) && (dac_l_energy_value < 0))
{
if(dac_data_r_l_count < 100)
dac_data_r_l_count++;
if(dac_data_r_l_count > 99)
{
dac_data_r_l_count = 0;
dac_hp_en(DAC_CHANNEL_SLECT);//dac_hp_toggle
}
}
else if ((dac_r_energy_value > 0) && (dac_l_energy_value > 0))
{
if(dac_data_r_l_count < 100)
dac_data_r_l_count++;
if(dac_data_r_l_count > 99)
{
dac_hp_en(DAC_CHANNEL_SLECT);//dac_hp_toggle
}
}
else
{
if(dac_data_r_l_count > 0)
dac_data_r_l_count--;
if(dac_data_r_l_count == 0)
{
if(dac_l_energy_value)
{
if(dac_data_l_count > 0)
dac_data_l_count--;
if(dac_data_l_count == 0)
{
if(dac_l_mute)
{
dac_l_mute = 0;
HP_L_EN(1);
}
}
}
else
{
if(dac_data_l_count < 100)
dac_data_l_count++;
if(dac_data_l_count > 99)
{
dac_data_l_count = 0;
if(!dac_l_mute)
{
dac_l_mute = 1;
HP_L_EN(0);
}
}
}
if(dac_r_energy_value)
{
if(dac_data_r_count > 0)
dac_data_r_count--;
if(dac_data_r_count == 0)
{
if(dac_r_mute)
{
dac_r_mute = 0;
HP_R_EN(1);
}
}
}
else
{
if(dac_data_r_count < 100)
dac_data_r_count++;
if(dac_data_r_count > 99)
{
if(!dac_r_mute)
{
dac_r_mute = 1;
HP_R_EN(0);
}
}
}
}
}
}
函数在DAC中断中调用地方:

83.开K歌宝或混响模式,检测MIC能量小时,关MIC处理方法。处理后对于减少喊话底噪和啸叫有明显效果
原理:检测ladc下 MIC的能量,能量小到一定阀值时,把MIC接往DAC的链路断开,并把MIC采集到的值,直接全部置0。

- AI SDK自定义命令操作流程 APP异步发数据给固件的操作流程:


打印信息如下:
使用杰理的APP,不开放自定义services,需要添加自定义操作,只能通过自定义命令JL_OPCODE_CUSTOMER_USER,利用这个通道去封装自己需要的功能。类似于提供一个BLE的串口功能。
固件异步发数据给APP流程:
打印如下:
固件SDK封装例子:
85.AC692的FCC或者BQB认证资料获取
链 接:https://pan.baidu.com/s/1rjzwLleLGwTur2L6dL60Ew 提取码:delg
链接:https://pan.baidu.com/s/1-_qCYw_mQaX63pBYNCumvw
提取码:j6vs
86.AC692开了AUX_AD_ENABLE后,退出linein再开其他AUX通道会串音
开了AUX_AD_ENABLE后,公版SDK进入linein模式初始化有以下操作
打开了linein_channel_open,但是在退出linein模式的时候没有执行关闭linein_channel_close。

解决该问题需要在退出linein模式的时候执行:linein_channel_close(LINEIN_CHANNEL,0);

87.预防主控电源引脚滤波电容大导致的概率不开机一般表现在大音箱和车机
一般大音箱和车机PCB上的VMCU或者VDDIO总和都会有几百uF的大电容存在,这就存在上电和放电时间过慢的问题,由于芯片内部是由主控和FLASH芯片双绑定的,同时应用层的代码资源都是放在FLASH芯片,如果主控在2.0V已经跑起来,FLASH芯片要等到2.4V或者2.6V才正常工作,由于外部的大电容存在,2.0V到2.6V上升的时间t被拉长,那么就有机会导致FLASH初始化不成功,导致应用层没有跑起来,这过程还有概率导致FLASH的读写不定态,从而把FLASH内的资源被修改。
解决方法:修改power.c 中的 power_init_app 函数, 把 LVD 启动电压改为 2.4V或者2.6V。如果是VMCU稳定输入电压,非小电池供电的可以选择2.6V(小电池下LVD设置得太高,电压抖动厉害会导致低电复位)。
注意:烧写器烧写 LVD 档位要保证是 2.6v,如果方案是大音箱或者车机这种外部有大电容放电方案,该补丁一定要打上
88.空U盘、空SD卡检测不到设备数
插入空的U盘、空SD卡,用dev_get_phydev_total(MUSIC_DEV_TYPE, DEV_ONLINE)函数去检测设备数量的时候,返回的值是0,如果要求插入空的设备后,也要求有相对的返回值,可以用下面的函数去检测设备(放在dev_manage.c中)
u8 my_get_device_num(void)
{
DEV_HANDLE dev;
u8 ret = 0;
u32 dev_status_tmp;
dev = dev_get_fisrt(DEV_ALL, 0);
if (dev == NULL) {
return ret;
}
while (1) {
if (DEV_ERR_NONE == dev_get_online_status(dev, &dev_status_tmp)) {
if (dev_status_tmp) { //设备在线
//dev_power_ctrl(dev, DEV_POWER_ON);
ret++;
}
}
dev = dev_get_next(dev, DEV_ALL, 0);
if (dev == NULL) {
return ret-1;
}
}
}
89.在蓝牙不开后台模式时,在非蓝牙模式下(FM、MUSIC等模式)清除所有蓝牙配对信息处理方法
在其他模式时已经不跑,所以处理思路是直接清除记忆蓝牙配对的MV:



90.SDK2.6.1以上版本蓝牙ID3的调用
获取蓝牙ID3需要注册user_get_bt_music_info回调函数,在开始播放歌曲才会有歌曲ID3信息打印出来;获取ID3中的歌曲总时间、当前播放时间需要发送USER_CTRL_AVCTP_OPID_GET_PLAY_TIME命令才能获取,每发送一次返回一次总时间和当前播放时间。
1、支持的蓝牙ID3信息和注册获取蓝牙ID3的回调函数
1)目前蓝牙ID3支持获取如下信息
2)注册获取蓝牙ID3回调函数user_get_bt_music_info
user_get_bt_music_info在bt_configs_user.c文件里头已有定义
在bredr_handle_register接口中添加user_get_bt_music_info的接口注册 bt_music_info_handle_register(user_get_bt_music_info);
3)每次播放歌曲会有类似如下ID3信息:
- 获取蓝牙ID3的歌曲总时长、当前播放时间 1)、获取一次蓝牙播放歌曲的总时间、当前播放时间:
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_GET_PLAY_TIME, 0, NULL);
发送一次会有一次总时长和当前时间的打印
2)、实时获取蓝牙播放歌曲的当前时间
在蓝牙半秒里面发送命令
if(BT_STATUS_PLAYING_MUSIC == get_bt_connect_status()) {
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_GET_PLAY_TIME, 0, NULL);
}
如下图:
91.SDK2.6.1以上版本的电话本获取
实现电话本工需要:启用PBAP协议、添加并注册获取电话本接口、开启手机电话本共享、发送消息获取电话本
启用PBAP协议
打开PBAP协议宏 在bt_configs_user.c加入如下两条语句:
#define USER_SUPPORT_PROFILE_PBAP 1
extern void set_supprot_pbap();
添加PBAP协议通道 bt_profile_select_init函数修改如下:


2、添加并注册获取电话本接口
1)PBAB电话本的回调函数
extern void pbap_register_packet_handler(void (*handler)(u8 type, const u8 *name, const u8 *number, const u8 *date));
static void phonebook_packet_handler(u8 type, const u8 *name, const u8 *number, const u8 *date)
{
static u16 number_cnt = 0;
printf("NO.%d:", number_cnt);
number_cnt++;
printf("type:%d ", type);
if (type == 0xff) {
number_cnt = 0;
}
if(name) {
printf(" NAME:%s ", name);
}
if(number) {
printf("number:%s ", number);
}
if(date) {
printf("date:%s ", date);
}
putchar('\n');
}
2)注册PBAB电话本的回调函数
在函数bredr_handle_register修改如下:
3、开启手机电话本共享
在bt_function_select_init函数中添加如下语句:
__change_hci_class_type(BD_CLASS_HANDS_FREE); 
4、获取电话本
1)与电话本相关的命令
2)蓝牙主程序里头信息调用测试。
通过按键发送测试消息MSG_BT_HID_TAKE_PIC进行测

获取到的电话数据打印
获取每次所连接手机蓝牙地址。
92.FM模式单声道或立体声选择设置
fm_inside_set_stereo(0);
值范围是 0-127 ,值越大,立体效果越明显,但是噪声也会相对明显。建议值48 。使用过程中直接调用该函数即可。
93.AC692x_SDK_Emitter_V1.0发射端在接收端关机之后假死机
问题描述:在以linein为输入源连接接收端之后接收端关机,一直有数字打印出来直到看门狗复位。并且假死机时间与串口的波特率成反比关系。
原因:底层逻辑问题
解决方法:替换蓝牙库
蓝牙库下载地址:https://pan.baidu.com/s/1WC8GMWO4hpQ-RPwrWVqG3w 提取码: vwdd
出问题时的打印:
94.AC692系列RTC时钟开发大整合注意点补充
上面整理的第3、15、26、27和第28点都有介绍到关于使用AC692系列RTC时钟的注意事项,还要增加一点关于如下截图的,如果LOWPOWER_OSC_TYPE选择用BT_OSC,导致执行set_lowpower_keep_32K_osc_flag(0);函数语句,会导致32.768K不起振,导致RTC时钟不跑,把形参0改为1即可。
95.关于DAC输出功率问题
目前有些客户会说我们的DAC输出功率调不大,即使用EQ把整体幅值拉大,也提不出需要的功率,遇到这个问题点,需要注意如下的设置,这里包括AC691和AC692都要注意。如下截图箭头所指的地方范围是0-7,0最小,7最大,这里写为7,芯片DAC输出最大的功率。
96.692X无间断循环播放处理办法
详细文档点击以下链接下载
链接: https://pan.baidu.com/s/13DVyirbScbFD5szmYB3Cuw 提取码: vrpb
97.692X发射SDK减小延时方法
主要有两点影响延时:发射的buf大小、接收的硬件同步。
- 与发射延时有关的修改


- 与接收延时有关的修改


注:
- 如果发射与接收的程序不是同一份代码,发射端按照第一点修改、接收端按照第二点修改。
- 截图修改后的参数供参考,具体根据需求修改。
98.AC692X蓝牙跑后台,在非蓝牙模式下,手机连接蓝牙不要跳回蓝牙模式处理方法
1、定义以下变量

2、增加以下内容
3、
99.AC692系列V2.6.0以上版本开BLE退出蓝牙模式卡机问题
int APP_ble_disconnect(void *priv)
{
log_printf("-APP_ble_disconnect\n");
return ble_disconnect(0);
}
100.AC692系列开启经典蓝牙HID手机的显示图标为键盘设置
在static void bt_function_select_init()函数如下设置

#define BD_CLASS_WEARABLE_HEADSET 0x240404/ios10.2 display headset icon/
#define BD_CLASS_HANDS_FREE 0x240408/ios10.2 display bluetooth icon/
#define BD_CLASS_MICROPHONE 0x240410
#define BD_CLASS_LOUDSPEAKER 0x240414
#define BD_CLASS_HEADPHONES 0x240418
#define BD_CLASS_CAR_AUDIO 0x240420
#define BD_CLASS_HIFI_AUDIO 0x240428
#define BD_CLASS_PHONEBOOK 0x340404
#define BD_CLASS_HIDAUDIO 0x302540
101.AC692系列播内置flash提示音控制播放暂停处理方法
1、在music_player.c文件添加tone_voice_pp函数,如下图所示:

2、在pp消息里面做响应,如下图所示:
102.AC692发射SDK内置FM没有声音
现象:在设为接收模式或者开机进FM没有声音,dac那边也没有数据。
原因:src_run中src_t.output_free_siz这个变量在使用之前没有赋值,导致错误返回。
解决思路:实际上FM模式下不需要用到这个src_t.output_free_siz变量,可以在FM模式下不进行判断。
修改如下:
#if FM_RADIO_EN
#include "task_manager.h"
if(TASK_ID_FM != task_get_cur())
#endif
if (src_t.output_free_size < SRC_OUTPUT_LIMIT) {
//putchar('1');
return wlen;
}

103.AC692发射SDK 接收模式添加读卡器功能(自定义USB设备描述符)
解决思路:发射跟接收模式使用不同的PID,安装两个驱动。
- 修改USB设备描述符字符串
- 发射模式使用的设备描述符字符串 const u8 DEVICE_DESCRIPTOR_MASETER[] = {
0X12, // bLength: Size of descriptor
0x01, // bDescriptorType: Device
0x10,0x01, // bcdUSB: USB 1.1
0x00, // bDeviceClass: none
0x00, // bDeviceSubClass: none
0x00, // bDeviceProtocol: none
0x40,//EP0_LEN, // bMaxPacketSize0: 8/64 bytes
0xB7,0xE5, // idVendor: 0x04B4 - Cypress
0x11,0x08, // idProduct: 0x1111 - SL811S
0x00,0x01, // bcdDevice: version 1.0
0x01, // iManufacturer: Cypress
0x02, // iProduct: Cypress SL811S - HID Consumer Control
0x03, // iSerialNumber: none
0x01 // bNumConfigurations: 1
}; - 接收模式使用的设备描述符字符串 const u8 DEVICE_DESCRIPTOR_SLAVE[] = {
0X12, // bLength: Size of descriptor
0x01, // bDescriptorType: Device
0x10,0x01, // bcdUSB: USB 1.1
0x00, // bDeviceClass: none
0x00, // bDeviceSubClass: none
0x00, // bDeviceProtocol: none
0x40,//EP0_LEN, // bMaxPacketSize0: 8/64 bytes
0xB7,0xE5, // idVendor: 0x04B4 - Cypress
0x11,0x0A, // idProduct: 0x1111 - SL811S
0x00,0x01, // bcdDevice: version 1.0
0x01, // iManufacturer: Cypress
0x02, // iProduct: Cypress SL811S - HID Consumer Control
0x03, // iSerialNumber: none
0x01 // bNumConfigurations: 1
}; - 自定义USB设备描述符
- 修改dev_pc.c文件中的usb_slave_class_config_reset函数:

104.AC692x_SDK_release_AI_V2.4开FM时会串linein的声音
处理如下:
105.AC692系列2.6.2、2.6.3音箱SDK不播歌时与iPhone同步音量修改
1)2.6.3SDK直接替换蓝牙库,2.6.2SDK需要替换库和修改文件。
2)请注意两个库文件非同一个库。
3. 请注意播歌同步媒体音量,不播歌同步铃声音量。这个是由iPhone手机决定的。 修改内容如下:
库文件百度网盘地址,请客户自己下载。
链接: https://pan.baidu.com/s/11zxNWP5DeE5bLO9XJGF9Ig 提取码: 792h 复制这段内容后打开百度网盘手机App,操作更方便哦
106.AC692系列多台带对箱功能的音箱交叉配对,主机和主机配对连接后出现蓝牙断开,又快速连上问题处理方法
修改task_bt.c如下:

107.AC692的USB兼容性优化点 20200610
如下红框处4096改为512.
108.AC692的DACVDD偏置设置 20200610
对于AC692的SDK发出去的DACVDD默认等级设置都是6,这个会影响音频输出的幅值和DAC驱动能力。
如果需要强的幅值和输出能力,可以设置为7,如下。
这里范围是0-7,最高7。
109. SDK2.6.3 开音量同步,苹果手机音量调到0,再断开连接,再连接,音量同步手机传过来一个错误音值,需要换库。
替换AC692X系列SDK2.6.3版本的bluetooth_lib.a库,记得rebuild
链接:https://pan.baidu.com/s/1uM7uRBhqbXcVAkP05YQQMA
提取码:mz3j
110. SDK2.6.3 回连上苹果时,手机会播放2-3S的静音数据,导致在这个时间段内按PP键不会播放音乐问题 20200717
替换AC692X系列SDK2.6.3版本的bluetooth_lib.a库,记得rebuild
资料提取:
链接:https://pan.baidu.com/s/1JKPUGfgh_ivvd58HVbbHew
提取码:0a8m
111. SDK2.6.3 开对箱后,进DUT测试模式(即BQB测试模式)很难连上蓝牙测试仪(N4010或8852)解决方法 20200817 WTS
经分析该问题是由于样机连上测试仪之后,切换主副机角色及发起回连对箱引起。因此可以加判断条件,如果是DUT测试模式,连上仪器后,就不要做其他任何动作,以防干扰测试:

另外,以下网盘路径有一份AC692X SDK2.6.1 设计进入DUT(BQB)模式的参考程序(但这个是没有开对箱),可以拿来参考看如何设置进入BQB模式或FCC模式。
链接:https://pan.baidu.com/s/17rJsGjUACyv3ppIbhv2Xkw
提取码:k7w4
112. BLE连接小米10、K30手机出现断连现象 20200910 xin
链接: https://pan.baidu.com/s/1beQ8TZhm-zFEsYVqrjqtxA 提取码: t2ww
提取bluetooth_lib.a库,rebuild即可
113.AC692的内置FM获取电台信号指标 20200910 YWP
#define MAX_FM_INSI_FRE 1080
#define MIN_FM_INSI_FRE 760
#define MAX_FM_INSI_CHANNL (MAX_FM_INSI_FRE - MIN_FM_INSI_FRE + 1)
struct FM_SCAN_SAVE_INFO {
u16 seek_cnt;
s16 cnr;
};
struct FM_SCAN_SAVE_INFO fm_scan_save_info[MAX_FM_INSI_CHANNL];
printf("[%d] ", fre);
printf("freq.seek_cnt=%d ",fm_scan_save_info[freq-MIN_FM_INSI_FRE].seek_cnt);
printf("freq.cnr=%d \n",fm_scan_save_info[freq-MIN_FM_INSI_FRE].cnr);

114.AC692系列显示大歌词文件的解决方法 20201017 YWP
如果歌词文件比较长,请用存储flash的方式处理。
步骤一:如果歌词文件比较长,请用存储flash的方式处理。把LRC_ENABLE_SAVE_LABEL_TO_FLASH置1.
同时注意LABEL_TEMP_BUF_LEN和lrc_info_buf的长度。

步骤二:在flash_api.c文件加入下代码。
#include "flash_cfg.h"
#define READ_CFG_16( buffer, pos) ( ((u16) buffer[pos]) | (((u16)buffer[pos+1]) << 8))
#define READ_CFG_32( buffer, pos) ( ((u32) buffer[pos]) | (((u32)buffer[pos+1]) << 8) | (((u32)buffer[pos+2]) << 16) | (((u32) buffer[pos+3])) << 24)
#define FLASH_BASE_ADDR (0x1000000)
static FLASH_SYS_CFG tmp_sys_cfg;
static FLASH_SYS_CFG *sys_cfg = &tmp_sys_cfg ;
void set_g_sys_cfg_ex(u32 cfg_addr)
{
u8 cfg_data[16];
u8 *cfg_ptr;
u32 i;
printf("-------------cfg_addr = %08x \n", cfg_addr);
memcpy(sys_cfg, (void *)(FLASH_BASE_ADDR + cfg_addr), sizeof(FLASH_SYS_CFG));
cfg_ptr = (u8 *)(FLASH_BASE_ADDR + sys_cfg->flash_cfg.cfg_zone_addr);
for (i = 0; i < sys_cfg->flash_cfg.cfg_zone_size; i += 16) {
u32 tmp;
memcpy(cfg_data, cfg_ptr, 16);
//printf_buf(cfg_data, 16);
if (memcmp((const char *)cfg_data, "LRIF", 4)==0) {
u32 lrc_flash_addr = READ_CFG_32(cfg_data, 4);
u32 lrc_flash_len = READ_CFG_32(cfg_data, 8);
//printf("-----------lrc_flash_addr = %x, -----------lrc_flash_len = %d\n", lrc_flash_addr, lrc_flash_len);
extern void lrc_label_save_to_flash_init(u32 addr, u32 len, u32 base_addr);
lrc_label_save_to_flash_init(lrc_flash_addr, lrc_flash_len, sys_cfg->flash_cfg.flash_base);
}
cfg_ptr += 16;
}
}

步骤三:同时需要把文件夹的uicon_lib.a替换路径...\include_lib库文件。替换库后要记得重新编译rebuild。
步骤四:Lcd_drv_interface.c文件的函数lcd_TurnPixelReverse_Rect加入下语句,解决换页问题。
链接: https://pan.baidu.com/s/1ZkzewTrCIuW9esX6kxVFbg
提取码: 84dq
115.AC692系列 2.6.3连接最新的苹果电脑会出现断开问题解决方法 20220616 lzk
替换以下库文件:
链接: HYPERLINK "https://pan.baidu.com/s/12DYt5lbgttjCHaFMTdUDnw" \t "_blank" https://pan.baidu.com/s/12DYt5lbgttjCHaFMTdUDnw 提取码:8888
116.AC692系列所有SDK版本开启频谱功能,播音乐煲机出现概率死机处理方法 20220928 WTS
1、在获取频谱的dac.c中,要加(0 == get_vm_statu())判断条件,在条件成立下获取:

2、打上flash兼容性补丁:
【金山文档】 AC692x系列补丁(20200116)
https://kdocs.cn/l/cr2XQR9P1dza
117. AC692系列2.6.3sdk 播放比特率较高的wav音频文件,例如2116kbps,会出现沙沙杂音,播放比特率1411kbps的wav音频文件则没有 测试比特率较高得这几个wav音频文件在696上播放或电脑上播放是没有问题的
修改方法:替换库文件
【金山文档】 wav_dec_lib-202108
HYPERLINK "https://kdocs.cn/l/cd6upL3sdOQ6" https://kdocs.cn/l/cd6upL3sdOQ6
- 复用SDCMD引脚应用方式 20230821 ZGH
注:SD卡不为cmd检测 - 可参照sdk里面的ADKEY与SD复用

当我们需要控制sdcmd引脚时需要对其挂起(suspend),操作完后需要对其恢复(resume)

- USB和SD复用时,再对其引脚复用
- 和第一点复用SDCMD引脚复用方法一样,但是需要注意,USB和SD复用时,在设备检测的地方会一直设置SD引脚的状态为高阻态,如果我们需要复用的引脚和usb复用sd的引脚无关,我们可以在不设置其引脚为高阻态


- AC692x_SDK_release_AI_V2.4.2_beta - Export-231024- 连接杰理之家在线调试eq复现eq的后几段无法调节 CYL

这是因为692公版sdk中默认的eq系数表只有前几段,后几段是没有的,需要使用EQ工具重新生成一份默认的eq系数表。下面是44.1K的eq系数表。
static const int eq_filt_44100[] = {2089441,-1040885,3845,0,-1,2083708,-1035216,6680,0,-1,2070479,-1022232,13172,0,-1,2043812,-996533,26022,0,-1,1990462,-946948,50814,0,-1,1883552,-854256,97160,0,-1,1668264,-689787,179395,0,-1,1233760,-416779,315899,0,-1,425466,30154,539365,0,-1,0,0,0,0,0,};
120. AC692x_SDK_release_V2.6.3 直接处理USB scsi的接口 
ext_g_susb_var=(USB_SLAVE_VAR*)res;
memcpy(&(ext_g_susb_var->card_reader.private_scsi),&scsi_hook,sizeof(scsi_hook));
scsi_intercept 为具体回调函数
实现内容如下:
// extern u8 MCU_SRAMToUSB(void *pBuf,u16 uCount);
// extern u8 MCU_SRAMToSRAM(void *pBuf,u16 uCount,sUSB_SLAVE_MASS *mass_var);
extern u8 MCU_SRAMToUSB(void *pBuf, u16 uCount);//发送
extern u8 MCU_USBToSRAM(void *pBuf, u16 uCount, sUSB_SLAVE_MASS *mass_var);//接收。mass_var在hook函数里面
u8 data_test[512];
static USB_SLAVE_VAR *ext_g_susb_var;
static SUSB_SCSI_INTERCEPT_RESULT scsi_intercept(void *p,u8 len)
{
sUSB_SLAVE_MASS *mass_var = p;
USB_SCSI_CBW *cbw = &(mass_var->USB_bulk_only_Rx.CBW);
printf_buf((u8 *)&(mass_var->USB_bulk_only_Rx.CBW),31);
memset(data_test,0x45,512);
switch (cbw->operationCode) {
case 0x55://0x12
printf("测试 接收\n");
MCU_USBToSRAM(data_test, 512, mass_var);//接收。mass_var在hook函数里面
//MCU_SRAMToUSB(data_test,512);
return SCSI_INTERCEPT_SUCC;
case 0x56://0x12
printf("测试 发送\n");
//MCU_USBToSRAM(data_test, 512, mass_var);//接收。mass_var在hook函数里面
MCU_SRAMToUSB(data_test,512);
return SCSI_INTERCEPT_SUCC;
}
return SCSI_INTERCEPT_FAIL;
}
sUSB_SLAVE_SCSI_PRIVATE scsi_hook={
.scsi_intercept = scsi_intercept,
.cardreader_addrs_protect = NULL,
};
- AC692x_SDK_release_V2.6.3解除使用exfat同一目录最多只能2W多文件限制 替换库文件:
HYPERLINK "https://kdocs.cn/l/cuetuAEQz2Cg" fs_lib_692x_2021_10_12修复exfat同一目录最多2W多计算限制 - AC692x_SDK_release_V2.6.3 FAT系统获取剩余容量功能 下载下面链接的文件,对比修改即可。
【金山文档】 AC692x_SDK_release_V2.6.3_FAT获取剩余容量
HYPERLINK "https://kdocs.cn/l/cpcfkMfbTLWY" https://kdocs.cn/l/cpcfkMfbTLWY
AC692x_SDK_release_V2.6.3 概率出现进入睡眠的过程中触发唤醒导致无法开机
替换库文件(修改两个接口函数)

按以下内容修改


external_pu_pd:不需要直接传0,需要传对应的bit如:(WAKE_UP_PR1|WAKE_UP_PR2);

修改内容:
【金山文档】 AC692_SDKJ263概率出现进入睡眠的过程中触发唤醒导致无法开机
HYPERLINK "https://kdocs.cn/l/cgiuoHDLtBKQ" https://kdocs.cn/l/cgiuoHDLtBKQ
- AC692x_SDK_release_V2.6.3 PC模式电脑开录音同时播歌,滑动音量条会卡住 修改方法:参考demo修改如下文件,需要rebuild。同时需要在电脑端卸载该设备重新挂载。

【金山文档 | WPS云文档】 AC692x_SDK_release_V2.6.3_20260120
HYPERLINK "https://www.kdocs.cn/l/cjUVG4rclIov" https://www.kdocs.cn/l/cjUVG4rclIov