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.

[参考译文] CC2652R7:通过I2S线路将外部PDM与PCM转换器连接至CC2652R7

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1094672/cc2652r7-interfacing-external-pdm-to-pcm-converter-to-cc2652r7-via-i2s-line

部件号:CC2652R7
主题中讨论的其他部件:Tida-0.1236万

您好,

我们正在尝试使用MEMS PDM麦克风和外部PDM到PCM转换器(ADAU7118)检测超声波信号。  PCM音频数据通过I2S 或时间域中的串行音频接口端口输出
多路复用(TDM)格式。 我们还需要处理在MCU I2S线路上接收的数据并以无线方式传输。  

是否有任何参考代码可以从我们的应用程序开始?

转换器支持4 kHz至192 kHz的不同采样频率,可通过LR时钟进行设置。 如何改变MCU的采样频率?

此致

Pratik

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

    您好,Pratik,

    您可以从 i2secho 示例开始,并进一步参考I2S.h TI驱动程序运行时API。  支持的采样频率为8kHz,16kHz,32kHz和44.1kHz。

    此致,
    Ryan

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

    您好,Ryan:

    感谢您的回复。

    在我们的应用中,我们需要检测22kHz至80Khz的超声波信号。 对于此采样频率,需要为190Khz,但您提到的I2S驱动程序支持最大44.1kHz。 我们能否将现有I2S驱动器中的采样频率更改为190Khz并验证超声波信号?

    我们找到 了使用CC1301 MCU的TIDA-0.1236万参考设计。 在I2S.c文件中,我们看到了下面的注释

    * I2S时钟配置为接近192kHz采样率
    *无需使用编解码器的内部PLL (以节省电源)即可。
    *时钟设置如下:
    *
    *-系统时钟= 48 MHz
    *- I2S主时钟(MCLK)= 24 MHz
    *- I2S采样频率(WCLK)= 187.5 kHz
    *- I2S位时钟= WCLK * 16 = 6 MHz

    我们是否可以为应用程序使用相同的I2S驱动程序?

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

    I2S驱动程序在CC13XX /CC26XX设备之间共享,您可以设置I2S_Params MCLKDivider,PhaseType和SD[0/1]通道。  因此,在使用 参考设计的编解码器资源时,您应该能够获得与参考设计相同的效果。

    此致,
    Ryan

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

    您好,Ryan:

    我们尝试修改I2S echo simplelink_cc13x2_26x2_SDK_5_20_00_52 SDK示例代码,以获得高于44.1kHz的采样频率。 我们在应用中设置了以下参数以实现75Khz采样频率。

    i2sParams.samplingFrequency = 7.5万;
    i2sParams.bitsPerWord =16;
    i2sParams.fixedBufferLength =256;
    i2sParams.writeCallback = writeCallbackFxn;
    i2sParams.readCallback = readCallbackFxn;
    i2sParams.errorCallback = errCallbackFxn;

    REST保留为I2S.h文件中提到的默认参数

    * params.memorySlotLength = I2S_memory_length_16bits;
    * params.moduleRole = I2S_master;
    * params.trueI2sFormat =(布尔) TRUE;
    * params.invertWS =(布尔) TRUE;
    * params.isMSBFirst =(布尔) TRUE;
    * params.isDMA未使用=(布尔) FALSE;
    * params.samplingEdge = I2S_sampling_Edge_Rising;
    * params.beforeWordPadding = 0;
    * params.AfterWordAdding = 0;
    * params.fixedBufferLength = 1;
    * params.SD0Use = I2S_SD0_output;
    * params.SD1Use = I2S_SD1_input;
    * params.SD0Channels = I2S_Channels_Stereo;
    * params.SD1Channels = I2S_Channels_Stereo;
    * params.phaseType = I2S_phone_type_dual;
    * params.startUpDelay = 0;
    * params.MCLKDivider = 40;

    通过上述参数和 PRCM (TI.com) 计算,我们将WS CLK视为75Khz

    WS CLK = MCUCLK / BDIV *(2个WDIV)

            = 48Mhz / 20 *(2 * 16)

            = 7.5万 Hz

    在使用上述配置刷新代码后,我们尝试探测WS针脚以验证75Khz采样频率,但在WS针脚上看不到任何信号。

    我们是否缺少任何其他要在代码中完成的设置?

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

    请验证系统是否使用较慢的时钟(如32 kHz)工作,以便确认WS针信号在已知设置下是否正确。 您初始化的SCK时钟为7.5万*2*16= 2.4 MHz,略低于驱动程序可实现的最大4MHz。  您可以将断点放在errCallbackFxn中,以确定是否出现任何错误,还可以验证是否触发了读和写回调。  这样,您就可以确定驱动程序是否工作,但输出什么都不工作,或者基本上不能按预期工作。

    此致,
    Ryan