SPDIF模式相关(HDMI_ARC、光纤、同轴)
📎 原始文档:https://www.kdocs.cn/l/coy4dndqDcHN SPDIF模式相关(HDMI_ARC、光纤、同轴)
703优化HDMICEC通信测试DEMO(已测试过下面兼容性测试文档中的全部品牌):
做HDMI声霸项目申请:le_audio-JL703N-2.0.0-JL703N-demo-patch_01.11。
feature_703_200_P10_HDMI.zip
AC695N HDMI demo
Files · AC695N_soundbox_sdk_release_3.1.0_HDMI_ARC · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
杰理HDMI兼容性测试文档.ksheet
电视HDMI兼容性测试报告.pdf
- 三种输入简介
SPDIF信号介绍:
https://blog.csdn.net/u011393762/article/details/121093307
- HDMI_ARC输入
我们只支持带 HDMI ARC 接口的HDMI接口、普通 HDMI 不支持
| 功能项 | 带 ARC 的 HDMI 接口 | 普通 HDMI 接口(无 ARC) |
|---|---|---|
| 音频反向回传通道 | ✅ 支持(电视→音响) | ❌ 无此协议通道 |
一句话总结
普通 HDMI 只有 “进” 没有 “出”;ARC HDMI 在协议上多了一条专门的音频回传通道,这是普通 HDMI 完全不具备的。
参考硬件原理图:

程序配置:
根据硬件配置口:
CEC,SPDIF是必须的,硬件需要与程序配置一致; CEC口:普通IO口即可
SPDIF口:根据数据手册选配
HDMI_DET,IIC接口可以选配, HDMI_DET:插入检测,检测到HDMI端口插入后重启CEC初始化(也可以拔出退出spdif模式,插入则跳转到spdif模式),可以避免热拔插后无声
HDMI_DET功能可以参考程序LINEIN检测的流程
IIC接口:获取电视HDMI接到机器的端口号,一般电视都会通过IIC下发端口号,有些电视(测试过一台小米电视)会通过CEC读取机器从IIC获取到的端口号,读取错误直接无音频数据,为了提高兼容性建议加
【金山文档】 hdmi_dcc(IIC部分程序,具体添加可以参考下文DEMO程序)
https://kdocs.cn/l/ctTGHQMRNWto
注意点:
- IIC口可以选配,有IIC接口可以增加兼容性,建议加上(备注);
- 程序注释的硬件IIC接口有可能CLK,DAT脚是相反的,建议看芯片datasheet,或者直接使用软件IIC功能;
- 建议加入插入检测,参照linein插入检测添加,在拔出时退出spdif模式,插入时重新进入spdif模式,主要是重新初始化CEC,避免有些拔出后电视发CEC指令长时间不回导致的重新插入HDMI无声 硬件设计
光纤、铜轴、HDMI硬件电路设计指南
https://kdocs.cn/l/cg4JraVyduoj
AC695N_soundbox_sdk_release_3.1.0_HDMI_ARC_DEMO程序(待更新)
链接:https://pan.baidu.com/s/1jjpUjGnSFGWSwrgTfepYGg
提取码:8888
【金山文档】 hdmi_cec_drv.c(IIC兼容性修改,建议替换以上程序的该文件)
https://kdocs.cn/l/chi7rv08pM07
HDMI-ARC一般调试步骤:
硬件调试:
- 参考AC6954A公版原理图,检查硬件电路设计是否正确; AC6954A光纤铜轴HDMI原理图.pdf
- 检查样机的物料焊接是否正常:①HDMI母座各引脚;②SN74LVC2G04反相器有无焊反;③其他物料是否漏贴或贴错,线路正常导通;④如有FPC排线,检查是否正常导通;⑤反相器电源供电不稳(电源负载能力不足),用外挂LDO-3.3V供电,反相器电源脚加有滤波电容。
- 用示波器或逻辑分析仪测量如下图标的8个点的信号是否正常:(重点关注:2点和8点的信号) 注意:如果“2点-ARC”引脚没有信号波形出来,就是软件通信不成功,先检查软件。“2点-ARC”信号波形如下:

HDMI正常连接播放时,8个点的信号如下:
1-CEC:正常的能看到打印,如果无打印的话抓波形,建议使用逻辑分析仪抓波形,然后解析,开机进spdif模式时会有一串CEC波形,说明IO口配置正确。
如果打印没有cec command检查硬件电视端的CEC口到板子之间的导通情况
cec波形:
2-ARC:cec通信正常后,电视才会输出信号,电视直接给的信号幅度不够,所以要加反相器等放大处理
3,4点:为IIC引脚,为软件IIC,可以查看打印或者接逻辑分析仪分析是否有问题
5点:5V
6点:DET脚,HDMI_ARC在线为高电平。插入HMDI线连接电视,DET脚会有5V的电平出来,如果使用非高压口,需要用10K和20K电阻做一个分压给到主控IO口,不能直接5V倒灌进主控。
8-反相器输出:ARC信号经过反相器放大到幅值为3.3V的数字信号


软件调试:
- 打开打印,查看程序是否有跑到cec command,验证是否CEC接线以及通信正常,如果没有出现cec command,则需要检测CEC线是否接好

- 添加IIC这块后,查看IIC的通信是否正常
红圈圈出为HDMI的端口号,一般为0x10,0x20,0x30;出现异常检查IIC接线问题,看注意点第二点 - 前两点正常的情况下,一般能进入到SPDIF解码播放的过程,出现如下打印内容
如果出现此情况打印则检查电视是否为PCM格式输出,目前SDK只支持此格式:
如果出现此情况打印,是由于硬件接收到的数据量跟目前的采样率不符合导致,需要检测硬件接线是否正确,反相器供电是否被喇叭拉低等
4.如果以上三点都正常,然后还是出现无声,哒哒哒等问题,请检查硬件;
如果涉及电视兼容性问题请联系我们处理,尽量把电视也带过来。
文档如有说明不清晰处,文档结尾留言
HDMI_ARC扩展知识
- HDMI_ARC功能介绍 HDMI ARC功能分析与协议打通过程
[https://zhuanlan.zhihu.com/p/80772947] - 常见CEC command解释: https://blog.csdn.net/weixin_43442683/article/details/107376618
- HDMI_ARC相关功能调试
- 音量同步
第三个数据为电视总音量的百分比,根据实际要求可以通过cec发送数据来实现对电视机音量的控制
(同时也可以通过发送0xB2来实现电视的静音,如过关闭静音只需要发送电视音量百分比到电视实现设置音量并解除静音)
下面是实现音量同步以及开关静音的相关例子
- 同步开关机 一些电视关机的时候会通过cec发送关机指令过来,但是有一些不会,但都会有待机指令过来,我们可以通过待机指令来同步关闭音箱
电视关机或者进入待机,电视机都会发送一个广播信息过来(0x0f , 0x36)
- 退出HDMI_ARC需要注意的地方 退出HDMI_ARC时,需要做释放,不然电视机的声音输出一直会在ARC模式,电视机本身的扬声器就不会有声音出来,要人为手动去重新选择音频输出
先发送关闭cec控制命令,最后设置cec为高阻态

注意:这样直接发送关闭cec控制到电视,一些电视会存在,二次进入hdmi的时候会没声音处理方法如下,初始化完cec发送一下命令:


(2)光纤输入
参考硬件原理图:

程序配置:
根据硬件配置口,此处以695举例:
注意点:
- 程序注意配置对口即可,出问题时先量配置的口有无输入,无输入则检查硬件
- 光纤接收头输出的电平幅度与接收头的电源接近。

(3)同轴输入
参考硬件原理图:

程序配置
根据硬件配置口,此处以695举例:
注意点:
- 程序注意配置对口即可,出问题时先量配置的口有无输入,无输入则检查硬件
demo程序:
【金山文档】 AC695N_soundbox_sdk_release_3.1.0_spdif_demo
https://kdocs.cn/l/cr2R3t6ofFty
- 各类功能介绍
1.播放暂停功能
case KEY_MUSIC_PP:
if(music_pp_flag == 0){
audio_spdif_slave_close(&spdif_slave_hdl);
music_pp_flag = 1;
}
else{
music_pp_flag = 0;
audio_spdif_slave_open(&spdif_slave_hdl);
audio_spdif_slave_start(&spdif_slave_hdl);
}
break;
- 问题解决
- SPDIF切换端口失败问题
audio_spdif_slave_close(&spdif_slave_hdl);
spdif_slave_hdl.input_port = SPDIF_IN_PORT_A;
audio_spdif_slave_open(&spdif_slave_hdl);
audio_spdif_slave_start(&spdif_slave_hdl);
//通过重启SPDIF解码的方式解决,替代原先的:audio_spdif_slave_switch_port(&spdif_slave_hdl, SPDIF_IN_PORT_A);函数
- 连接HDMI-ARC后遥控无法控制电视音量问题 此问题原因:电视接收遥控红外信号后,固定了电视自身的数据输出,通过发送CEC command给机器,希望机器端判断command来进行+-音量操作。
一般打印如下:
命令意义:
05 44 41:音量+
05 44 42:音量-
05 45 :音量控制停止
获取到这些cmd后,解析判断然后控制音箱+-音量即可
常见CEC command解释:
https://blog.csdn.net/weixin_43442683/article/details/107376618
https://blog.csdn.net/weixin_43442683/article/details/107321641
3. 695_2.0.0_sdk在spdif模式变采样时会出现变调杂音问题 原因:底层变采样bug
解决办法:替换库文件(media.a)
【金山文档】 media_2.0.0_spdif_src.a
https://kdocs.cn/l/csYtJQmhh8p8
4. 695,696连接某一款飞利浦电视无声问题 原因:
SPDIF信号介绍:
spdif信号.otl
spdif波形示意如下:
不同采样率对应的脉冲时间如下:
比如48K对应的频率为6.144M,此处频率指的是一个脉冲频率,BCM编码1bit需要两个脉冲时钟


采集到有问题的电视的波形:
高->低电平跳变的过程时间太长,导致反相器出来的波形高电平持续时间太长,低电平持续时间太短;
此处的高低电平时间分别都算做一个脉冲时间,这个脉冲时间对应标准的6.144M误差过大,导致695,696等芯片无法起数据中断,无法解码;
误差计算:abs(高/低电平持续时间 - 标准脉冲时间) / 标准脉冲时间
解决办法:
需要换BR27(703)或者之后的芯片去做,703对于这个误差的宽容度比较高,能够兼容
- 芯片选择
- 支持SPDIF输出芯片:JL703;
- 696,695均支持SPDIF输入功能,具体芯片型号根据功能挑选,记得查看所选芯片有无SPDIF引脚引出(查看芯片datasheet),同时功能复杂建议使用695芯片(RAM更大,且有8M_flash内存选配); 701无SPDIF引脚,即不支持SPDIF功能;
- 对于兼容性以及音效处理效果要求比较高的情况下,建议使用JL703系列开发此功能,JL703对于SPDIF输入波形兼容性高,支持内部模拟放大功能(不需要外部数字反相电路),性能更好,支持更多音效处理;