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/AM3359:I2S 麦克风配置

Guru**** 2538930 points
Other Parts Discussed in Thread: PCM5102A, PCM1864

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/677078/linux-am3359-i2s-microphone-configuration

器件型号:AM3359
主题中讨论的其他器件:PCM5102APCM1864

工具/软件:Linux

我尝试将 I2S 麦克风(https://www.adafruit.com/product/3421)与 BeagleBone Black 连接。 我遵循了文章(http://www.ti.com/lit/an/sprac97/sprac97.pdf)、并按照文章中的建议更新了器件树和 Linux 内核。  

器件树的 I2S 组件(用于麦克风)作为 dtsi 包含在主器件树源代码中。 dtsi 的内容如下所示


&am33xx_pinmux {
        mcasp1_pins: mcasp1_pins {
             pinctrl-single,pins = <
                /* sink must enable receivers */
                0x1a0 0x23
                /* P9_42 mcasp1_aclkx - bit clock */
                0x1a4 0x23
                /* P9_27 mcasp1_fsx - frame sync */
                0x1a8 0x23
                /* P9_41 mcasp1_axr0 - i2s input */
             >;
        };
};

&mcasp1 {
        #sound-dai-cells = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&mcasp1_pins>;
        status = "okay";
        op-mode = <0>;
        tdm-slots = <2>;
        num-serializer = <4>;
        serial-dir = < /* 1 TX 2 RX 0 unused */
                2 0 0 0
                >;
        rx-num-evt = <1>;
        tx-num-evt = <1>;
};

/ {
        pcm5102a: pcm5102a {
                #sound-dai-cells = <0>;
                compatible = "ti,pcm5102a";
                status = "okay";
        };

        sound1: sound@1 {
                compatible = "simple-audio-card";
                simple-audio-card,name = "PCM5102a";
                simple-audio-card,format = "i2s";
                simple-audio-card,bitclock-master = <&sound1_master>;
                simple-audio-card,frame-master = <&sound1_master>;
                simple-audio-card,bitclock-inversion;

                simple-audio-card,cpu {
                        sound-dai = <&mcasp1>;
                };

                sound1_master: simple-audio-card,codec {
                #sound-dai-cells = <0>;
                sound-dai = <&pcm5102a>;
                clocks = <&mcasp1_fck>;
                clock-names = "mclk";
                };
        };
};


I have also compiled the kernel with a new driver pcm5102 as suggested in the document. Finally, I see the driver listed in the output of the arecord command.

root@arm:/sys/class/gpio# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCM5102a [PCM5102a], device 0: davinci-mcasp.0-pcm5102a-hifi pcm5102a-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


但是、每当我尝试录制音频时、我都无法获取任何音频数据。 音频文件是格式、但无论我尝试录制音频的时间长短、文件大小始终为44字节。 显然、文件中没有数据。  

使用 arecord 命令进行记录时出现错误、如下所示

arecord -d 10 -Dhw:0,0 -f dat audio.wav
Recording WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
arecord: pcm_read:2032: read error: Input/output error

此外、每当我尝试将时钟(McASP1_ACLKR (位时钟)- P9_42)与示波器连接时、我都看不到任何脉冲。 似乎该引脚上没有适当的时钟信号。 我该如何进行调试和修复?

有什么想法吗?

Parag

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

    您好 Parag、

    [引用用户="Parag Sharma"] McASP1_PINS:McASP1_PINS{pinctrl-single、PINS =</* SINK 必须启用接收器*/ 0x1a0 0x23 // P9_42 McASP1_aclkx -位时钟*/[/QUERE]

    [报价用户="Parag Sharma"]简单音频卡,位时钟主设备=<&sound1_MASTER>;[/quot]

    [引用 user="Parag Sharma"] sound1_master:simple-audio-card、codec{#sound-di-cells =<0>;sound-dai =<&pcm5102a>;时钟=<&McASP1_fck>;时钟名称="MCLK";};

    [引用 USER="Parag Sharma]此外、每当我尝试使用示波器连接时钟(McASP1_ACLKR (位时钟)- P9_42)时、我都看不到任何脉冲。 似乎该引脚上没有适当的时钟信号。 我可以做什么来进行调试和修复?

    您将 AM335x McASP1模块配置为从器件、因此需要提供从 PCM5102A 虚拟编解码器到 AM335x 引脚 B12 McASP0_ACLKR.McASP1_aclkx 的位时钟

    在用户空间(使用 devmem2或 omapconf 工具)中检查寄存器 CONF_McASP0_ACLKR/0x44E109A0中的值是否正确。

    您提供的链路的位时钟方案为:

    PCM1864 ADC --> C5517 DSP J29_Pin3 --> AM335x McASP1 P9_42/B12

    您的位时钟方案应该是:

    Adafruit MIC -> AM335x McASP1 P9_42/B12

    另请检查以下指针以了解音频调试指南:

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

    此致、
    帕维尔

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

    您好、Pavel、

    感谢您帮助解决这个问题。 但是、 是否可以将 AM335x McASP1模块配置为主器件而不是从器件、以便其自身能够驱动时钟?

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

    是的、您可以将 AM335x McASP 模块配置为主模块。

    SND_SOC_DAIFMT_CBS_CFS - McASP 是位时钟和帧同步的主器件

    有关更多信息、请参阅以下指针:

    www.ti.com/.../sprac09a.pdf
    5.2数据格式和时钟
    5.3示例:I2S 模式下的 McASP3

    processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example


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

    您好、Pavel

    我根据 processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example 配置了 McASP0和器件树

    我看到 BCLK 和 Fsclk 上的时钟输出和数据正在传输中,但是

    当我尝试在捕获模式下配置它时、位时钟存在、但它不是所需的形式、并且 fssclk 完全丢失。

    请建议解决方案。

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

    您使用的是哪种版本的 AM335x TI PSDK (如果有)?

    processors.wiki.ti.com/.../Sitara_Linux_Audio_DAC_Example

    此 wiki 对旧版内核版本有效。 对于最新(4.9)内核版本、您应该使用 DTS 文件。 请参阅以下文档、了解最新信息:

    www.ti.com/.../sprac97.pdf

    如果问题仍然存在、请附上最新的 DTS 文件以供查看。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    *版权所有(C) 2012 Texas Instruments Incorporated - http://www.ti.com/
    *
    此程序是免费软件;您可以根据
    
    免费软件基金会*发布的 GNU 通用公共许可证版本2的条款重新分发和/或修改*。
    //
    /dts-v1/;
    
    #include "am33xx.dtsi"
    #include "am335x-bone-common.dtsi"
    
    &ldo3_reg{
    reguler-min-microvolt =<1800000>;
    reguler-max-microvolt =<3300000>;
    reguler-always on;
    };
    
    &mmc1{
    VMMC-supply =< 1800000>
    
    
    };pinam3300000>
    ;}pinmuxx pinmuxx pinmuxx: McASP0_Pins{
    pinctrl-single、Pins =<
    0x190 (PIN_OUTPUT_PULLUP | MUX_MODE0)/* McASP0_aclkx */
    0x194 (PIN_OUTPLOW_PULLUP | MUX_MODE0)/* McASP0_FSX*
    / 0x198 (PIN_INPUT_PULLUP | M0*
    
    
    
    
    
    =默认
    
    
    值);"McASP0_MODE0 = 0 = 0;</INCINCINCINCINCINCINCning_MODE0 = 0;*= 0 =";McASP0 ="INCINCning_MODE0 = 0 = 0 =";McASP0 =";McASP0 =" /* mcsp_iis_mode */
    tdm-slots =<2>;
    /* 16串行器*/
    serial-dir =</* 0:非活动、1:TX、2:Rx */
    2 1 0
    >;
    TX-num-evt =<32>;
    rx-num-evt =<32>;
    };
    
    /{
    
    pcm5102a
    
    
    
    
    ={pcmti、pcm5102a;}音频兼容:pcmti ={pcmta-cmti、p5102a}
    TI、模型="TI PCM5102A";
    TI、音频编解码器=<&pcm5102a>;
    TI、McASP-控制器=<&McASP0>;
    TI、编解码器时钟速率=<24000000>;
    };
    
    }; 

    您好、Pavel 我使用的是 ti-processor-sdk-linux-am335x-evm-04.03.00.05

    我要使用的 DTS 是

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

    [引用 user="AJINKYA Prabhu"]声卡{兼容="ti,pcm5102A-EVM-AUDIO";

    您应该使用"简单音频卡"

    听起来{
          兼容="简单音频卡";

    有关更多信息、请参阅以下 e2e 主题:

    此致、
    帕维尔

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

    将其从更改为

    Sound{compatible ="ti、pcm5102a-evm-audio"; 

    更改为

    Sound{compatible ="简单音频卡"; 

    原因:

    sh-3.2# arecord -l
    arecord:device_list:268:找不到声卡...
    sh-3.2# aplay -l
    aplay:device_list:268:找不到声卡...
    

    使用 pcm5102A-EVM-AUDIO 可以实现这一点

    SH-3.2# aplay -l
    ****回放硬件设备列表****
    卡0:PCM5102A [TI PCM5102A],设备0:捕获 pcm5102a-hifi-0[]
    子设备:1/1
    子设备#0
    :子设备#0 sh-3.2# arecord -l
    ****捕获硬件设备列表**
    卡0:PCM5102A
    子设备#0: TI Sub设备#PCM5102a]
    子器件#0
    

    使用 pcm5102A-EVM-AUDIO 可以为播放提供两个时钟

    和 BCLK

    但记录显示:

    (arecord -DHW:0、0 -f dat asdd.wav)

    FSCLK 的示例

    BCLK

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

    [引用用户="AJINKYA Prabhu"]

    将其从更改为

    Sound{compatible ="ti、pcm5102a-evm-audio"; 

    更改为

    Sound{compatible ="简单音频卡"; 

    原因:

    sh-3.2# arecord -l
    arecord:device_list:268:找不到声卡...
    sh-3.2# aplay -l
    aplay:device_list:268:找不到声卡... 

    [/报价]

    这是因为您只更改了"兼容"、但这还不够。 如 sprac97.pdf 中所述、您应该在 DTS 中更改更多内容

    4.2.3.1简单音频卡
    PCM5102A 器件驱动程序和 AM335X 处理器之间的管道过程通过简单音频卡器件树绑定在器件树中完成。 有关可用的简单音频卡设备树属性的更多信息、请参阅以下内核文档:

    Documentation/devicetree/bindings/sound/simple-card.txt

    pcm5102a:pcm5102a{
       #sound-di-cells =<0>;
       兼容="ti、pcm5102a";
       状态="正常";
    };

    Sound1:声音@1{
       兼容="简单音频卡";
       simple-audio-card、name ="PCM5102a";
       simple-audio-card、format ="I2S";
       simple-audio-card、bitclock-master =<&sound1_master>;
       simple-audio-card、frame-master =<&sound1_master>;
       简单音频卡、位时钟反转;
       
       简单音频卡、CPU{
           Sound-Dai =<&McASP1>;
       };

    Sound1_MASTER:简单音频卡、编解码器{
       #sound-di-cells =<0>;
       sound-dai =<&pcm5102a>;
       时钟=<&McASP1_Fck>;
       时钟名称="MCLK";
    };

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

    [引用用户="AJINKYA Prabhu"]

    使用 pcm5102A-EVM-AUDIO 可以实现这一点

    SH-3.2# aplay -l
    ****回放硬件设备列表****
    卡0:PCM5102A [TI PCM5102A],设备0:捕获 pcm5102a-hifi-0[]
    子设备:1/1
    子设备#0
    :子设备#0 sh-3.2# arecord -l
    ****捕获硬件设备列表**
    卡0:PCM5102A
    子设备#0: TI Sub设备#PCM5102a]
    子器件#0
    

    使用 pcm5102A-EVM-AUDIO 可以为播放提供两个时钟

    [/报价]

    谁应该提供 FS 和 BCLK 信号? 是 AM335x 器件吗?

    请提供 arecords 和 aplay 命令的完整控制台日志。 还提供 McASP 引脚多路复用寄存器和 McASP 模块寄存器的寄存器转储。

    对此,
    帕维尔

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

    这是文档中提到的更改之后的器件树:

    //
    *版权所有(C) 2012 Texas Instruments Incorporated - "="">www.ti.com/.../a>
    *
    此程序是免费软件;您可以根据
    
    免费软件基金会*发布的 GNU 通用公共许可证版本2的条款重新分发和/或修改*。
    //
    /dts-v1/;
    
    #include "am33xx.dtsi"
    #include "am335x-bone-common.dtsi"
    
    &ldo3_reg{
    稳压器最小微伏=<1800000>;
    稳压器最大值微伏=<3300000>;
    电脑控制器常开;
    };
    
    &mmc1{
    VMMC-SUPPLY =<&ldo3_reg>;
    };
    
    &am33xx_pinmux{
    McASP1_PINS:McASP1_PINS{
    pinctrl-single、pins =<
    /*接收器必须启用接收器*/
    0x1a0 0x23
    /* P9_42 McASP1_aclkx -位时钟*
    0x1a4 0x23
    /* P9_27 McASP1_FSX -帧同步*
    0x1a8 0x23
    /* P9_41 McASP1_axr0 - I2S 输入*/
    >;
    };
    };
    
    &McASP1{
    #sound-di-cells =<0>;
    pinctrl-names ="default";
    pinctrl-0 =<&McASP1_PINs>;
    状态="正常";
    OP-MODE =<0>;
    TDM-SLOTS =<2>;
    num-serializer =<4>;
    serial-dir =</* 1 TX 2 RX 0未使用*/
    2 0 0 0 0
    >;
    Rx-num-evt =<1>;
    tx-num-evt =<1>;
    };
    
    /{
    pcm5102a:pcm5102a{
    #sound-di-cells =<0>;
    兼容="ti、pcm5102a";
    状态="正常";
    };
    
    Sound1:声音@1{
    兼容="简单音频卡";
    simple-audio-card、name ="PCM5102a";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound1_master>;
    simple-audio-card、frame-master =<&sound1_master>;
    简单音频卡、位时钟反转;
    
    简单音频卡、CPU{
    Sound-Dai =<&McASP1>;
    };
    
    Sound1_MASTER:简单音频卡、编解码器{
    #sound-di-cells =<0>;
    sound-dai =<&pcm5102a>;
    时钟=<&McASP1_Fck>;
    时钟名称="MCLK";
    };
    };
    };
    

    aplay 和 arecord 的控制台日志:

    SH-3.2# aplay aj.wav
    播放波'aj.wav':有符号16位小端字节序、速率48000Hz、立体声
    [36.741784] DaVincia-McASP 4803c000.McASP:流具有比在 McASP 中启用的通道更多的通道(2)
    [36.755080] DaVinciASP 4803c3c000.McASP:ASHW:无法
    设置为13000:params
    :无法安装 params:1361:params: RW_interleaved
    格式:S16_LE
    子格式:STD
    SAMPLE_BITS:16
    FRAME_BITS:32
    个通道
    :2速率:48000
    周期_时间:125000
    周期_大小:6000
    周期_字节:24000
    周期:4
    缓冲区_时间:50000
    缓冲区_大小:24000
    缓冲区_字节:96000
    周期_时间:0 

    SH-3.2# arecord -DHW:0、0 -d 10 -f dat asd.wav 录制波'asd.wav:有符号16位小端序、速率48000 Hz、立体声 arecord:PCM_Read:2096:读取错误:输入/输出错误
    SH-3.2# arecord -l
    ****捕获硬件设备列表****
    卡0:PCM5102a [PCM5102A],设备0:Davinci-McAP.0-pcm5102a-hifi pcm5102a-hiF-0 []
    子设备:1/1
    子设备#0:子设备#0 

    SH-3.2# aplay -l ****回放硬件设备列表**** 卡0:PCM5102a [PCM5102A],设备0:Davinci-McAP.0-pcm5102a-hifi pcm5102a-hiF-0 [] 子设备:1/1 子设备#0:子设备#0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、AM335x 必须为麦克风提供 FS 和 BCLK。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ajinkya、

    您只有一个数据引脚 McASP1_axr0配置为输入。 因此,您只能进行捕获,我不知道为什么还要测试回放!

    由于您需要 AM335x 作为主设备(以驱动 FS 和 BCLK)、因此您需要更改 DTS 文件以反映这一点。


    Sound1:声音@1{
    兼容="简单音频卡";
    simple-audio-card、name ="PCM5102a";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound1_master>;
    simple-audio-card、frame-master =<&sound1_master>;
    简单音频卡、位时钟反转;

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

    简单音频卡、编解码器{
    #sound-di-cells =<0>;
    sound-dai =<&pcm5102a>;
    时钟=<&McASP1_Fck>;
    时钟名称="MCLK";
    };
    };


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

    你好,Pavel,

    1)如何解决输入/输出错误?

    2)您建议进行哪些更改以使 AM335x 成为主设备?

    此致、

    Ajinkya

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

    1) 1)如何解决输入/输出误差?

    当10秒内没有数据从硬件流向 ALSA 时、就会发生 arecord I/O 错误。 发生这种情况的一个可能原因是主器件(在您的情况下为 AM335x 器件)未提供 FSYNC 和 BCLK。 如果没有它们、外部编解码器不会移动 axr0引脚上的任何数据。 我建议您确保 AM335x 能够正确地提供 BCLK/FYSNC。

    另请参见以下文档:

    www.ti.com/.../sprac10.pdf

    6.7音频录制期间出现输入/输出错误

    2)您建议进行哪些更改以使 AM335x 成为主设备?

    Sound1:声音@1{
    兼容="简单音频卡";
    simple-audio-card、name ="PCM5102a";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound1_master>;
    simple-audio-card、frame-master =<&sound1_master>;
    简单音频卡、位时钟反转;

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

    简单音频卡、编解码器{
    #sound-di-cells =<0>;
    sound-dai =<&pcm5102a>;
    时钟=<&McASP1_Fck>;
    时钟名称="MCLK";
    };
    };

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

    你好,Pavel  

    命令时的输出

    arecord -d 10 -DHW:0、0 -f dat audio.wav 

    文件是创建的、但记录的持续时间不是很长、我想、由于-d 10会告诉它记录10秒

    但这会有什么问题呢?

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

    你好,Pavel,

    输入/输出误差似乎消失了、但我在 BCLK 上仍然没有获得正确的时钟、在 LRCLK 上没有时钟

    以及当我尝试执行该操作时

    omapconf show McASP1 

    它为我提供了:

    硬件平台:
    通用 AM33XX (平展器件树)
    AM3358 ES2.1 GP 器件(未知性能 ZCZ 封装(1.0GHz)
    )错误:I2C 读取失败
    错误:I2C 读取失败
    错误:I2C 读取失败错误
    :TPS65217C ES1.2
    错误:I2C 读取失败
    未知音频 IC
    
    

    您能为此建议一个解决方案吗?

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

    [引用用户="AJINKYA Prabhu"]

    命令时的输出

    arecord -d 10 -DHW:0、0 -f dat audio.wav 

    文件是创建的、但记录的持续时间不是很长、我想、由于-d 10会告诉它记录10秒

    但这会有什么问题呢?

    [/报价]

    使用此命令、您可以设置48kHz 帧同步和1.536MHz 位时钟。 您是否观察到这些频率(48kHz FS 和1.536MHz BCLK)?

    请提供 McASP1引脚多路复用值和 McASP1寄存器的寄存器转储。 您可以使用 devmem2工具或 omapconf 工具从用户空间获取这些文件。 有关更多信息、请参阅以下指针:

    3个 McASP 寄存器设置

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

    [引用用户="AJINKYA Prabhu"]

    输入/输出误差似乎消失了、但我在 BCLK 上仍然没有获得正确的时钟、在 LRCLK 上没有时钟

    以及当我尝试执行该操作时

    omapconf show McASP1 

    它为我提供了:

    硬件平台:
    通用 AM33XX (平展器件树)
    AM3358 ES2.1 GP 器件(未知性能 ZCZ 封装(1.0GHz)
    )错误:I2C 读取失败
    错误:I2C 读取失败
    错误:I2C 读取失败错误
    :TPS65217C ES1.2
    错误:I2C 读取失败
    未知音频 IC
    
    

    您能为此建议一个解决方案吗?

    [/报价]

    实际上、我建议您仅在用户空间(devmem2或 omapconf)中转储控制模块 McASP1 Pinmux 寄存器。 而 McASP1模块寄存器应在内核内部使用 printk 进行检查。 有关更多信息、请参阅以下 e2e 线程:

    此致、
    帕维尔

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

    1)这是我运行时得到的结果

    devmem2 0x4803c000
    

    0x4803c000用于 McASP 1

    /dev/mem 已打开。[3042.065890]未处理故障:非线性蚀刻上的外部中止(0
    [3042.074752] PgD = dc54c000
    [3042.077470][b6f38000]*PgD=9a108831、*Pte=4803c303、*ppte=480333bca38000
    
    映射地址处的内存。
    [3042.085144]审核:type=1701审核(1522080492.952:4):auid=4294967295 uid=0 gi7
    总线错误(转储内核)
    

    2)我应该在内核中打印什么?

    3)我应该在 ,CPU 节点内添加一个时钟节点吗?

    am33xx_pinmux{(am33xx_pinmux)}
    McASP1_PINS:McASP1_PINS{
    pinctrl-single、pins =<
    /*接收器必须启用接收器*/
    0x1a0 0x23
    /* P9_42 McASP1_aclkx -位时钟*
    0x1a4 0x23
    /* P9_27 McASP1_FSX -帧同步*
    0x1a8 0x23
    /* P9_41 McASP1_axr0 - I2S 输入*/
    >;
    };
    };
    
    &McASP1{
    #sound-di-cells =<0>;
    pinctrl-names ="default";
    pinctrl-0 =<&McASP1_PINs>;
    状态="正常";
    OP-MODE =<0>;
    TDM-SLOTS =<2>;
    num-serializer =<4>;
    serial-dir =</* 1 TX 2 RX 0未使用*/
    2 0 0 0 0
    >;
    Rx-num-evt =<1>;
    tx-num-evt =<1>;
    };
    
    /{
    pcm5102a:pcm5102a{
    #sound-di-cells =<0>;
    兼容="ti、pcm5102a";
    状态="正常";
    };
    
    Sound1:声音@1{
    兼容="简单音频卡";
    simple-audio-card、name ="PCM5102a";
    simple-audio-card、format ="I2S";
    simple-audio-card、bitclock-master =<&sound1_master>;
    simple-audio-card、frame-master =<&sound1_master>;
    简单音频卡、位时钟反转;
    
    Sound1_MASTER:简单音频卡、CPU{
    Sound-Dai =<&McASP1>;
    };
    
    简单音频卡、编解码器{
    #sound-di-cells =<0>;
    sound-dai =<&pcm5102a>;
    时钟=<&McASP1_Fck>;
    时钟名称="MCLK";
    };
    };
    }; 

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

    运行时

    arecord -d 10 -DHW:0、0 -f dat audio.wav 

    我在 BCLK 引脚和上仅获得24MHz 时钟

    LRCLK 引脚上无 CLK

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

    [引用用户="AJINKYA Prabhu"]

    1)这是我运行时得到的结果

    devmem2 0x4803c000
    

    0x4803c000用于 McASP 1

    /dev/mem 已打开。[3042.065890]未处理故障:非线性蚀刻上的外部中止(0
    [3042.074752] PgD = dc54c000
    [3042.077470][b6f38000]*PgD=9a108831、*Pte=4803c303、*ppte=480333bca38000
    
    映射地址处的内存。
    [3042.085144]审核:type=1701审核(1522080492.952:4):auid=4294967295 uid=0 gi7
    总线错误(转储内核) 

    [/报价]

    这是预期的。 请勿在用户空间中转储 McASP1模块寄存器。

    [引用 user="AJINKYA Prabhu"]2)内核中应该打印什么?

    McASP1模块寄存器、起始地址为0x4803C000

    [引用 user="AJINKYA Prabhu"]3)我是否应该在 CPU 节点内添加时钟节点?

    我在 DTS 提取中看不到 CPU 节点、因此我无法进行注释。

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

    [引用用户="AJINKYA Prabhu"]

    arecord -d 10 -DHW:0、0 -f dat audio.wav 

    我在 BCLK 引脚和上仅获得24MHz 时钟

    LRCLK 引脚上无 CLK

    [/报价]

    在 aRecord 执行之后/执行期间提供 McASP1模块寄存器转储

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

    你好,Pavel,

    我想知道可以从哪里获取 McASP1模块寄存器? 在哪个文件中以及在哪里 应该编辑 printk 语句以获取 McASP1模块寄存器的值?

    此外,

    /sys/kernel/debug

    为空,缺少 pinctrl 目录。

    谢谢

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

    [引用 user="AJINKYA Prabhu"]我想知道从哪里可以获取 McASP1模块寄存器? 在哪个文件中以及我 应该在哪里编辑 printk 语句以获取 McASP1模块寄存器的值?

    在 McASP 驱动程序的 McASP_START_Rx ()函数末尾转储 McASP1寄存器:

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

    有关详细信息、请参阅以下 e2e 线程:

    [引用用户="AJINKYA Prabhu"]

    此外,

    /sys/kernel/debug

    为空,缺少 pinctrl 目录。

    [/报价]

    您不需要/sys/kernel/debug. 只需使用 devmem2读取 McASP1控制模块 Pinmux 寄存器并提供结果。

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

    这里是我用于转储寄存器值的代码

    printk ("0x%x\n"、McASP->base);
       printk ("McASP_START_Rx:DaVinci_MCASP_TXFMCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXFMCTL_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_RXFMCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXFMCTL_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_TXFMT_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXFMT_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_RXFMT_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXFMT_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_ACLKXCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_ACLKXCTL_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_ACLKRCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_ACLKRCTL_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_Pdir_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_Pdir_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_RXMASK_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXMASK_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_TXMASK_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXMASK_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_RXTDM_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXTDM_REG));
       printk ("McASP_START_Rx:DaVinci_MCASP_TXTDM_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXTDM_REG));

    下面是上述代码的输出

    [636.578439] 0xfa03c000
    [636.5808080807] McASP_START_Rx:DaVinci_MCASP_TXFMCTL_REG:0x13
    [636.586399] McASP_START_Rx:DaVinci_MCASP_RXFMCTL_REG:0x113
    [636.592079] McASP_START_Rx:DaVinci_MCASP_TXFMT_REG:0x10074
    [636.59759] McASP_START_Rx:DaVinci_MCASP_RXFMT_REG:0x18070
    [636.603439] McASP_START_Rx:DaVinci_MCASP_ACLKXCTL_REG:0x180060
    [636.609467] McASP_START_Rx:DaVinci_MCASP_ACLKRCTL_REG:0x20
    [636.615147] McASP_START_Rx:DaVinci_MCASP_Pdir_REG:bb4000000
    [636.621001] McASP_START_Rx:DaVinci_MCASP_RXMASK_REG:0xFFFF
    [636.626680] McASP_START_Rx:DaVinci_MCASP_TXMASK_REG:0xFFFF
    [636.632360] McASP_START_Rx:DaVinci_MCASP_RXTDM_REG:0x3
    [636.637691] McASP_START_Rx:DaVinci_MCASP_TXTDM_REG:0x0

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

    运行

    u32 address_1 = phys_TO_virt (0x4803c000);
    printk ("McASP 1 AJINKYA address 0x%x"、address_1); 

    所提供的值

    [143.096451] DaVinci_McASP_TRIGGERMcASP 1 AJINKYA 地址0x8803c000
    

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

    你好,Pavel,

    我打印了这些值

    printk ("0x%x\n"、McASP->base);
    printk ("McASP_START_Rx:DaVinci_MCASP_TXFMCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXFMCTL_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_RXFMCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXFMCTL_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_TXFMT_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXFMT_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_RXFMT_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXFMT_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_ACLKXCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_ACLKXCTL_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_ACLKRCTL_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_ACLKRCTL_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_Pdir_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_Pdir_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_RXMASK_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXMASK_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_TXMASK_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXMASK_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_RXTDM_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_RXTDM_REG));
    printk ("McASP_START_Rx:DaVinci_MCASP_TXTDM_REG:0x%x \n"、McASP_GET_reg (McASP、DaVinci_MCASP_TXTDM_REG));
    
    
    

    转储

    [6.578439] 0xfa03c000
    [636.5808080807] McASP_START_Rx:Davinci_MCBSP_TXFMCTL_REG:0x13
    [636.586399] McASP_START_Rx:DaVinci_MCBSP_RXFMCTR_REG:0x6367_RXCCEST_RXCCADDR_64_START
    
    
    
    
    
    :0x6367_CCADDR_RX64_RXCC_RXCC_RXCC_RXCCTR_RXCC_RXCC_R_RXCC_RX64_RXCC_R_RXCC_RXCC_R_RX64_RXCC_RXCC_RXCC_R_RXCC_RX64_R_RXCC_RXCC_R_RXCC_R_RXCC_R_RXCC_R64_R_R_RXCC_RXCC_RX64_R_RXCC_RXCC_RXCC_RXCC_RXCC_RXCC_R_RX64_R_RXCC_RXCC_R_RXCC_RXCC_R_RX64_R_RXCC_RXCC_RXCC
    
    
    

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

    另请提供以下 McASP 模块寄存器转储:

    DaVinci_MCBSP_GBLCTL_REG
    DaVinci_MCBSP_GBLCTLX_REG
    DaVinci_MCBSP_AHCLKXCTL_REG
    DaVinci_MCBSP_TXSTAT_REG
    达芬奇_MCBSP_XRSRCTL_REG (0)

    另请提供 McASP1 Pinmux 寄存器转储。

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

    [54.475631] McASP_START_Rx
    [54.478353]基地址:0xfa03c000
    [54.481242] DaVinci_MCBSP_TXFMCTL_REG:0x13
    [54.485439] DaVinci_MCBSP_RXFMCTL_REG:0x113
    [54.489723] DaVinci_MCBSP_TXFMT_REG:0x10074
    [54.494006] DaVinci_MCBSP_RXFMT_REG:0x18070
    [54.498289] DaVinci_MCBSP_ACLKXCTL_REG:0x18006f
    [54.502921] DaVinci_MCBSP_ACLKRCTL_REG:0x2F
    [54.507204] DaVinci_MCBSP_Pdir_REG:bbc000000
    [54.511662] DaVinci_MCBSP_RXMASK_REG:0xFFFF
    [54.515946] DaVinci_MCBSP_TXMASK_REG:0xFFFF
    [54.520229] DaVinci_MCBSP_RXTDM_REG:0x3
    [54.524164] DaVinci_MCBSP_TXTDM_REG:0x0
    [54.528099] DaVinci_MCBSP_GBLCTL_REG:0x1f
    [54.532208] DaVinci_MCBSP_GBLCTLX_REG:0x1f
    [54.536404] DaVinci_MCBSP_AHCLKXCTL_REG:0x188000
    [54.541124] DaVinci_MCBSP_TXSTAT_REG:0x10c
    [54.545321] DaVinci_MCBSP_XRSRCTL_REG (0):0x2


    此外、我还应该如何转储 McASP1引脚多路复用寄存器。 我在这里展示了"/sys/kernel/debug/pinctrl/44e10800.pinmux/pins "猫的结果

    ROOT@AM335x-EVM:/sys/kernel/debug/pinctrl/44e10800.pinmux cat 引脚
    寄存引脚:142
    引脚0 (44e10800.0) 00000031 pinctrl-single
    引脚1 (44e10804.0) 00000031 pinctrl-single
    引脚2 (44e10808.0) 00000031 pinctrl-single
    引脚3 (44e1080c.0) 00000031 pinctrl-单路
    引脚4 (44e10810.0) 00000031 pinctrl-single
    引脚5 (44e10814.0) 00000031 pinctrl-single
    引脚6 (44e10818.0) 00000031 pinctrl-single
    引脚7 (44e1081c.0) 00000031 pinctrl-single
    引脚8 (44e10820.0) 00000027 pinctrl-single
    引脚9 (44e10824.0) 00000027 pinctrl-single
    引脚10 (44e10828.0) 00000027 pinctrl-single
    引脚11 (44e1082c.0) 00000027 pinctrl-single
    引脚12 (44e10830.0) 00000027 pinctrl-single
    引脚13 (44e10834.0) 00000027 pinctrl-single
    引脚14 (44e10838.0) 00000027 pinctrl-single
    引脚15 (44e1083c.0) 00000027 pinctrl-单路
    引脚16 (44e10840.0) 00000027 pinctrl-single
    引脚17 (44e10844.0) 00000027 pinctrl-single
    引脚18 (44e10848.0) 00000027 pinctrl-single
    引脚19 (44e1084c.0) 00000027 pinctrl-单路
    引脚20 (44e10850.0) 00000027 pinctrl-single
    引脚21 (44e10854.0) 00000007 pinctrl-single
    引脚22 (44e10858.0) 00000017 pinctrl-single
    引脚23 (44e1085c.0) 00000007 pinctrl-单路
    引脚24 (44e10860.0) 00000017 pinctrl-single
    引脚25 (44e10864.0) 00000027 pinctrl-single
    引脚26 (44e10868.0) 00000027 pinctrl-single
    引脚27 (44e1086c.0) 00000007 pinctrl-单路
    引脚28 (44e10870.0) 00000037 pinctrl-single
    引脚29 (44e10874.0) 00000037 pinctrl-single
    引脚30 (44e10878.0) 00000037 pinctrl-single
    引脚31 (44e1087c.0) 00000037 pinctrl-单路
    引脚32 (44e10880.0) 00000032 pinctrl-single
    引脚33 (44e10884.0) 00000032 pinctrl-single
    引脚34 (44e10888.0) 00000037 pinctrl-single
    引脚35 (44e1088c.0) 00000027 pinctrl-single
    引脚36 (44e10890.0) 00000037 pinctrl-single
    引脚37 (44e10894.0) 00000037 pinctrl-single
    引脚38 (44e10898.0) 00000037 pinctrl-single
    引脚39 (44e1089c.0) 00000037 pinctrl-single
    引脚40 (44e108a0.0) 00000008 pinctrl-single
    引脚41 (44e108a4.0) 00000008 pinctrl-single
    引脚42 (44e108a8.0) 00000008 pinctrl-single
    引脚43 (44e108ac.0) 00000008 pinctrl-single
    引脚44 (44e108b0.0) 00000008 pinctrl-single
    引脚45 (44e108b4.0) 00000008 pinctrl-single
    引脚46 (44e108b8.0) 00000008 pinctrl-single
    引脚47 (44e108bc.0) 00000008 pinctrl-single
    引脚48 (44e108c0.0) 00000008 pinctrl-single
    引脚49 (44e108c4.0) 00000008 pinctrl-single
    引脚50 (44e108c8.0) 00000008 pinctrl-single
    引脚51 (44e108cc.0) 00000008 pinctrl-single
    引脚52 (44e108d0.0) 00000008 pinctrl-single
    引脚53 (44e108d4.0) 00000008 pinctrl-single
    引脚54 (44e108d8.0) 00000008 pinctrl-single
    引脚55 (44e108dC.0) 00000008 pinctrl-single
    引脚56 (44e108e0.0) 00000000 pinctrl-single
    引脚57 (44e108e4.0) 00000000 pinctrl-single
    引脚58 (44e108e8.0) 00000000 pinctrl-single
    引脚59 (44e108ec.0) 00000000 pinctrl-single
    引脚60 (44e108f0.0) 00000030 pinctrl-single
    引脚61 (44e108f4.0) 00000030 pinctrl-single
    引脚62 (44e108f8.0) 00000030 pinctrl-single
    引脚63 (44e108fc.0) 00000030 pinctrl 单路
    引脚64 (44e10900.0) 00000030 pinctrl 单路
    引脚65 (44e10904.0) 00000030 pinctrl-single
    引脚66 (44e10908.0) 00000028 pinctrl-single
    引脚67 (44e1090c.0) 00000028 pinctrl-single
    引脚68 (44e10910.0) 00000030 pinctrl-single
    引脚69 (44e10914.0) 00000000 pinctrl 单路
    引脚70 (44e10918.0) 00000030 pinctrl-single
    引脚71 (44e1091c.0) 00000000 pinctrl 单路
    引脚72 (44e10920.0) 00000000 pinctrl-single
    引脚73 (44e10924.0) 00000000 pinctrl-single
    引脚74 (44e10928.0) 00000000 pinctrl-single
    引脚75 (44e1092c.0) 00000030 pinctrl-single
    引脚76 (44e10930.0) 00000030 pinctrl-single
    引脚77 (44e10934.0) 00000030 pinctrl-single
    引脚78 (44e10938.0) 00000030 pinctrl-single
    引脚79 (44e1093c.0) 00000030 pinctrl-single
    引脚80 (44e10940.0) 00000030 pinctrl-single
    引脚81 (44e10944.0) 00000027 pinctrl-single
    引脚82 (44e10948.0) 00000030 pinctrl-single
    引脚83 (44e1094c.0) 00000010 pinctrl-单路
    引脚84 (44e10950.0) 00000037 pinctrl-single
    引脚85 (44e10954.0) 00000037 pinctrl-single
    引脚86 (44e10958.0) 00000037 pinctrl-single
    引脚87 (44e1095c.0) 00000037 pinctrl-single
    引脚88 (44e10960.0) 0000002f pinctrl-single
    引脚89 (44e10964.0) 00000027 pinctrl-single
    引脚90 (44e10968.0) 00000037 pinctrl-single
    引脚91 (44e1096c.0) 00000037 pinctrl-单路
    引脚92 (44e10970.0) 00000030 pinctrl-single
    引脚93 (44e10974.0) 00000000 pinctrl-single
    引脚94 (44e10978.0) 00000033 pinctrl-single
    引脚95 (44e1097c.0) 00000033 pinctrl-single
    引脚96 (44e10980.0) 00000037 pinctrl-single
    引脚97 (44e10984.0) 00000037 pinctrl-single
    引脚98 (44e10988.0) 00000030 pinctrl-single
    引脚99 (44e1098c.0) 00000030 pinctrl-single
    引脚100 (44e10990.0) 00000000 pinctrl-single
    引脚101 (44e10994.0) 00000010 pinctrl-single
    引脚102 (44e10998.0) 00000027 pinctrl-single
    引脚103 (44e1099c.0) 00000002 pinctrl-单路

    *引脚104 (44e109a0.0) 00000003 pinctrl 单路
    引脚105 (44e109a4.0) 00000003 pinctrl 单路
    引脚106 (44e109a8.0) 00000023 pinctrl-single *

    引脚107 (44e109ac.0) 00000030 pinctrl 单路
    引脚108 (44e109b0.0) 00000003 pinctrl 单路
    引脚109 (44e109b4.0) 00000027 pinctrl-single
    引脚110 (44e109b8.0) 00000030 pinctrl 单路
    引脚111 (44e109bc.0) 00000028 pinctrl-single
    引脚112 (44e109c0.0) 00000030 pinctrl-single
    引脚113 (44e109c4.0) 00000028 pinctrl-single
    引脚114 (44e109c8.0) 00000028 pinctrl-single
    引脚115 (44e109cc.0) 00000028 pinctrl-single
    引脚116 (44e109d0.0) 00000030 pinctrl 单路
    引脚117 (44e109d4.0) 00000030 pinctrl-single
    引脚118 (44e109d8.0) 00000030 pinctrl-single
    引脚119 (44e109dc.0) 00000030 pinctrl 单路
    引脚120 (44e109e0.0) 00000020 pinctrl-single
    引脚121 (44e109e4.0) 00000030 pinctrl-single
    引脚122 (44e109e8.0) 00000030 pinctrl-single
    引脚123 (44e109ec.0) 00000028 pinctrl-single
    引脚124 (44e109f0.0) 00000028 pinctrl-single
    引脚125 (44e109f4.0) 00000028 pinctrl-single
    引脚126 (44e109f8.0) 00000030 pinctrl-single
    引脚127 (44e109fc.0) 00000028 pinctrl 单路
    引脚128 (44e10a00.0) 00000028 pinctrl 单路
    引脚129 (44e10a04.0) 00000020 pinctrl-single
    引脚130 (44e10a08.0) 00000028 pinctrl-single
    引脚131 (44e10a0c.0) 00000028 pinctrl-single
    引脚132 (44e10a10.0) 00000028 pinctrl-single
    引脚133 (44e10a14.0) 00000028 pinctrl-single
    引脚134 (44e10a18.0) 00000028 pinctrl-single
    引脚135 (44e10a1c.0) 00000020 pinctrl 单路
    引脚136 (44e10a20.0) 00000028 pinctrl-single
    引脚137 (44e10a24.0) 00000028 pinctrl-single
    引脚138 (44e10a28.0) 00000028 pinctrl-single
    引脚139 (44e10a2c.0) 00000028 pinctrl 单路
    引脚140 (44e10a30.0) 00000028 pinctrl-single
    引脚141 (44e10a34.0) 00000020 pinctrl-single


    这是我在器件树中定义的 McASP1 pinctrl 值

    am33xx_pinmux{(am33xx_pinmux)}
    McASP1_PINS:McASP1_PINS{
    pinctrl-single、pins =<
    /*接收器必须启用接收器*/
    AM33XX_IOPAD (0x9a0、PIN_OUTPUT 下拉| MUX_MODE3)/* P9_42 McASP1_aclkx -位时钟*
    AM33XX_IOPAD (0x9a4、PIN_OUTPUT 下拉| MUX_MODE3)/* P9_27 McASP1_FSX -帧同步*
    AM33XX_IOPAD (0x9a8、PIN_INPUT_PULLDOWN | MUX_MODE3)/* P9_41 McASP1_axr0 - I2S 输入*
    >;
    };
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    您能否帮助我了解此设置的作用?

    ENABLE-GPIO =<&GPIO1 27 0>;//在 GPIO1_27上启用 BeagleBone Black Clk *

    我们为什么需要在时钟上执行此操作? 我们为什么选择 GPIO1_27? 为什么没有其他 GPIO 引脚? 该引脚有何特别之处、以至于当按上述方式进行设置时、它会启用时钟?

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

    [引用 USER="Parag Sharma]*引脚104 (44e109a0.0)00000003 pinctrl-single
    引脚105 (44e109a4.0) 00000003 pinctrl 单路
    引脚106 (44e109a8.0) 00000023 pinctrl-single *
    [/报价]

    [引用 user="Parag Sharma"]&am33xx_pinmux{
    McASP1_PINS:McASP1_PINS{
    pinctrl-single、pins =<
    /*接收器必须启用接收器*/
    AM33XX_IOPAD (0x9a0、PIN_OUTPUT 下拉| MUX_MODE3)/* P9_42 McASP1_aclkx -位时钟*
    AM33XX_IOPAD (0x9a4、PIN_OUTPUT 下拉| MUX_MODE3)/* P9_27 McASP1_FSX -帧同步*
    AM33XX_IOPAD (0x9a8、PIN_INPUT_PULLDOWN | MUX_MODE3)/* P9_41 McASP1_axr0 - I2S 输入*
    >;[/报价]

    请将引脚 McASP1_aclkx 和 McASP1_FSX 从输出更改为输入/输出、因为我们有重定时要求。 如需更多信息、请查看 AM335x TRM、第22.2.3节 McASP 引脚列表

    [引用用户="Parag Sharma"[54.532208] DaVinci_MCASP_GBLCTLX_REG:0x1f [/引用]

    这看起来不好。 您能否检查您的流程是否通过设置 McASP_START_Rx()函数中的 TX 信号?

    静态空 McASP_START_Rx (结构 DaVinci_McASP * McASP)

    /*开始时钟*/
       McASP_SET_ctl_reg (McASP、DaVinci_MCASP_GBLCTLR_REG、RXHCLKRST);
       McASP_SET_ctl_reg (McASP、DaVinci_MCASP_GBLCTLR_REG、RXCLKRST);
       /*
       *当 Async =0时、发送和接收部分运行
       *与发送时钟和帧同步同步。 我们需要制造的
       *确保在开始接收时已启用 TX 信号。
       *
       if (McASP_IS 同步(McASP)){

           printk ("启用 TX 信号\n");
          McASP_SET_ctl_reg (McASP、DaVinci_MCASP_GBLCTLX_REG、TXHCLKRST);
          McASP_SET_ctl_reg (McASP、DaVinci_MCASP_GBLCTLX_REG、TXCLKRST);
       }

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

    GPIO1_27 (HDMICLK_DISn)信号用于启用/禁用外部24.576MHz 振荡器、该振荡器为 McASP0_ahclkx 信号(引脚 GPIO3_21)提供(启用时) 24.576MHz 时钟信号

    有关更多信息、请查看 BBB 用户指南:

    github.com/.../System-Reference-Manual

    GPIO3_21上有一个24.576MHz 的时钟

    HDMI 成帧器需要使用此功能来实现音频目的。 我们需要在处理器中运行时钟、以生成正确的时钟频率。 要将该引脚用作 GPIO 引脚、您需要禁用时钟。 虽然这会禁用 HDMI 的音频、但您希望将此引脚用于其他用途、这一事实也是如此。

    6.10.6音频接口

    处理器和 TDA19988之间有一个 I2S 音频接口。 立体声音频可通过 HDMI 接口传输到配备音频的显示屏。 为了创建所需的时钟频率、使用了外部24.576MHz 振荡器 Y4。 通过这个时钟、处理器为 TDA19988生成所需的时钟频率。
    为了创建正确的时钟频率、我们必须添加一个外部24.576MHZ 振荡器。 遗憾的是、这必须使用之前用于 GPIO3_21的引脚输入到处理器中。 为了保持 GPIO3_21功能、如果需要使用扩展头上的引脚、我们提供了一种禁用振荡器的方法。

    GPIO3_21也是处理器的24.576MHZ 时钟输入、用于启用 HDMI 音频。 为了使用这个引脚、振荡器必须被禁用。


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

    您好、Pavel、

    该流程不在"McASP_IS 同步"函数内。 当我使程序强制进入函数中时(通过将一个! 在"IF"条件下)、时钟开始正确显示。

    这里有什么问题? 我缺少什么?

    此外、帧同步时钟(P9_27 McASP1_FSX)未显示? 这里有什么问题吗?

    Parag

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

    我在 McASP_Is_synchronous 函数中添加了一些日志

    静态 bool McASP_IS 同步(结构 DaVinci_McASP * McASP)

       u32 rxfmctl = McASP_GET_reg (McASP、DaVinci_MCASP_RXFMCTL_REG);
       printk ("Davinci_MCBSP_RXFMCTL_REG:0x%x\n"、rxfmctl);
       u32 aclkxctl = McASP_GET_reg (McASP、DaVinci_MCASP_ACLKXCTL_REG);
       printk ("Davinci_MCBSP_ACLKXCTL_REG:0x%x\n"、aclkxctl);
       printk ("TX_异 步0x%x\n"、TX_异 步);
       printk ("aclkxctl & TX_异 步0x%x\n"、aclkxctl & TX_异 步);
       printk ("AFSRE 0x%x\n"、AFE");
       printk ("输出:0x%x\n"、!(aclkxctl 和 TX_异 步)&& rxfmctl 和 AFESR);

       return!(aclkxctl & TX_异 步)&& rxfmctl & AFE;

    日志显示为

    [103.785057] DaVinci_MCBSP_RXFMCTL_REG:0x113
    [103.789342] DaVinci_MCBSP_ACLKXCTL_REG:0x18006f
    [103.793975] TX_异 步0x40
    [103.796601] aclkxctl & TX_异 步0x40
    [103.800187] AFE0x2
    [103.802463] 输出:0x0

    问题出在哪里? 为什么该函数返回0而不是1?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pavel、
    感谢您帮助了解设置 GPIO1_27的必要性。 这确实有助于澄清我的很多概念。

    您会注意到、寄存器 Davinci_MCASP_ACLKXCTL_REG 的值为0x18006f。 这里的异步(第6个)位有一个值1、当它应该为0时、使函数 McASP_IS 同步返回1。 使该寄存器具有该值的器件树是否有问题?

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

    Parag、

    DTS 文件似乎是正确的、您在这里有"op-mode =<0>;"。 0表示 I2S 模式(ASYNC=0)、1表示 DIT/SPDIF 模式(ASYNC=1)。 您需要调试 Davinci-McASP/c 文件以查看是否以及为何选择 DIR/SPDIF 模式(而不是 I2S)。

    McASP1{

    OP-MODE =<0>;




    静态结构 DaVinci_McASP_pdata * DaVinci_McASP_Set_pdata_fin_of (结构平台设备*开发)


    RET = of _property_read_u32 (np、"op-mode"、&val);
    如果(RET >= 0)
    pdata -> op_mode = val;

    静态 int Davinci_McASP_HW_params (struct snd_PCM_Substream *子流、struct snd_PCM_HW_params * params、struct snd_soc_dai * cpu_dai)

    IF (McASP->op_mode =Davinci_MCASP_DIT_MODE)
          RET = McASP_DIT_HW_param (McASP、params_rate (params));
       其他
          RET = McASP_I2S_HW_param (McASP、子流->流、通道);



    静态 int McASP_I2S_HW_param (struct Davinci_McASP * McASP、int 流、int 通道)

    McASP_CLR_BITS (McASP、DaVinci_MCASP_ACLKXCTL_REG、TX_异 步);//异 步= 0



    /* S/PDIF */
    静态 int mcasp_dit_hw_param (struct davinci_mcasp * mcasp、unsigned int rate)


    /*设置 TX 时钟控件:div = 1,内部*/
    McASP_SET_BITS (McASP、DaVinci_MCASP_ACLKXCTL_REG、ACLKXE | TX_异 步);//异 步= 1

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这很奇怪。 我正在使用的 Linux 内核(github.com/.../davinci-mcasp.c)的4.4分支

    静态 int McASP_I2S_HW_param (struct Davinci_McASP * McASP、int 流、int 通道)

    McASP_SET_BITS (McASP、DaVinci_MCASP_ACLKXCTL_REG、TX_异 步);


    这显然是错误地设置该位。 为什么这会将该位设置为 TX_异 步?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Parag、

    我无法评论您使用的未知未定义内核分支。

    我可以说、AM335x TI PSDK v3.03随附的内核4.4.41 (链接如下)正在将 I2S 的位异步清零。

    静态 int McASP_I2S_HW_param (struct Davinci_McASP * McASP、int 流、int 通道)

    McASP_CLR_BIits (McASP、DaVinci_MCASP_ACLKXCTL_REG、TX_异 步);


    software-dl.ti.com/.../index_FDS.html

    另请参阅:

    processors.wiki.ti.com/index.php

    构建信息

    内核 git 存储库、分支和提交 ID 可在下面找到:
    基于版本:4.4.41
    网址:Git://git.ti.com/processor-sdk/processor-sdk-linux.git
    分支:PROCESSOR-SDK-LINUX-03.03.00
    提交 ID:f9f6f0db2d5e4f9d2ff46eb31a5a05276a92ed7d


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

    您好、Pavel、

    感谢你的帮助。

    我最后尝试了 TI SDK 附带的 Linux 内核以及 TI SDK 本身提供的 RFS、大多数事情(包括位时钟、数据输出等)似乎在第一个实例中正常工作。

    但是 、我在 P9_27 (McASP1_FSX)的帧同步上仍然看不到正确的信号。 我只能看到、该引脚上的信号在开始录制时从高电平变为低电平、但不会改变。 无波。 假设我使用的是单个通道(arecord 命令中的通道数默认为1)、是否符合预期。

    甚至当我尝试使用进行记录时

    arecord -f dat -DHW:1、0 -c 2 /tmp/audio.wav

    我仍然在 P9_27上看不到适当的高电平低电平信号。 保持平坦。

    此外、录制的文件还包含一些数据、但记录的内容是什么。 它完全无声。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是打开了该文件,以查看录制文件中的数据全为零:(
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚才意识到我配置了错误的串行器。 我用进行了更正

    serial-dir =</* 1 TX 2 RX 0未使用*/
    2 0 0 0 0
    >;
    我的数据引脚配置为 P9_41 (McASP1_axr0)

    录制的文件现在具有一些收缩的恒定声音(看起来像垃圾)、而不是我录制的声音。

    是否有线索?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是指向已创建文件的链接。

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

    Parag、

    根据我的理解、McASP1_aclkx 引脚上具有正确和预期的时钟信号。 但您在 McASP1_FSX 引脚上看不到正确和预期的信号。

    请将此 McASP1_FSX 引脚从输出更改为输入/输出。 我们有重定时要求。 如需更多信息、请查看 AM335x TRM、第22.2.3节 McASP 引脚列表

    您可能会观察到不需要的 FSX 信号、因为它还取决于从 McASP1_axr0引脚接收到的数据。 请参阅时序图:
    AM335x 数据表:图7-86。 McASP 输入时序
    AM335x TRM:22.3.3.1.2内部集成音频(I2S)格式

    "我看到的是、该引脚上的信号在开始录制时从高电平变为低电平、但不会改变。 无波。"
    如果在 McASP1_axr0上没有接收到正确的音频数据位、则该 FSX 信号将保持低电平。 您需要接收所有音频数据位直到 LSB。

    您的麦克风是否仅需要这两个时钟信号(位时钟和帧同步)? 由于音频编解码器还需要一个 MCLK、而 MCLK 可由 AHCLKX 引脚提供。

    此致、
    帕维尔

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

    Pavel、

    使 framesync 引脚输入/输出意味着什么?

    当前配置是

    AM33XX_IOPAD (0x9a4、 PIN_OUTPUT 下拉| MUX_MODE3)/* P9_27 McASP1_FSX -帧同步*

    如果将其修改为

    AM33XX_IOPAD (0x9a4、 PIN_INPUT_PULLUGD | PIN_OUTPUT_PULLUGD | MUX_MODE3)

    我还意识到我也得到了正确的电炸锅。 我在示波器上没有看到下面的写入频率:(。 我得到的 framesync freq 为46kz (对于单声道声音、即 c = 1)

    使用以下命令:arecord -fdat -DHW:1、0 -c 1 -d 100 /tmp/audio.wav

    通道数= 2时、频率在46khz 时仍然保持不变。 我认为这是不对的。 c = 1时的频率不应为48kz、c = 2时的频率不应为96kHz?

    然而,记录的内容似乎全部是垃圾:(

    另一个有趣的现象是、即使没有进行记录、数据引脚上记录的信号也是方波。 当我开始使用 arecord 进行录制时、信号会显示信号中的一些微小变化、但它们似乎与周围实际发出的声音不符。

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

    选择
    LRCL
    DOUT
    BCLK
    GND
    3V

    我已连接除 SEL 以外的所有引脚。 不确定是否需要。
    当我将 SEL 连接到 McASP0_ahclkx (P9_25)时、我看不到任何差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我使用的麦克风
    www.adafruit.com/.../3421
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Parag Sharma"]使 framesync 引脚输入/输出意味着什么?

    这些信号(aclkx、FSX)也用作重定时或同步数据的输入。 关联的 CONF_ _ _RXACTIVE 对于这些信号、必须设置为1以使能返回模块的输入。 还建议在每个信号上串联一个33欧姆电阻(靠近处理器)、以避免信号反射。

    [引用用户="Parag Sharma"]

    当前配置是

    AM33XX_IOPAD (0x9a4、 PIN_OUTPUT 下拉| MUX_MODE3)/* P9_27 McASP1_FSX -帧同步*

    如果将其修改为

    AM33XX_IOPAD (0x9a4、 PIN_INPUT_PULLUGD | PIN_OUTPUT_PULLUGD | MUX_MODE3)

    [/报价]

    AM33XX_IOPAD (0x9a4、 PIN_INPUT 下拉| MUX_MODE3)

    然后检查 RXACTIVE 位是否设置为1。 请参阅 AM335x TRM 第9.2.2节"焊盘控制寄存器"

    [引用 user="Parag Sharma"]此外,我刚刚意识到我也获得了正确的框架锁。

    如果您从 AM335x McASP 获得了正确的位时钟和帧同步输出、那么您应该重点关注外部麦克风的配置、似乎此麦克风不能正常工作、因此不能在 AXR 引脚上提供正确的音频数据。 您应该与外部麦克风文档和支持团队合作。

    您还可以将 AM335x McASP AXR 配置为输出、以用于测试目的。 您可以使用示波器探测音频数据线和时钟、以查看 AM335x McASP 驱动程序是否正常工作。 然后由外部麦克风提供正确的音频数据。

    此致、
    帕维尔

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

    您好、Pavel、

    我已根据您的建议将 framesync 和位时钟的像素多路复用器设置更改为输入/输出。

    获得正确的位时钟(1.5MHz)和帧同步时钟(46.9KHz)、但记录的文件仍然是以前的垃圾。

    然而、一个有趣的观察结果是、即使没有进行记录、我也能看到频率为32KHz 的完美方波。 示波器为什么应该显示此信号? 不录制或播放时、这是否都是低电平?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、麦克风还可以使用 Raspberry PI 记录声音。 麦克风看上去一切正常。