This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM623:AM623X Linux McASP 问题

Guru**** 2542140 points
Other Parts Discussed in Thread: SK-AM62B-P1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1530217/am623-am623x-linux-mcasp-problem

器件型号:AM623
主题中讨论的其他器件:SK-AM62B-P1

工具/软件:

尊敬的专家:

测试环境:SK-AM62B-P1 EVM 和 SDK-LINUX-am62xx-EVM-11.00.09.04
目标:将 McASP 用作独立的 32 (TX/RX) 声道((FS:8K、CLK:2M、32 个时隙、8 位/时隙单声道)、可独立播放 32 个声音、独立录制 32 个通道、无编解码器(不由 AM62x CPU 控制)
预计可实现:
使用 McASP1 接口生成固定 PCM 信号
执行 aplay -D plughw:0,X test.wav(文件格式也是 8K/mono/ 16 位 A/mu 定律)时、您可以看到这些信号 (FS /CLK/...)。 出现在编解码器 TLV320 中。
问题 1:在以下方法中、我首先使用虚拟编解码器来替换 TLV320、但我不知道是否有更合适的声卡/编解码器设置来满足我的实际需求?


对虚拟编解码器的修改:

1、下载 dummy-codec.c 并修改.compatible =“linux、dummy-codec“、  重新编译内核

请参阅链接: https://gitlabhost.argos-navy.ru/rockchip/rongpin/rk3588_android12/-/blob/master/kernel-5.10/sound/soc./codecs/dummy-codec.c

2. DTS 部分如下:

a. 删除 k3-am62x-sk-common.dtsi 中的 tlv320_MCLK:CLK-0、codec_audio:sound 和&McASP1

b. 将以下内容添加到 k3-am625-sk.dts 的根节点

dummy_codec:dummy-codec{
兼容=“linux、dummy-codec“;
#sound-dai-cells =<0>;
状态=“正常“;
};
McASP_MCLK:McASP-MCLK{
#clock-cells =<0>;
兼容=“固定时钟“;
时钟频率=<2048000>;// 2.048MHz
};

codec_audio:声音{
compatible =“simple-audio-card";“;
简单音频卡、名称=“AM62x-Dummy";“;
简单音频卡、格式=“dsp_b";“;
///简单音频卡,位时钟反转;
简单音频卡、位时钟主控=<&McASP1>;
简单音频卡、帧主机=<&McASP1>;
状态=“正常“;

简单音频卡、CPU{
sound-dai =<&McASP1>;
};

sound_master:简单音频卡、编解码器{
sound-dai =<&dummy_codec>;
时钟=<&McASP_MCLK>;
};

};


sound_master:简单音频卡、编解码器{
sound-dai =<&dummy_codec>;
时钟=<&McASP_MCLK>;
};


c. 在该文件末尾添加以下内容

&McASP1{
#sound-dai-cells =<0>;
pinctrl-names =“default";“;
pinctrl-0 =<&MAIN_McASP1_pins_default>;
状态=“正常“;

OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<32>;
槽宽=<8>;

serial-dir =</* 0:不活动、1:TX、2:Rx */
1 0 2 0
0 0 0 0
0 0 0 0
0 0 0 0
>;

tx-num-evt =<1>;
rx-num-evt =<1>;

TI、缓冲器大小=<8192>;
};

测试结果如下:


问题 2:看来 aplay 无法继续执行、它在某处停止、并且示波器上没有信号输出。 问题出在哪个部分?

此致、

Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    目前我不在办公室、因此回复可能会延迟。  

    您能否告诉我、在当前设置中、播放是否可以运行一段时间、然后停止? 如何为 MCASP 提供时钟 (BCLK、WCLK)?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    我继续修改 DTS 器件、可能在 McASP1/sound/...中修改或添加一些参数、

    但有两个结果:

    上述情况是它在播放后卡住、我需要按 Ctrl-C 强制停止、但在此期间没有 FrameSync/BCLK 输出。
    另一种情况是比较常见的结果:播放一小段时间后(大约 1 秒),错误消息直接打印。 我的判断是没有 CLK、因此没有 DMA/中断、因此无法发送数据、或者没有 DMA/中断、因此没有 CLK。  

    我不知道两者之间的因果关系、但可以直接观察到 CLK 输出的缺失。

    下面是此结果的屏幕截图:

    我还编写了一个脚本来监视播放时钟和 PM 的变化。 参考命令如下所示:

    grep -I McASP /sys/kernel/debug/clk/clk_summary  

    Cat /sys/kernel/debug/pm_genpd/pm_genpd_summary | grep -i 音频

    以上是监控结果的屏幕截图(在本例中,我将 PCM 更改为 32 时隙 X 16 位=PCM 4.096MHz)

    在当前测试中、我希望 FS 将主动输出 MCLK/BCLK(主模式)、这将使我们能够更轻松地提前在 EVM 上开发和测试语音功能的上层。


    稍后、当我们得到硬件电路时、从理论上讲、我们只应调整使用的引脚、并将运行模式更改为从模式(接收 FS BCLK/BCLK)、这只应是底层接口的调整。

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    simple-audio-card、bitclock-master =<&McASP1>;
    简单音频卡、帧主机=<&McASP1>;

    Brian、

    是否可以从<&McASP1>更改为<&sound_master>?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    感谢您的答复。

    这是我感到困惑的一点。 在我发布这个问题后,我意识到我误解了。 我以为 McASP1 处于主模式、但事实恰恰相反。 在该 EVM 设计中、12.288MHz 用于为编解码器提供 CLK、然后编解码器将其提供给 McASP1、因此 McASP1 在从模式下工作。 关于您的建议、我想它用于从模式设计、但我使用的虚拟编解码器不提供 CLK、因此我对两种工作模式进行了相关修改。

     在 k3-am62x-sk-common.dtsi 中添加了定义 MCASP_MASTER_MODE

    根据工作模式更改方向

    在 k3-am625-sk.dts 中(我更改为 sdx500p-ccb.dts)

    根据上述修改、无论我使用哪种模式、执行结果都相同、如下所示:

    root@am62xx-EVM:~# avplay -D plughw:0、0 2-11111_pcm.wav -vvv
    播放波形“2-1111111_pcm.wav “:有符号 16 位小端字节序、速率 8000 Hz、单声道
    插头 PCM:硬件 PCM 卡 0 'AM62-ASP1-TS32'设备 0 子设备 0
    其设置为:
    STREAM:播放
    访问:rw_interleaved
    格式:S16_LE
    子格式:标准
    频道:1.
    价格:8000
    确切费率:8000 (8000/1)
    第 16 章我是不是
    buffer_size:4000
    PERIOD_SIZE : 1000
    Period_time:125000
    tstamp_mode:启用
    tstamp_type :单调
    PERIOD_STEP:1.
    AVAY_MIN:1000
    PERIOD_EVENT:0
    开始阈值:4000
    第 4000 章,我是不是
    SILENY_THRESHOLD:0
    SILENY_SIZE:0
    边界:9007199254740992000
    Appl_ptr:0
    hw_ptr:0
    最大峰值(1000 个样本):0x00000008 #0%
    最大峰值(1000 个样本):0x000005a0 #4%
    最大峰值(1000 个样本):0x000003B0 #2%
    最大峰值(1000 个样本):0x00000330 #2%
    最大峰值(192 个样本):0x000001e8 #1%
    aplay:pcm_write:2178:写入错误:输入/输出错误
    Root@am62xx-EVM:~#

    唯一的区别是示波器上看到的 FS 信号:

    当我将其设置为从模式时、这两个信号完全没有变化、
    但当设置为主模式时、它似乎会尝试发送一些信号、但它仍然不会出现在末尾(我已断开线路以避免编解码器的影响)

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    您能否让我知道如何继续、希望在主配置中使用 MCASP 或将其用作从配置? 如果您在最终设计中要为 MCASP 提供时钟(BCLK 和帧同步)、那么我建议查看我们的现有器件树文件 (k2-am62x-sk-common.dtsi)。

    但是、如果要使用 MCASP 作为主器件、则必须使用 AUXCLK、或通过在 SoC 上的 AUDIO_EXT_REFCLK 引脚上提供外部时钟并在器件树上使用 SYSTEM到时 钟方向输出。

    请参阅以下主题以供参考:

    https://e2e.ti.com/support/processors-group/processors/f/791/t/1529060

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1487650/am625-running-mcasp-as-master-with-external-audio_ext_refclk-of-24-576mhz

    希望这些能有所帮助。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    让我们先重点介绍主模式!
    我选择使用 AUDIO_EXT_REFCLK1 作为基准频率、因为使用 AUXCLK 可能无法实现 BCLK:我需要 4.096MHz。

    下面是我的修改
    我调整了引脚输出方向并添加了 AUDIO_EXT_REFCLK1

    我发现 k3-am62-Amin.dtsi 已经有 AUDIO_refclk1 的设置、我保留这个块并添加 assigned-clock-rates 设置=<12288000>;

    在此文件中、我还调整了 McASP1 的设置

    我的声卡定义如下:

    McASP1 如下:

    重新编译并加载要播放的系统后、获得以下错误:

    这里有一个非常奇怪的数字 12345679 !

    我想 AUDIO_EXT_REFCLK1 12.288MHz 的无效设置将导致播放错误。 请帮助我找出问题所在?

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../sdx500p_2D00_sdk_2D00_11.00.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../sdx500p_2D00_sdk_2D00_11.00_2D00_20250725_2D00_final.zip

    您好、Suren、

    感谢您的工作到午夜来帮助解决这个问题!

    附件是最终器件树版本(我添加了几个简单注释)。

    除了内核修补程序之外、问题还没有得到解决。

    内核补丁参考: https://patchwork.kernel.org/project/alsa-devel/patch/5652E348.8080002@invoxia.com/

    下面是执行结果的屏幕截图:

    CLK_SUMMARY:

    关于 AUDIO_EXT_REFCLK1、使用 D20 引脚、如下所示:

    我们再次检查该引脚是否正常。

    如果您需要我提供更多信息、请告诉我。

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    让我回顾一下您的 DTS 并返回给您。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    进展如何?
    如果您发现任何新问题、请随时更新我。

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    我是否可以在星期一上安排一个电话、以便了解一些 DTS 更改并尝试进行设置实验?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    是的。
    是否与上次会议时间相似?
    星期一在晚上 9 点或 10 点((星期二在<xmt-block2>中国台湾</xmt-block>时间上午 10 点或 11 点)是否中国台湾是否正常?

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brian、

    您能否从器件树中删除“system-clock-direction-out",“,并、并将观察结果与您的当前 DTS 更改共享。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    无论是使用 D20 还是 K35、我都按照您的建议删除了字符串、测试结果仍然相同、如下所示:

    以下是频率接近 12.288MHz 时引脚 D20 显示的波形。

    e2e.ti.com/.../evm_2D00_tdm_2D00_master.zip

    附件是测试文件(使用 D20)。

    此致、

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brian、

    能否覆盖 AUDIO_refclk1{}节点以使用固定时钟并将其指向声音主节点。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    以下是之前的修改、这正是您所描述的内容。

    我已经 使用固定时钟重写了 audio_refclk1 块并将其指向 sound_master 节点。

    这未解决问题。

    我们目前正在研究新硬件电路板的各种接口问题。

    如果您有任何其他建议的修改、请提供给我们、我们将对其进行验证。

    在此期间、我们还将测试从模式解决方案。

    如果主模式仍然失败、我们将修改硬件以切换到从模式。

    此致、

    Brian