正经人一个zz 2024-02-07 01:58 采纳率: 0%
浏览 50
已结题

imx6ull移植wm8960遇到的问题。

[root@imx6ull /music]$aplay -f FLOAT_LE -c 2 -r 48000 test.pcm
Playing raw data 'test.pcm' : Float 32 bit Little Endian, Rate 48000 Hz, Stereo
[ 82.604601] imx-sdma 20ec000.dma-controller: sdma or sdma firmware not ready!
[ 82.611791] fsl-sai 202c000.sai: ASoC: error at soc_component_trigger on 202c000.sai: -12
aplay: pcm_write:2127: write error: Cannot allocate memory

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-07 02:00
    关注

    引自免费微信小程序:皆我百晓生

    您在尝试使用i.MX6ULL处理器上移植WM8960音频编解码器,并通过alsa播放PCM文件时遇到了问题。从错误信息来看,主要有两个方面的故障:

    1. SDMA未准备好

      [ 82.604601] imx-sdma 20ec000.dma-controller: sdma or sdma firmware not ready!
      

      这个错误提示表明i.MX6ULL的串行直接内存访问(SDMA)控制器或者其固件没有正确初始化。在Linux内核中,SDMA用于高效地传输音频数据到WM8960编解码器。解决这个问题通常需要检查以下几点:

      • 确保在内核配置中启用了SDMA驱动。
      • 验证与SDMA相关的设备树配置是否正确,包括DMA通道分配给SAI接口等。
      • 检查启动脚本或内核启动过程中是否有加载SDMA固件的相关步骤。
    2. ASoC触发错误

      [ 82.611791] fsl-sai 202c000.sai: ASoC: error at soc_component_trigger on 202c000.sai: -12
      aplay: pcm_write:2127: write error: Cannot allocate memory
      

      这条错误信息指出,在试图触发音频流时遇到了问题,错误代码-12通常表示“ENOMEM”(无法分配内存)。这可能涉及到以下几个方面:

      • 内存管理:系统可能由于其他原因导致可用内存不足,确保有足够的内存资源供音频子系统使用。
      • ALSA驱动配置:检查WM8960音频驱动的alsa部分,特别是与缓冲区大小、DMA操作相关的设置,确保它们与硬件和系统资源相匹配且合理。
      • 音频codec配置:确认WM8960的寄存器配置是否正确,包括采样率、声道数等参数是否与aplay命令中的参数一致。

    要解决这些问题,请按照以下步骤进行排查:

    • 检查设备树配置: 确保您的设备树(.dts.dtb文件)包含了正确的SDMA和WM8960节点配置,例如:
    &iomuxc {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_wm8960>;
    
        // SDMA related nodes...
    };
    
    &sdma {
        // SDMA configuration here...
    };
    
    &wmac {
        compatible = "fsl,imx6ul-wm8960";
        status = "okay";
        dai-format = <0>; // I2S format
        audio-frequency = <48000>;
        cpu-dai = <&sai1>;
    };
    
    • 核实并修正驱动程序: 检查和修改WM8906 ALSA SoC驱动程序,确保DMA配置、音频格式和缓冲区大小等参数正确无误。

    • 检查内核日志: 查看更详细的内核日志以获取更多关于错误的具体信息,比如查看是否有内存碎片或其它可能导致内存不足的情况。

    • 系统资源检查: 在运行aplay命令之前,通过free -htop命令检查系统的内存使用情况,确保有足够的空闲内存。

    • 调试驱动程序: 如果以上基本排查未解决问题,则需深入调试音频驱动,如增加打印语句来跟踪函数调用和资源分配过程,确保每个阶段都按预期执行。

    由于这里无法提供完整的源代码,建议参照NXP官方文档或社区提供的i.MX6ULL + WM8960音频驱动示例代码进行对照调整。同时,也可以参考如下链接了解更多的技术细节和解决方案:

    最后,请注意实际修复问题时可能需要根据实际情况对上述内容进行调整和定制。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月16日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题