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.

[参考译文] Linux/PROCESSOR-SDK-AM335X:McASP 主模式配置

Guru**** 2555630 points
Other Parts Discussed in Thread: TLV320AIC3106

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607500/linux-processor-sdk-am335x-mcasp-master-mode-configuration

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:TLV320AIC3106

工具/软件:Linux

大家好、

我使用 PSDK (3.02)并使用 BeagleBone Black 连接编解码器 SAF775x。 我正在为此编解码器编写编解码器驱动程序。 我需要配置 McASP0 、以便能够生成采样率为44.1kHz 的 BCLK 和 LRCLK

对于 McASP0、我使用 来自 BeagleBone 扩展头 P9的以下连接来配置 McASP0。 我已禁用 HDMI 音频并在器件树中添加了 McASP0。 我仅使用 AXR0、因为我仅配置播放通道。

解答13. SPI1_SCLK P9.31 McASP0_ACLKX 位 时钟
B13. SPI1_D0 P9.29 McASP0_FSX 字 时钟
D12. SPI1_D1 P9.30 McASP0_AXR0 TX

设备树添加:

&McASP0{
#sound-di-cells =<0>;
pinctrl-names ="default";
pinctrl-0 =<&McASP0_PINs>;
状态="正常";
OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<2>;
serial-dir =</* 0:非活动、1:TX、2:Rx *
1 0 0 0 0
>;
tx-num-evt =<32>;
Rx-num-evt =<32>;
};

McASP0_Pins:McASP0_Pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x990、PIN_OUTPUT 下拉| MUX_MODE0)/* McASP0_aclkx.McASP0_aclkx *
AM33XX_IOPAD (0x994、PIN_OUTPUT 下拉| MUX_MODE0)/* McASP0.McASP0_FSX *
AM33XX_IOPAD (0x998、PIN_OUTPUT 下拉| MUX_MODE0)/* McASP0.McASP0_axr0 *
>;
};

/{

听起来{
兼容="简单音频卡";
simple-audio-card、name ="TI BeagleBone Black";
simple-audio-card、format ="I2S";
simple-audio-card、bitclock-master =<&sound_master>;
simple-audio-card、frame-master =<&sound_master>;

sound_master:simple-audi-card、CPU{
Sound-Dai =<&McASP0>;
系统时钟频率=<24000000>;
};

简单音频卡、编解码器{
sound-dai =<&saf775x>;
};
};
};

 检测到我的 PCM 设备。 我已经完成了编解码器驱动程序的基本实现并将其注册为声卡。 但不会生成 McASP0时钟。 我尚未对 McASP 驱动程序进行任何更改。  

请向我建议配置或 McASP 中需要的任何更改

谢谢

深度

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

    您无法从 AM335x 上可用的24MHz 时钟源生成44.1kHz 位时钟。 您将需要一个外部时钟源来执行此操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Biser、

    感谢您的回复。 您能否验证引脚复用。 我将讨论时钟源并向您回复。

    谢谢
    深度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个问题是 Biser、如何在外部生成时钟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于引脚多路复用、我已要求软件团队进行评论。

    关于时钟源、需要使用外部时钟发生器来提供主时钟、McASP 可以将主时钟分频为所需的44.1kHz 位时钟。 这里的问题是内部主时钟固定为24MHz (主振荡器时钟)、并且 McASP 分频器不是分数。 24MHz/44.1kHz = 544.217如果您使用的分频器值为544、则得到24MHz/544 = 44.117kHz。 您可以进行检查、这可能足够接近您的要求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Biser。。。
    LRCLK 为44.1KHz、而不是位时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、您需要什么位时钟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    As bit Clk= SampleRate * Channels * BitsPerSample

    对于44.1kHz、16位立体声音频、最小 BCLK 为1.4112MHz。 因此、该位时钟是我们的要求
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、这是24MHz 的17分频、因此您不需要外部时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Biser、

    您能不能告诉我生成此时钟需要哪些软件更改...在设备树和 McASP 驱动程序中需要哪些更改。
    谢谢
    深度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经告诉过您、软件团队已收到通知。 他们会在可能的情况下在这里作出响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 Biser!

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

    关于 BCLK/ACLKX、您需要的频率是多少? McASP 驱动程序默认支持44.1kHz:

    processors.wiki.ti.com/.../AM335x_Audio_Driver's_Guide

    支持多种采样率(8kHz、16KHz、22.05kHz、32KHz、44.1kHz、 48kHz、64KHz、88.2KHz 和96KHz)、用于捕获和回放。

    关于 LRCLK 时钟、您确切地在哪个 McASP 引脚上连接该编解码器引脚? 请提供有关编解码器 LRCLK 信号的更多信息。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另请参阅以下 e2e 线程:

    e2e.ti.com/.../580803

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们还有一位客户说 Dirana3 SAF7751EL 编解码器不需要 Linux 驱动程序:

    e2e.ti.com/.../1663912

    DIRANA3不需要驱动程序即可从 J5-Eco 进行初始化。它包含的固件在通电时通过 I2C 进行初始化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢 Pavel 的回复。 我还编写了一个虚拟驱动程序、仅用于播放 PCM 器件。

    。 现在、我只连接了1个 McASP0到 Dirana3 以检查 播放情况。 我可以使用 I2C 与 D3通信、并已将其初始化以接收 I/p 位和字时钟。

    但我的 McASP0不会生成时钟。  我将检查 McASP0寄存器并告知您。

    另请验证我是否使用了连接到 BBB 的正确 McASP0引脚。

    非常感谢 Pavel!!

    你总是帮助我。

    深度

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

    我已经对来自 BeagleBone Black Rev C 扩展头 P9的引脚进行引脚多路复用、使其可用作 McASP0。
    A13SPI1_SCLKP9.31McASP0_ACLKX位时钟
    B13SPI1_D0P9.29McASP0_FSX字时钟
    D12SPI1_D1P9.30McASP0_AXR0发送(回放)

    我需要 BCLK=1.411MHz、LRCK=44.1kHz。

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

    播放期间、我将获得以下输出

    root@AM335x-EVM:/bin# aplay audiocheck1_10th_copy_converted.wav &

    [1] 1209.

    root@AM335x-EVM:/bin/#[1519.033156]***函数*Davinci_McASP_STARTUP****内

    播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声

    [1519.054529]***** SAF775x_HW_params****内

    [1519.059490]四个 fmt & snd_SOC_DAIFMT_format_mask 的值是****** 0x1.

    [1519.072231]*** DaVinci_MCBSP_TXFMT_REG 的值为0x18074

    [1519.078137]*** fmt & snd_SOC_DAIFMT_MASTER_MASK 的值为0x4000

    [1519.09634]************ McASP_DAI_fmt 内的 DaVinci_MCASP_ACLKXCTL_REG 的值为0x1800b0

    [1519.104705]***** McASP_DAI_fmt 内的 DaVinci_MCASP_ACLKRCTL_REG 的值为0x1800b0

    [1519.118140]***** McASP_DAI_fmt 内的 DaVinci_MCASP_TXFMCTL_REG 的值为0x113

    [1519.133448]***插槽的值=2速率=44100 sbits=16

    [1519.138943] DaVincia-McASP 48038000.McASP:采样率降低400 PPM

    [1519.152532]***** 在 SAF775x_PREPARE ****内

    [1519.163911]寄存器 0x48038010 值 PFUNC_REG 0

    [1519.168862]寄存器 0x48038014值 Pdir 寄存器 b4000001

    [1519.174731]寄存器0x48038018 值 PDOUT 寄存器 0

    [1519.180074]寄存器0x4803801c 值 PDIN 寄存器 0

    [1519.185242]寄存器0x48038020值 PDCLR 寄存器 0

    [1519.190498]寄存器0x48038044值 GBLCTL 寄存器 200

    [1519.196014]寄存器0x48038048值 AMUTE 寄存器 0

    设备树中是否缺少内容? 我还检查了链接    

    我应该使用 AHCLKX 而不是 ACLKX 吗?

     

    谢谢

    深度

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

    [报价用户="deep ter">我已经对来自 BeagleBone Black Rev C 的扩展头 P9的引脚进行引脚多路复用、使其可用作 McASP0。
    A13 SPI1_SCLK P9.31 McASP0_ACLKX 位时钟
    B13 SPI1_D0 P9.29 McASP0_FSX 字时钟
    D12 SPI1_D1 P9.30 McASP0_AXR0发送(回放)

    我需要 BCLK=1.411MHz、LRCK=44.1kHz。

    如果您需要更多信息、请告知我[/QUERPLET]

    您确切地是如何验证您的引脚多路复用器是否正确的?

    我建议您使用 devmem2工具(或 omapconf)检查用户空间中的相应寄存器值:

    addr 0x44E10990处的 CONF_McASP0_aclkx

    地址0x44E10994处的 CONF_McASP0_FSX

    addr 0x44E10998处的 CONF_McASP0_axr0

    请提供这些值供审核。

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

    [引用 user="deep ter"]我需要 BCLK=1.411MHz 和 LRCK=44.1kHz。

    BCLK 由 McASP0_aclkx 引脚供电是否正确? 那么、您需要在此引脚上输出1.411MHz (1411KHz)吗? McASP0_aclkx 引脚(AUX_CLK 或 AHCLKX)的时钟源是什么? 请参阅 AM335x TRM、22.3.5.1发送时钟部分

    如果您不确定源、请向我提供以下 McASPo 寄存器的值:

    AHCLKXCTL
    ACLKXCTL

    [引用 user="deep ter"] LRCK=44.1kHz[/引用]

    是否将 Dirana3编解码器 LRCK 引脚连接到 McASP0_FSX 引脚? 请提供有关 LRCK 信号的更多信息。

    此致、
    帕维尔

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

    我已经验证了引脚多路复用器。

    root@AM335x-EVM:~# devmem2 0x44E10990
    在地址0x00000000处读取

    root@AM335x-EVM:~# devmem2 0x44E10994
    在地址0x00000000处读取

    root@AM335x-EVM:~# devmem2 0x44E10998
    在地址0x00000000处读取

    因为所有地址都处于模式0。 已验证引脚复用是否正确。

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

    [~ user="deep ter"]root@AM335x-EVM:evmem2 0x44E10990
    在地址0x00000000处读取

    root@AM335x-EVM:~# devmem2 0x44E10994
    在地址0x00000000处读取

    root@AM335x-EVM:~# devmem2 0x44E10998
    在地址0x00000000[/引号]处读取

    这些日志看起来可疑。 我希望看到以下格式:

    root@AM335x-EVM:~ evmem2
    /dev/mem 已打开。
    在地址处映射的存储器 。
    在地址处读取   ( ):


    有关更多示例、请参阅以下 e2e 文章:

    deep ter 说:
    因为所有地址都处于模式0

    地址不能在模式0中、该地址中的值可以在模式0中

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

    以下是日志:

    root@AM335x-EVM:~# devmem2 0x44E10990
    /dev/mem 已打开。
    映射到地址 bb6f89000的内存。
    在地址0x44E10990 (bb6f89990)上读取:0x00000000
    root@AM335x-EVM:~# devmem2 0x44E10994
    /dev/mem 已打开。
    映射到地址 bbb6f9b000的内存。
    在地址0x44E10994 (0xb6f9b994)上读取:0x00000000
    root@AM335x-EVM:~# devmem2 0x44E10998
    /dev/mem 已打开。
    映射到地址 bb6fc7000的内存。
    在地址0x44E10998 (bb6fc7998)读取:0x00000000

    是的、Pavel、

    BCLK 由 McASP0_aclkx 引脚供电。 McASP0_FSX 也连接到 DIRANA3的 LRCK 引脚。
    我需要在此引脚上输出1.411MHz (1411KHz)、因为我使用的是采样频率为44.1kHz 的立体声通道。

    我在器件树中提到了以下内容
    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="TI BeagleBone Black";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;

    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    系统时钟频率=<24000000>;
    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;
    };
    };
    };

    这意味着我将 AUX_CLK 作为 aclkx_pin 的源。 如果我错了、请纠正我的问题。
    我检查了在链接 e2e.ti.com/.../456475中添加的器件参数

    TX_DMA_OFFSET= 0x46800000、
    Rx_DMA_OFFSET= 0x46800000、
    op_mode= Davinci_MCBSP_iis_mode、
    nnum_serializer = array_size (ti811x_iis_serialer_Direction_mcasp2)、--------------- MCASP2
    tdm_slots= 2、
    .serial_dir= ti811x_iis_serialer_Directive_mcasp2、
    .asp_CHAN_q= EVENTQ_2、
    .version= MCBSP_version_2、
    txnumevt= 1、
    .rxnumevt= 1、
    /* McASP2_AHCLKX 输出为编解码器 CLK*/
    .clk_input_pin= MCASP_AHCLKX_IN、


    但在 AM335x-Beaglebon.dts 中、我无法找到如何将 MCASP_AHCLKX_IN 作为 I/p

    我将在一段时间内向您分享 AHCLKXCTL 和 ACLKXCTL 的值

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

    [~ user="deep ter"]root@AM335x-EVM:evmem2 0x44E10990
    /dev/mem 已打开。
    映射到地址 bb6f89000的内存。
    在地址0x44E10990 (bb6f89990)上读取:0x00000000
    root@AM335x-EVM:~# devmem2 0x44E10994
    /dev/mem 已打开。
    映射到地址 bbb6f9b000的内存。
    在地址0x44E10994 (0xb6f9b994)上读取:0x00000000
    root@AM335x-EVM:~# devmem2 0x44E10998
    /dev/mem 已打开。
    映射到地址 bb6fc7000的内存。
    在地址0x44E10998 (bb6fc7998)读取:0x00000000[/引用]

    是的、在这些引脚(A13.McASP0_aclkx、B13.McASP0_FSX 和 D12.McASP0_axr0)上选择模式0。 但您有[5] RX_ACTIVE 位也是0 (接收禁用)、而我们需要为 I/O 配置 McASP0_aclkx 和 McASP0_FSX 信号([5] RX_ACTIVE = 1)。 请参阅 AM335x TRM、第22.2.3节 McASP 引脚列表。 请更改地址0x44E10990/0x44E10994中0x00000020的值


    [引用 user="deep ter"] BCLK 由 McASP0_aclkx 引脚提供[/quot]

    [引用 user="deep ter"]我需要在此引脚上输出1.411MHz (1411KHz)[/quot]

    [引用 user="deep ter"]这意味着我将 AUX_CLK 作为 aclkx_pin[/quot]的来源

    McASP0_aclkx 引脚上是否有任何时钟输出?

    McASP0_aclkx 频率取决于:

    McASP0_FCLK (aux_clk)频率-请向我提供 aux_clk 的频率

    McASP0寄存器 PFUNC、Pdir、ACLKXCTL 和 AHCLKXCTL -请向我提供这些寄存器中的值

    此致、
    帕维尔

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

    您好、Pavel、

    这些是我在播放 aplay 时的寄存器转储

    root@AM335x-EVM:/bin/#[36.891944]*** 函数*Davinci_McASP_STARTUP****内

    播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声

    [36.918412]*****  SAF775x_HW_params****内

    [36.923544]  McASP0.XFMT/0x480380a8 = 0x10000

    [36.927934] 编解码器内部是时钟和帧从器件

    [36.938918] SND_SOC_DAIFMT_NB_NF

    [36.946668] MCASP->BCLK_DIV 0

    [36.949699]*** 插槽的值=2速率=44100 sbits=16

    [36.963393] DaVincia-McASP 48038000.McASP:采样率降低400 PPM

    [36.970082] 位于_Davinci_McASP_Set_clkdiv 内

    [36.987803] div_id=1 div = 17显式= 0

    [36.995256] ***** 在 SAF775x_PREPARE ****内

    [37.013157] 添加到 McASP_START_TX 函数中

    [37.016984] 寄存器 0x48038010 值 PFUNC_REG 0

    [37.021896] 寄存器 0x48038014值 Pdir 寄存器 b4000001

    [37.027761] 寄存器0x48038018 值 PDOUT 寄存器 0

    [37.033104] 寄存器0x4803801c 值 PDIN 寄存器 0

    [37.038271] 寄存器0x48038020值 PDCLR 寄存器 0

    [37.043525] 寄存器0x48038044值 GBLCTL 寄存器 200

    [37.049041] 寄存器0x48038048值 AMUTE 寄存器 0

    [37.054295] 寄存器0x480380B0 值 ACLKXCTL 寄存器 1800b0

    [37.060335] 寄存器0x480380B4 值 AHCLKXCTL 寄存器 0

    root@AM335x-EVM:/bin/# aplay:PCM_WRITE:1940:写入错误:输入/输出错误

    提供的时钟似乎不正确。

    这就是我们要获得的原因  

     DaVincia-McASP 48038000 McASP:采样率降低400 PPM

     


    谢谢

    深度

     

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

    您好、Pavel、

    我无法获得辅助时钟值。  

    我在浏览 BBB 原理图、发现了以下内容:

    因此 、我需要将 GPIO3_21配置为时钟 、该时钟将输入 McASP0_AHCLKX、如原理图所示:

    还有一个疑问   、"但您有位[5] RX_ACTIVE、也是0 (接收禁用)、而我们需要为 I/O 配置 McASP0_aclkx 和 McASP0_FSX 信号([5] RX_ACTIVE = 1)。 请参阅 AM335x TRM、第22.2.3节 McASP 引脚列表。 请更改地址0x44E10990/0x44E10994中0x00000020的值"  

    为什么我们需要设置 0x00000020值、因为我们只将其用作传输? 请说明

    谢谢

    深度

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

    [引用 USER="DEEP")[36.963393] DaVincia-McASP 48038000 McASP:采样率降低400 PPM/报价]

    查看以下 e2e 线程是否将提供帮助:

    [引用用户="deep ter"[37.016984] 寄存器 0x48038010 值 PFUNC_REG 0

    PFUNC 看起来正确

    [引用用户="deep ter"[37.021896] 寄存器 0x48038014值 Pdir 寄存 器 b4000001[/quot]

    Pdir 看起来正确

    [引用用户="深度转换器"[37.054295] 寄存器0x480380B0 值 ACLKXCTL 寄存器 1800b0[/引用]

    ACLKXCTL[5] CLKXM=1看起来是正确的

    [引用用户="deep ter"[37.060335] 寄存器0x480380B4 值 AHCLKXCTL 寄存器 0[/引用]

    AHCLKXCTL[15] HCLKXM = 0看起来不正确。

    在 Linux 内核中、这是 DaVinci_MCASP_AHCLKXCTL_REG[15] AHCLKXE、它取决于 snd_SOC_clock_in 和 snd_SOC_clock_out。 您应该使用 snd_SOC_clock_out 参数调用 snd_soc_da_set_SYSCLK ()函数。 检查 您的 snd_soc_da_set_SYSCLK ()函数在代码中的位置及其调用方式。 请参阅以下文件:

    Linux 内核/sound/soc/co/Davinci/Davinci-evm.c

    linux-kernel/sound/soc/cgeneral/simple-card.c

    deep ter 说:
    提供的时钟似乎不正确。

    哪个时钟不正确、McASP0_aclkx? 您想在这里设置141.1KHz、但现在有什么频率?

    此致、
    帕维尔

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

    [引用 user="deep ter"]因此 我需要将 GPIO3_21配置为时钟 、该时钟将输入 McASP0_AHCLKX、如原理图所示:

    如果要将 aux_clk 用作 aclkx 的源、则不需要 ahclkx。 使用 aux_clk 是在 AM335x TRM 22.3.5时钟和帧同步发生器部分中解释的"内部"情况、而使用 ahclkx 是"混合"情况。 您应该使用一个或另一个、而不是同时使用两个。

    [引用 user="deep ter"]

    还有一个疑问   、"但您有位[5] RX_ACTIVE、也是0 (接收禁用)、而我们需要为 I/O 配置 McASP0_aclkx 和 McASP0_FSX 信号([5] RX_ACTIVE = 1)。 请参阅 AM335x TRM、第22.2.3节 McASP 引脚列表。 请更改地址0x44E10990/0x44E10994中0x00000020的值"  

    为什么我们需要设置 0x00000020值、因为我们只将其用作传输? 请说明

    [/报价]

    AM335x TRM 第22.2.3节 McASP 引脚列表中已经对此进行了说明:

    (1)
    这些信号也用作重定时或同步数据的输入。 关联的 CONF_ _ RXACTIVE 位
    必须将信号设置为1才能启用返回模块的输入。

    您应该将这些输出引脚(aclkx 和 FSX)配置为输入/输出、以实现重定时和同步数据。

    此致、
    帕维尔

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

    您好、Pavel、

    我浏览了 BBB 原理图。。。我使用了 AHCLKX_IN 作为输入。

    我现在在 ACLKX 和 AFSX 引脚上获得时钟、并且能够通过 aplay 获取.wav 文件。

    现在、我的流程如下所示:
    24.576MHz (来自 BBB 晶振)--> AHCLKX_IN->ACLKXCTL[4:0]--> ACLKX->位时钟-->音频编解码器


    ACLKX 引脚上的频率= 1.446MHz (而不是1.411MHz)
    AFSX 引脚= 45.19KHz (而不是44.1KHz)

    因此、我会在音频中听到很多噪声。 您对此有什么线索吗?



    root@AM335x-EVM:/bin# aplay Tum_Hi_Ho.wav
    [143.097568]***函数内部*DaVinci_McASP_STARTUP ****
    播放波'TMU_HI_HHO.wav':有符号32位小端序、速率44100Hz、立体声
    [143.126679] SAF775x_HW_params****内
    [143.131645] McASP0.XFMT/0x480380a8 = 0x10000
    [143.14151]编解码器内部是时钟和帧从器件
    [143.15071] SND_SOC_DAIFMT_NB_NF
    [143.158229] MCASP->BCLK_DIV 0
    [143.161258]***插槽的值=2速率=44100 sbits=16
    [143.177381] Davinci-McASP 48038000 McASP:采样率降低400 PPM
    [143.184276]位于__Davinci_McASP_Set_clkdiv 内
    [143.188676] div_id=1 div = 17显式= 0
    [143.197052]***** 在 SAF775x_PREPARE ****内
    [143.230134]
    [143.233964]寄存器0x48038010值 PFUNC_REG 0
    [143.23887]寄存器0x48038014值 Pdir 寄存器 b4000001
    [143.244740]寄存器0x48038018值 PDOUT 寄存器0
    [143.250082]寄存器0x4803801c 值 PDIN 寄存器1c000000
    [143.255249]寄存器0x48038020值 PDCLR 寄存器0
    [143.260504]寄存器0x48038044值 GBLCTL 寄存器1f00
    [143.266107]寄存器0x48038048值 AMUTE 寄存器0
    [143.271362]寄存器0x480380B0值 ACLKXCTL 寄存器 b0
    [143.277054]寄存器0x480380B4值 AHCLKXCTL 寄存器0

    我的 PINMUX 寄存器:

    root@AM335x-EVM:/bin/devmem2 0x44E10990
    /dev/mem 已打开。
    映射到地址 bb6ff7000的内存。
    在地址0x44E10990 (bb6ff7990)处读取:0x00000020----------------- RX_ACTIVE 位设置为1
    root@AM335x-EVM:/bin/devmem2 0x44E10994
    /dev/mem 已打开。
    映射到地址 bb6f78000的内存。
    在地址0x44E10994 (0xb6f78994)处读取:0x00000020 ------ RX_ACTIVE 位设置为1
    root@AM335x-EVM:/bin# devmem2 0x44E10998
    /dev/mem 已打开。
    映射到地址 bb6ff1000的内存。
    在地址0x44E10998 (0xb6ff1998)处读取:0x00000000

    谢谢  

    深度

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

    [引用 user="deep ter"] ACLKX 引脚上的频率= 1.446MHz (而不是1.411MHz)
    AFSX 引脚= 45.19KHz (而不是44.1KHz)

    因此、我会在音频中听到很多噪声。 您对此有什么线索吗?[/引述]

    您的 ACLKX/BCLK 应该为1.4112MHz、FSX 应该为44.1kHz、请参阅下面的 wiki:

    当您使用 McASP0_ahclkx 引脚作为输入时、请确保在 conf_McASP0_ahclkx 寄存器中具有正确的引脚多路复用值

    另请提供您在 AFSXCTL、ACLKXCTL 和 AHCLKXCTL 寄存器中拥有的最新值。

    此致、
    帕维尔

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

    我已检查上述链接。 这意味着我需要添加

    RET = snd_soc_da_set_clkdiv (cpu_dai、1、SYSCLK/BCLK_freq);

    RET = snd_soc_da_set_SYSCLK (cpu_dai、0、SYSCLK、snd_SOC_clock_out);

    硬件参数函数中的参数、对吧?

    是的、我使用 McASP0_ahclkx 作为输入。

    McASP0_Pins:McASP0_Pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x9ac、PIN_INPUT_PULLUP | MUX_MODE0)/* McASP0_ahcklx.McASP0_ahclkx *
    AM33XX_IOPAD (0x990、PIN_INPUT_PULLDOWN | MUX_MODE0)/* McASP0_aclkx.McASP0_aclkx *
    AM33XX_IOPAD (0x994、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0.McASP0_FSX *
    AM33XX_IOPAD (0x998、PIN_OUTPUT 下拉| MUX_MODE0)/* McASP0.McASP0_axr0 *
    AM33XX_IOPAD (0x86c、PIN_OUTPUT 下拉| MUX_MODE7)/* GPMC_A11.GPIO1_27 GPIO 引脚以启用24.576MHz 振荡器*/
    >;
    };


    下面是寄存器转储。


    root@AM335x-EVM:/bin# aplay Tum_Hi_Ho.wav
    [79.053725]***函数内*Davinci_McASP_STARTUP ****
    播放波'TMU_HI_HHO.wav':有符号32位小端序、速率44100Hz、立体声
    [79.1247477] DaVincio-McASP 48038000 McASP:采样率降低400 PPM
    [79.191519]中添加了"ADCK_START_TX"函数
    [79.195350]寄存器0x48038010值 PFUNC_REG 0
    [79.200262]寄存器0x48038014值 Pdir 寄存器 b4000001
    [79.206128]寄存器0x48038018值 PDOUT 寄存器0
    [79.211471]寄存器0x4803801c 值 PDIN 寄存器1c000000
    [79.233362]寄存器0x480380B0值 ACLKXCTL 寄存器 b0
    [79.239053]寄存器0x480380B4值 AHCLKXCTL 寄存器0
    [79.242012]寄存器0x480380AC 值 AFSXCTL 寄存器113

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

    [quote user="deep ter">我已检查上述链接。 这意味着我需要添加

    RET = snd_soc_da_set_clkdiv (cpu_dai、1、SYSCLK/BCLK_freq);

    RET = snd_soc_da_set_SYSCLK (cpu_dai、0、SYSCLK、snd_SOC_clock_out);

    在虚拟驱动程序的 hw_params 函数中、对吗?

    不要盲目跟随 wiki (就像您一样)、它用于24.000MHz 内部/辅助时钟、而不是24.576MHz 外部/ahclkx_in 时钟。

    [引用 user="deep ter"]root@AM335x-EVM:/bin/aplay Tum_Hi_Ho.wav
    [79.053725]***函数内*Davinci_McASP_STARTUP ****
    播放波'TMU_HI_HHO.wav':有符号32位小端序、速率44100Hz、立体声
    [79.1247477] DaVincio-McASP 48038000 McASP:采样率降低400 PPM
    [79.191519]中添加了"ADCK_START_TX"函数
    [79.195350]寄存器0x48038010值 PFUNC_REG 0
    [79.200262]寄存器0x48038014值 Pdir 寄存器 b4000001
    [79.206128]寄存器0x48038018值 PDOUT 寄存器0
    [79.211471]寄存器0x4803801c 值 PDIN 寄存器1c000000
    [79.233362]寄存器0x480380B0值 ACLKXCTL 寄存器 b0
    [79.239053]寄存器0x480380B4值 AHCLKXCTL 寄存器0
    [79.242012]寄存器0x480380AC 值 AFSXCTL 寄存器113[/引述]

    McASP 寄存器的值看起来是正确的。 您的问题可能在外部编解码器中。

    您能否在 AHCLKX、ACLKX 和 FSX 引脚上连接一个示波器并检查那里的频率是多少?

    此致、
    帕维尔

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

    您好、Pavel、

    请告诉我在何处以及如何为  24.576MHz 外部/ahclkx_in 时钟添加分频器。

    这些是我的波形:

    ACLKX:  

    AFSX:

    AHCLKX_IN 输出、我将在某个时候共享。 我尚未捕获它。

    谢谢

    深度

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

    [引用 user="deep ter"]您能否告诉我在何处以及如何为  24.576MHz 外部/ahclkx_in 时钟添加分频器。

    ahclkx_in 时钟的分频器只有一个、并且已经被使用、它是 ACLKXCTL[4:0] CLKXDIV。 我不知道您可以如何以及在哪里添加额外的分频器。

    此外、借助适用于 ahclkx_in 的24.576MHz 源时钟、我们可以得到频率为1.446MHz 的 ACLKX。 我看不到我们如何更精确地调整该时钟。

    此致、
    帕维尔

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

    这意味着我们不能有 任何具有整数值的内部分频器。 如果我们使用48kHz 采样率、

    然后 位 clk = 16 * 2 * 48kHz

    = 1.536MHz

     24.576MHz/1.536MHz = 16

    因此、该16可以正常工作。 现在问题是 、我可以将其 添加到 DaVincia-McAP.C 中 您能检查一下吗

    DaVinci_McASP_HW_params ()

    默认情况下、采样率为44.1kHz。 即使我播放48kHz 的音频 、McASP-Davinci.c 中的采样率也是 44.1kHz

    检查以下日志:

    root@AM335x-EVM:/bin# aplay piano2.wav &

    [1] 835

    root@AM335x-EVM:/bin/#[631.083340]*** 函数*Davinci_McASP_STARTUP****内

    播放波'piano2.wav':有符号16位小端字节序、速率48000Hz、立体声

    [631.105638]*****  SAF775x_HW_params****内

    [631.110603]  McASP0.XFMT/0x480380a8 = 0x18074

    [631.120518] 编解码器内部是时钟和帧从器件

    [631.132229] SND_SOC_DAIFMT_NB_NF

    [631.135520]  MCASP->BCLK_DIV 0 ------------------ 我需要更改该值。 但在 simple-card.c 中找不到它  

    [631.138518]*** 插槽的值=2速率=44100 sbits=16

    [631.156016] DaVincia-McASP 48038000.McASP:采样率降低400 PPM

    [631.163045] 位于__Davinci_McASP_Set_clkdiv 内

    [631.167448] div_id=1 div = 17显式= 0

    [631.176300]*****  在 SAF775x_PREPARE ****内

    [631.214703] 添加到 McASP_START_TX 函数中

    [631.218535] 寄存器 0x48038010 值 PFUNC_REG 0

    [631.223445] 寄存器 0x48038014值 Pdir 寄存器 b4000001

    [631.229313] 寄存器0x48038018 值 PDOUT 寄存器 0

    [631.236455] 寄存器0x4803801c 值 PDIN 寄存器 0

    [631.239823] 寄存器0x48038020值 PDCLR 寄存器 0

    [631.245078] 寄存器0x48038044值 GBLCTL 寄存器 1f00

    [631.250680] 寄存器0x48038048值 AMUTE 寄存器 0

    [631.255936] 寄存器0x480380B0 值 ACLKXCTL 寄存器 b0

    [631.261627] 寄存器0x480380B4 值 AHCLKXCTL 寄存器 0

    谢谢

    深度

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

    [引用 user="deep ter"]

    这意味着我们不能有 任何具有整数值的内部分频器。 如果我们使用48kHz 采样率、

    然后 位 clk = 16 * 2 * 48kHz

    = 1.536MHz

     24.576MHz/1.536MHz = 16

    因此、该16可以正常工作。 现在问题是 、我可以将其 添加到 DaVincia-McAP.C 中 您能检查一下吗

    [/报价]

    探索 ACLKXCTL[4:0] CLKXDIV 值、在达芬奇-McAP.C.中将其设置为0x10 (17分频) 您可以将其更改为0xF (16分频)。 请参阅以下功能:

    Davinci_McBSP_calc_clk_div ()

    _Davinci_McASP_set_clkdiv ()

    [引用 user="deep ter"]

    默认情况下、采样率为44.1kHz。 即使我播放48kHz 的音频 、McASP-Davinci.c 中的采样率也是 44.1kHz

    检查以下日志:

    root@AM335x-EVM:/bin# aplay piano2.wav &

    [/报价]

    您可以将许多参数传递给 aplay 工具、其中一个参数是 RATE。 请尝试使用"aplay -h"获取更多信息。

    此致、
    帕维尔

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

    您好、Pavel、

    现在我们使用 AHCLKX_IN 作为 McASP 的输入。 我们是否需要在 器件树中设置系统时钟频率参数?

    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="TI BeagleBone Black";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;

    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    系统时钟频率=<24576000>;
    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;

    我仍在尝试设置 CLKXDIV、但未成功设置。

    谢谢

    深度

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

    [引用 user="deep ter">现在我们使用 AHCLKX_IN 作为 McASP 的输入。 我们是否需要在 器件树中设置系统时钟频率参数。

    deep ter 说:
    sound_master:simple-audio-card、CPU{
    Sound-Dai =<&McASP0>;
    系统时钟频率=<24576000>;
    };[/报价]

    是的、看起来是正确的。 我建议您检查 McASP 驱动程序中的 SYSCLK 频率值、以确保"系统时钟频率"参数正确设置。 有关更多信息、请参阅以下文件和函数:

    linux-kernel/sound/soc/cgeneral/simple-card.c

    ASOC_simple_card_sub_parse_of ()

    ASOC_simple_card_hw_params()

    _ASOC_simple_card_dai 初始化()

    linux-kernel/sound/soc/co-core.c

    SND_SoC_DAI_SET_SYSCLK ()-使用 SND_SOC_CLOCK _IN 进行设置

    Linux 内核/sound/soc/co/Davinci/Davinci-McAP.c

    DaVinci_McASP_SET_SYSCLK () ->检查 McASP->SYSCLK_freq 中的最终值是多少

    您还可以启用调试模式,因此您将获得来自 DEV_dbg()消息的更多信息。

    另请参阅"将 DRA7xx 音频连接到模拟编解码器"应用手册、5.3示例:McASP3在 I2S 模式下、与您的情况非常相似

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

    您好、Pavel、

    感谢您的回复。

    通过设置系统时钟频率=<24576000>、McASP 也将其作为 SYSCLK 频率。 通过应用以下日志进行检查:

    root@AM335x-EVM:/bin# aplay piano2.wav

    [4314.83400]***函数内部*Davinci_McASP_STARTUP ****

    播放波'piano2.wav':有符号16位小端字节序、速率48000Hz、立体声

    [4314.850910]******* SAF775x_HW_params****内

    [4314.860766]编解码器内部是时钟和帧从器件

    [4314.871545] snd_SOC_DAIFMT_NB_NF

    [4314.879142] MCLK->BCLK_MASTER = 1.

    [4314.886731] McASP->SYSCLK_freq =24576000   --- (在器件树中设置时钟频率)

    [4314.890708] MCASP->BCLK_DIV 0

    [4314.901643]***插槽的值=2速率=48000 sbits=16

    [4314.912198]位于_Davinci_McASP_Set_clkdiv 内

    [4314.91662] div_id=1 div = 16 explicate= 0-------  检查分频器值

    [4314.920575]位于 MCBSP_CLKDIV_BCLK 内

    根据上述频率设置、采样率错误"Davinci-McASP 48038000。McASP:采样率关闭400 PPM" 已经消失。 现在没有出现任何此类错误。

    另一个有趣的观察结果:

    如果我播放任何具有44.1kHz 采样频率的歌曲....它会自动将采样率更改为32kHz,以便我们可以得到一个整数分频器。 如需说明、请查看以下日志:

    @AM335x-EVM:/bin/aplay audiocheck1_10th_copy_converted.wav
    [869.270804]***函数内部*Davinci_McASP_STARTUP ****
    播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声
    [869.293103]***** SAF775x_HW_params****内
    [869.298072] McASP0.XFMT/0x480380a8 = 0x18074
    [869.308068]编解码器内部是时钟和帧从器件
    [869.317176] SND_SOC_DAIFMT_NB_NF
    [869.320469] MCLK->BCLK_MASTER = 1.
    [869.331535] McASP->SYSCLK_freq =24576000
    [869.342243] MCASP->BCLK_DIV 0
    [869.345274]***插槽的值=2 rate =32000 sbits=16     ------------------------------ 此处的采样频率从44.1KHz 更改为32KHz
    [869.350712]位于__Davinci_McASP_Set_clkdiv 内
    [869.366954] div_id=1 div =24 explicate= 0  ------------------------------------------------------- 检查分频器值  
    [869.370935] MCBSP_CLKDIV_BCLK 内部
    [869.374924] ACLKXCTL 的 MCASP_CLKDIV_BCLK 内的值为0x1800b7

    我还将附加采样频率的图像。 其中一个采样频率= 48kHz 、另一个采样频率为32kHz。

    现在、在获取上述采样频率之后。 我仍然会听到很多噪声。 您能否确认现在处理器方面没有问题...以便我可以专注于编解码器方面。

    感谢 Pavel 的帮助!!

    深度

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

    请删除您的调试打印稿,并仅启用 DEV_dbg()打印。 然后向我提供完整的启动日志和播放日志。

    AFSX 引脚上有48kHz 的频率、但 ACLKX 和 AXR0引脚上有预期的信号吗?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    我将启用 CONFIG_DYNAMIC_DEBUG 并向您共享日志。

    我可以测量 ACLKX 引脚上的信号、但如何验证 AXR0信号。 我能够听到编解码器的音频...但随着音频的出现、会产生很多噪声。

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

    您好、Pavel、

    是的、ACLKX 引脚上的值正常。 请检查 ACLKX 波形。

       --对于采样率为48kHz

     ------------------ 44.1kHz 的采样率

    我在内 核中启用了 CONFIG_DYNAMIC_DEBUG 并提供了以下命令

    Echo 8 >/proc/sys/kernel/printk 

    我正在附加我的引导日志。

    e2e.ti.com/.../4214.console_5F00_log.txt



    谢谢、
    深度

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

    deep ter 说:
    我将启用 CONFIG_DYNAL_DEBUG 并向您共享日志。

    好的

    [引用 user="deep ter"]我可以测量 ACLKX 引脚上的信号。但如何验证 AXR0信号[/引用]

    AXR0引脚用于音频数据传输。 您可以查看 AM335x 数据表和 TRM、了解该引脚的预期结果。 请参阅下图:

    AM335x 数据表、图7-87。 McASP 输出时序
    AM335x TRM、图22-10. 内部集成声音(I2S)格式

    您还可以在 AM335x EVM 或 Starterkit 上运行音频回放测试、并监控 aclkx/afsx/axr0引脚、以查看系统正常运行时它们具有的功能。

    您还可以在 AM335x BeagleBoneBlack HDMI 上运行音频回放测试、并监控 aclkx/afsx/axr0引脚、以查看系统正常运行时它们具有的功能。

    [引用 user="deep ter"]我可以从编解码器中听到音频...但随着音频的出现、会出现很多噪声。

    当噪声发生时、检查 McASP 寄存器中是否记录了一些错误(如缓冲区下溢/溢出)。 另请检查系统资源(CPU 负载、内存使用情况)是否可用于音频应用程序(系统未耗尽资源)。 查看以下指针是否将处于帮助中:

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

    请检查随附的日志。 尽管我已启用 CONFIG_DYNAL_DEBUG。。。 我没有得到任何日志... 我在上一封邮件中附加了我的日志。

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

    [引用 user="deep ter"]是的、ACLKX 引脚上的值正常。 请检查 ACLKX 波形。[/QUERP]

    [引用 user="deep ter"] --对于48kHz[/引用]的采样率

    看起来是正确的。 您有24.576MHz 源时钟除以16、可针对48kHz 采样率产生1.536MHz 位时钟。这与16位立体声(2通道)音频的公式一致:

    BCLK =通道* SampleRate * BitsPerSample = 2 * 48K * 16

    在这种情况下、您是否可以确认您具有 ACLKXCTL[4:0] CLKXDIV = 0x0F (16分频)?


    [引用用户="deep ter")------------------------------------------------------- 对于采样率44.1kHz

    这看起来不正确。 原因是您无法从24.576MHz 源时钟产生正确的位时钟(1.4112MHz)。 您可以尝试将源时钟从24.576外部更改为内部 aux_clk、以生成正确的位时钟。

    deep ter 说:
    我在内 核中启用了 CONFIG_DYNAL_DEBUG 并给出了以下命令[/quot]

    有关动态调试使能的详细信息、请参阅以下 wiki:

    processors.wiki.ti.com/.../WL12xx_NLCP_Driver_Debug

    另请参阅:

    deep ter 说:
    我正在附加我的引导日志

    您是否还可以键入"aplay -l "并为我提供结果?

    此致、
    帕维尔

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

    在上一个查询中,

    "在这种情况下、您可以确认您具有 ACLKXCTL[4:0] CLKXDIV = 0x0F (16分频)吗? "

    是的、48kHz 情况下的分频器为16。

    ACLKXCTL af 的寄存器0x480380B0值(因此、潜水员为16)


    现在、如果我将时钟源更改为 AHCLKX_IN、将外部24.576MHz 振荡器更改为 AUX_CLK。 那么、这将是我的设备树更改。


    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    系统时钟频率= ; ---- 将24.576MHz 更改为 SYS_clk_IN
    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;
    };

    您能否确认此更改是否正常?

    另外、在我准备好设置后、我还将向您分享 aplay -l 日志。



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

    [引用 user="deep ter">现在,如果我要将时钟源从外部24.576MHz 振荡器更改为 AUX_CLK,请将时钟源更改为 AHCLKX_IN。 那么、这将是我的设备树更改。


    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    系统时钟频率= ;---- 将24.576MHz 更改为 SYS_clk_IN
    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;
    };

    您能否确认此更改是否正常?

    不、这对我来说似乎不正确、原因有两个:

    AUX_clk 不是 SYS_CLKIN_CK、AUX_clk 是 McASP0_fck

    在 AM335x EVM 中使用了 SK aux_clk、但在 DTS 文件中不需要此类条目

    在 AM335x EVM 和 SK 中、我们有:

    AM335x-EVM.dts

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

          sound_master:simple-audio-card、codec{
             sound-dai =<&tlv320aic3106>;
             系统时钟频率=<12000000>;
          };

    AM335x-evmsk.dts

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

          sound_master:simple-audio-card、codec{
             sound-dai =<&tlv320aic3106>;
             系统时钟频率=<24000000>;
          };

    如您所见、我们没有简单音频卡 CPU 节点的系统时钟频率条目。

    在 AM335x BBB 中、我们有:

    AM335x-bonebblack.dts

    CLK_McASP0_FIXED:CLK_McASP0_FIXED{
          #clock-cells =<0>;
          兼容="固定时钟";
          时钟频率=<24576000>;
       };

       CLK_McASP0:CLK_McASP0{
          #clock-cells =<0>;
          兼容="GPIO-GATE -时钟";
          时钟=<&clk_McASP0_FIXED>;
          ENABLE-GPIO =<&GPIO1 27 0>;//在 GPIO1_27上启用 BeagleBone Black Clk *
       };
    dailink0_master:simple-audio-card、CPU{
             Sound-Dai =<&McASP0>;
             时钟=<&clk_McASP0>;
          };

          简单音频卡、编解码器{
             Sound-Dai =<&tda19988>;
          };

    这里我们为 McASP0 AHCLKX 输入提供24.576MHz 的频率、因此我们只能为 TDA19988 HDMI 音频产生48kHz、96KHz 和192KHz 的采样率。

    此致、
    帕维尔

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

    我尝试了两个选项:

    1) 1)使用内部时钟:
    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="TI BeagleBone Black";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;

    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    时钟=<&McASP0_fck>; -------------------- (已从24576000更改为 McASP0_fck 并已更改节点名称
    从系统时钟频率到时钟)

    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;
    };
    };
    };

    root@AM335x-EVM:/bin# aplay audiocheck1_10th_copy_converted.wav
    播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声
    [59.376201] DaVincia-McASP 48038000.McASP:采样率降低400 PPM
    aplay:PCM_WRITE:1940:写入错误:输入/输出错误

    "出现 I/p 输出误差"

    ACLKX 引脚上没有时钟。 与之前配置的一样、Ahclkx_in 仍然配置为 I/p。 仍然没有使用辅助时钟。
    是否有任何其他设置可使用 McASP 功能时钟。


    2) 2)使用外部时钟时、我使用了与 AM335x-bonebblack.dts 中给出的设置相同的设置


    CLK_McASP0_FIXED:CLK_McASP0_FIXED{
    #clock-cells =<0>;
    兼容="固定时钟";
    时钟频率=<24576000>;
    };

    CLK_McASP0:CLK_McASP0{
    #clock-cells =<0>;
    兼容="GPIO-GATE -时钟";
    时钟=<&clk_McASP0_FIXED>;
    ENABLE-GPIO =<&GPIO1 27 0>;//在 GPIO1_27上启用 BeagleBone Black Clk *
    };

    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="TI BeagleBone Black";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;

    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    时钟=<&clk_McASP0>;

    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;


    在本例中、时钟会出现但具有相同的噪声和频率。

    root@AM335x-EVM:/bin# aplay audiocheck1_10th_copy_converted.wav
    播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声

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

    [引用 user="deep ter"] ACLKX 引脚上没有时钟。 与之前配置的一样、Ahclkx_in 仍然配置为 I/p。 仍然没有使用辅助时钟。
    是否有任何其他设置可使用 McASP 功能时钟。

    将 snd_SOC_clock_out 参数与 snd_SoC_Dai_set_SYSCLK ()结合使用

    [引用 user="deep ter"]时钟频率=<24576000>;

    [引用 user="deep ter"]播放波'audiocheck1_10W_copy_converted.wav':有符号16位小端序、速率44100Hz、立体声

    AHCLKX_IN 上的24576000Hz 时钟不支持44100Hz 采样率

    此致、
    帕维尔

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



    使用外部时钟、我使用了与 AM335x-bonebblack.dts 中给出的设置相同的设置


    CLK_McASP0_FIXED:CLK_McASP0_FIXED{
    #clock-cells =<0>;
    兼容="固定时钟";
    时钟频率=<24576000>;
    };

    CLK_McASP0:CLK_McASP0{
    #clock-cells =<0>;
    兼容="GPIO-GATE -时钟";
    时钟=<&clk_McASP0_FIXED>;
    ENABLE-GPIO =<&GPIO1 27 0>;//在 GPIO1_27上启用 BeagleBone Black Clk *
    };

    听起来{
    兼容="简单音频卡";
    simple-audio-card、name ="TI BeagleBone Black";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;

    sound_master:simple-audi-card、CPU{
    Sound-Dai =<&McASP0>;
    时钟=<&clk_McASP0>;

    };

    简单音频卡、编解码器{
    sound-dai =<&saf775x>;



    这在处理器方面工作正常。 问题来自 Dirana3方面。 我们需要设置的格式是异步飞利浦模式输入,而不是16位 LE。 在此模式下、Dirana3可以接受任何频率字时钟(32kHz、48kHz)的输入、并且可以使用其采样率转换器将其设为44.1kHz

    感谢您的所有支持。 当我开始捕获数据时、我会回来

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

    [引用 user="deep ter"]在此模式下,Dirana3可以获取任何频率字时钟(32kHz、48kHz)的输入,并且可以使用其采样率转换器使其成为44.1kHz

    这听起来很合理。 TI 音频编解码器的工作方式相同、它们具有内部 PLL 以生成可变时钟/速率。

    此致、
    帕维尔