大家好,
请问有人能指导一下如何在 i.MX8M plus 中实现和验证 Sony Philips数字接口格式(SPDIF) 协议吗?
对于最简单的 i.MX 8M Plus S/PDIF 实现,请使用 i.MX 音频板 / MCIMX8M-AUD 作为最接近的 NXP 参考硬件,而不是仅使用基本的 i.MX 8M Plus EVK。音频板的文档显示其支持 i.MX 8M Plus,并提供带有 RCA 和 TOSLINK 连接器的 S/PDIF I/O,TOSLINK 支持高达 192 kHz。
推荐的简易方法:
对于最简单的设计,将 AUDIOMIX_SPDIF1_OUT/IN 连接到光纤 TOSLINK 模块,并使用 MCIMX8M-AUD 作为 NXP S/PDIF I/O 行为的参考点。
在 i.MX8M Plus 上使用现有的 Linux ALSA Audio XCVR / S/PDIF 驱动程序;通常情况下,您不会从头开始实现 S/PDIF 协议。i.MX8M Plus 音频 XCVR 支持 eARC、ARC 和 S/PDIF 模式,Linux S/PDIF 支持通过 ALSA 公开一个用于 Tx 的播放设备和一个用于 Rx 的捕获设备。
建议的实施路径:
启用内核驱动程序:
配置_SND_IMX_SPDIF
菜单路径:
复制
设备驱动程序
-> 声卡支持
-> 高级 Linux 音频架构
-> ALSA 用于 SoC 音频支持
-> 适用于飞思卡尔 i.MX CPU 的 SoC 音频
-> 为带有 S/PDIF 的 i.MX 板提供 SoC 音频支持。
记录的 DT 绑定位于 Documentation/devicetree/bindings/sound/fsl,Sony Philips数字接口格式(SPDIF).txt 和 Documentation/devicetree/bindings/sound/imx-audio-Sony Philips数字接口格式(SPDIF)if.txt 下。
sound-xcvr {
兼容 = "fsl,imx-audio-card";
型号 = "imx-audio-xcvr";
pri-dai-link {
链接名称 = "XCVR PCM";
中央处理器 {
sound-dai = <&xcvr>;
};
};
};
&xcvr {
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_xcvr>;
状态 = "正常";
};
对于 Tx 引脚复用,一个有记录的示例使用 MX8MP_IOMUXC_SPDIF_TX__AUDIOMIX_SPDIF1_OUT。
验证步骤:
aplay -l
记录 -l
使用这些信息来识别 S/PDIF 播放/采集卡和设备 ID。文档显示 S/PDIF 设备显示为 ALSA 卡,例如 imxspdif [imx-spdif],设备 0:S/PDIF PCM。
交易验证:
aplay -D hw:
参考验证方法使用外部光纤 S/PDIF 接收器,例如带有 WaveLab 的 M-Audio Transit USB 声卡,然后外部录制音频流并回放以检查正确性。
处方验证:
arecord -D hw:
传递给 arecord 的采样率必须与输入的 S/PDIF 流采样率相匹配。对于 Rx,应用程序流程是打开 S/PDIF Rx PCM 设备,等待内部 DPLL 锁定到输入比特流,获取输入采样率,设置通道/格式/速率参数,然后准备并触发捕获。
对于协议级检查,请使用:
iecset -c
iecset 是用于设置或转储 IEC958 状态位的标准实用程序,并且该驱动程序还通过 ALSA 控制接口公开通道状态处理。
对于 i.MX8M Plus EVK 风格的验证,NXP 还记录了使用 imxaudioxcvr 卡进行环回式 Linux 测试的方法,例如从 imxaudioxcvr 录制音频并播放到 wm8960audio:
arecord -Dsysdefault:CARD=imxaudioxcvr -c2 -r48000 -fS32_LE -twav | \
aplay -Dsysdefault:CARD=wm8960audio
简而言之:启用 i.MX S/PDIF / XCVR ALSA 驱动程序,配置 xcvr 设备树和板路由,然后使用 aplay、arecord、iecset 和外部光纤/同轴 S/PDIF 源或接收器验证 Tx/Rx。