0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i.MX RT600 BCLK受干擾影響WS頻率解決方案

恩智浦MCU加油站 ? 來源:周晶晶 ? 作者:周晶晶 ? 2023-09-14 08:55 ? 次閱讀
問題描述最近遇到客戶發(fā)現(xiàn)一個(gè)很有意思的問題,客戶使用i.MX RT600 I2S產(chǎn)生2通道的I2S波形,配置希望輸出I2S波形:

48Khz 采樣率,32bit, 2通道, BCLK輸出3.072Mhz。

測(cè)試發(fā)現(xiàn)現(xiàn)象很奇怪,如果BCLK連接的模塊阻抗改變,會(huì)導(dǎo)致正常應(yīng)該輸出48K的LRCK(WS)頻率會(huì)變動(dòng),有時(shí)候變成96Khz,客戶的模塊是專用的ASIC。

wKgZomUCWxKAT6ItAACRwTXfyro267.png

客戶反應(yīng),這個(gè)問題同樣可以在NXP MIMXRT685-AUD-EVK板子上復(fù)現(xiàn),因?yàn)锳UD-EVK FC2P0_14連接到了外部LED驅(qū)動(dòng)電路

wKgZomUCWxOAXoQaAAEwu61d490265.png

如果是官方的代碼配置,不會(huì)復(fù)現(xiàn)問題,如果是使用客戶的代碼,能夠復(fù)現(xiàn)問題。

wKgZomUCWxOADW4VAAEcfwe6omk844.png

如果斷開R397 1_2的電阻,問題就不會(huì)復(fù)現(xiàn),連接之后就會(huì)復(fù)現(xiàn)。

所謂復(fù)現(xiàn):測(cè)試P0_15 LRCK采樣率從期望的48Khz變成了96Khz:

wKgZomUCWxSAKooWAAa8UOVqu8E212.png

所謂不復(fù)現(xiàn):測(cè)試P0_15 LRCK采樣率就是期望的48Khz:

wKgZomUCWxSAde7kAAb5PrW4iEM566.png

從I2S的構(gòu)架上講,不應(yīng)該出現(xiàn)具體I2S IP的配置因?yàn)橥獠康尿?qū)動(dòng)情況導(dǎo)致不同的輸出頻率,而且官方的代碼直接修改接口和引腳也不會(huì)出現(xiàn),那么問題究竟出在哪里呢?

問題分析與解決方案經(jīng)過查看官方SDK的配置和客戶提供的代碼,發(fā)現(xiàn)差別很簡(jiǎn)單,在于pinmux.c對(duì)于P0_14, P0_15的配置,客戶復(fù)現(xiàn)問題的配置如下:
const uint32_t port0_pin14_config = (/* Pin is configured as FC2_SCK */
                                          IOPCTL_PIO_FUNC1 |
                                          /* Disable pull-up / pull-down function */
                                          IOPCTL_PIO_PUPD_DI |
                                          /* Enable pull-down function */
                                          IOPCTL_PIO_PULLDOWN_EN |
                                          /* Enables input buffer function */
                                          IOPCTL_PIO_INBUF_EN |
                                          /* Normal mode */
                                          IOPCTL_PIO_SLEW_RATE_NORMAL |
                                          /* Normal drive */
                                         IOPCTL_PIO_FULLDRIVE_DI |
                                          /* Analog mux is disabled */
                                          IOPCTL_PIO_ANAMUX_DI |
                                          /* Pseudo Output Drain is disabled */
                                          IOPCTL_PIO_PSEDRAIN_DI |
                                          /* Input function is not inverted */
                                          IOPCTL_PIO_INV_DI);
     /* PORT0 PIN14 (coords: A3) is configured as FC2_SCK */
     IOPCTL_PinMuxSet(IOPCTL, 0U, 14U, port0_pin14_config);


     const uint32_t port0_pin15_config = (/* Pin is configured as FC2_TXD_SCL_MISO_WS */
                                          IOPCTL_PIO_FUNC1 |
                                          /* Disable pull-up / pull-down function */
                                          IOPCTL_PIO_PUPD_DI |
                                          /* Enable pull-down function */
                                          IOPCTL_PIO_PULLDOWN_EN |
                                          /* Enables input buffer function */
                                          IOPCTL_PIO_INBUF_EN |
                                          /* Normal mode */
                                          IOPCTL_PIO_SLEW_RATE_NORMAL |
                                          /* Normal drive */
                                          IOPCTL_PIO_FULLDRIVE_DI |
                                          /* Analog mux is disabled */
                                          IOPCTL_PIO_ANAMUX_DI |
                                          /* Pseudo Output Drain is disabled */
                                          IOPCTL_PIO_PSEDRAIN_DI |
                                          /* Input function is not inverted */
                                          IOPCTL_PIO_INV_DI);
     /* PORT0 PIN15 (coords: A5) is configured as FC2_TXD_SCL_MISO_WS */
     IOPCTL_PinMuxSet(IOPCTL, 0U, 15U, port0_pin15_config);

官方不復(fù)現(xiàn)問題的配置如下:

const uint32_t port0_pin14_config = (/* Pin is configured as FC2_SCK */
                                          IOPCTL_PIO_FUNC1 |
                                          /* Disable pull-up / pull-down function */
                                          IOPCTL_PIO_PUPD_DI |
                                          /* Enable pull-down function */
                                          IOPCTL_PIO_PULLDOWN_EN |
                                          /* Enables input buffer function */
                                          IOPCTL_PIO_INBUF_EN |
                                          /* Normal mode */
                                          IOPCTL_PIO_SLEW_RATE_NORMAL |
                                          /* Normal drive */
                IOPCTL_PIO_FULLDRIVE_EN  |
                                          /* Analog mux is disabled */
                                          IOPCTL_PIO_ANAMUX_DI |
                                          /* Pseudo Output Drain is disabled */
                                          IOPCTL_PIO_PSEDRAIN_DI |
                                          /* Input function is not inverted */
                                          IOPCTL_PIO_INV_DI);
     /* PORT0 PIN14 (coords: A3) is configured as FC2_SCK */
     IOPCTL_PinMuxSet(IOPCTL, 0U, 14U, port0_pin14_config);


     const uint32_t port0_pin15_config = (/* Pin is configured as FC2_TXD_SCL_MISO_WS */
                                          IOPCTL_PIO_FUNC1 |
                                          /* Disable pull-up / pull-down function */
                                          IOPCTL_PIO_PUPD_DI |
                                          /* Enable pull-down function */
                                          IOPCTL_PIO_PULLDOWN_EN |
                                          /* Enables input buffer function */
                                          IOPCTL_PIO_INBUF_EN |
                                          /* Normal mode */
                                          IOPCTL_PIO_SLEW_RATE_NORMAL |
                                          /* Normal drive */
                IOPCTL_PIO_FULLDRIVE_EN  |
                                          /* Analog mux is disabled */
                                          IOPCTL_PIO_ANAMUX_DI |
                                          /* Pseudo Output Drain is disabled */
                                          IOPCTL_PIO_PSEDRAIN_DI |
                                          /* Input function is not inverted */
                                          IOPCTL_PIO_INV_DI);
     /* PORT0 PIN15 (coords: A5) is configured as FC2_TXD_SCL_MISO_WS */
     IOPCTL_PinMuxSet(IOPCTL, 0U, 15U, port0_pin15_config);

實(shí)際上,只要BCLK P0_14的引腳配置為FULL drive即可。

wKgZomUCWxWAL0VtAACgGdH0OzA255.png

可以看到,如果配置為Full output driver,驅(qū)動(dòng)能力是normal輸出的兩倍。所以,問題出在BCLK的引腳驅(qū)動(dòng)能力這塊。

然而,推薦客戶改變驅(qū)動(dòng)能力的方式,縱然可以輸出正確的48Khz采樣率波形,客戶并不接受,認(rèn)為高驅(qū)動(dòng)能力也代表著功耗的加大,而他們的產(chǎn)品是對(duì)功耗要求極高的,必須要在普通驅(qū)動(dòng)能力下解決問題。所以進(jìn)一步分析波形,通過使用高采樣率的示波器20Gsa/s,2G探頭抓取出問題時(shí)候的BCLK,可以發(fā)現(xiàn)有一些毛刺:

wKgZomUCWxWAKCmCAAF1yvlhwKQ128.png

過內(nèi)部的溝通,也認(rèn)為這個(gè)BCLK毛刺是導(dǎo)致問題的原因。這里需要注意的是,有些示波器,如果采樣率低可能抓不到這個(gè)毛刺,還有些探頭,阻抗比較小,導(dǎo)致探頭加上到BCLK,直接問題消失的情況,所以建議使用高阻抗探頭,比如1M歐,1G采樣率以上的探頭即可抓到。

由于客戶不接受驅(qū)動(dòng)能力的改變,所以這里還可以考慮改變斜率,讓上升下降變緩,濾掉毛刺區(qū)域,改變配置如下:

#define IOPCTL_PIO_SLEW_RATE_SLEW 0X80 
  const uint32_t port0_pin14_config = (/* Pin is configured as FC2_SCK */
                                           IOPCTL_PIO_FUNC1 |
                                           /* Disable pull-up / pull-down function */
                                           IOPCTL_PIO_PUPD_DI |
                                           /* Enable pull-down function */
                                           IOPCTL_PIO_PULLDOWN_EN |
                                           /* Enables input buffer function */
                                           IOPCTL_PIO_INBUF_EN |
                                           /* Normal mode */
                IOPCTL_PIO_SLEW_RATE_SLEW|//0X80|// IOPCTL_PIO_SLEW_RATE_NORMAL |
                                           /* Normal drive */
                                           IOPCTL_PIO_FULLDRIVE_DI |
                                           /* Analog mux is disabled */
                                           IOPCTL_PIO_ANAMUX_DI |
                                           /* Pseudo Output Drain is disabled */
                                           IOPCTL_PIO_PSEDRAIN_DI |
                                           /* Input function is not inverted */
                                           IOPCTL_PIO_INV_DI);
      /* PORT0 PIN14 (coords: A3) is configured as FC2_SCK */
      IOPCTL_PinMuxSet(IOPCTL, 0U, 14U, port0_pin14_config);


      const uint32_t port0_pin15_config = (/* Pin is configured as FC2_TXD_SCL_MISO_WS */
                                           IOPCTL_PIO_FUNC1 |
                                           /* Disable pull-up / pull-down function */
                                           IOPCTL_PIO_PUPD_DI |
                                           /* Enable pull-down function */
                                           IOPCTL_PIO_PULLDOWN_EN |
                                           /* Enables input buffer function */
                                           IOPCTL_PIO_INBUF_EN |
                                           /* Normal mode */
                                           IOPCTL_PIO_SLEW_RATE_NORMAL |
                                           /* Normal drive */
                                           IOPCTL_PIO_FULLDRIVE_DI |
                                           /* Analog mux is disabled */
                                           IOPCTL_PIO_ANAMUX_DI |
                                           /* Pseudo Output Drain is disabled */
                                           IOPCTL_PIO_PSEDRAIN_DI |
                                           /* Input function is not inverted */
                                           IOPCTL_PIO_INV_DI);
      /* PORT0 PIN15 (coords: A5) is configured as FC2_TXD_SCL_MISO_WS */
      IOPCTL_PinMuxSet(IOPCTL, 0U, 15U, port0_pin15_config);

wKgZomUCWxWAEwjIAAE1xlQVdgc471.png測(cè)試結(jié)果如下:

wKgZomUCWxWAexzrAATDXihEt_s682.png

可以看到波形很光滑,毛刺消失,輸出也是穩(wěn)定的48Khz,滿足客戶不改變驅(qū)動(dòng)能力的要求。

小結(jié)

在使用i.MX RT600 FC2做I2S的時(shí)候,為了BCLK不受外部電路影響,從而影響到WS的波形頻率,建議引腳配置以下二選一:

1.使用Full output drive,提高驅(qū)動(dòng)能力2.使用慢slewrate,濾掉BCLK上升下降小毛刺

最后,特別感謝NXP 蘇州SE團(tuán)隊(duì) James Fan 在該解決方案上提供的大力支持!作者:周晶晶

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16785

    瀏覽量

    349316
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5806

    瀏覽量

    105925
  • WS
    WS
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    9933
  • i.MX
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    35522
  • I2S
    I2S
    +關(guān)注

    關(guān)注

    1

    文章

    62

    瀏覽量

    41742

原文標(biāo)題:i.MX RT600 BCLK受干擾影響WS頻率解決方案

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NXP推出基于i.MX RT106F本地人臉識(shí)別解決方案

    NXP MCU級(jí)別的人臉識(shí)別解決方案利用i.MX RT106F來實(shí)現(xiàn),使開發(fā)者輕松便捷地將人臉識(shí)別功能添加到他們基于MCU的IoT產(chǎn)品中.
    發(fā)表于 03-01 10:07 ?5106次閱讀

    i.MX RT500/600應(yīng)用案例 串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RTxxx 系列上(RT500/600)也有雙程序可交替啟動(dòng)特性,其主體設(shè)計(jì)邏輯基本上跟i.MX RT1170是差不多的,只是一些
    的頭像 發(fā)表于 05-05 14:24 ?2565次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500/<b class='flag-5'>600</b>應(yīng)用案例 串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RT處理器系列

    我對(duì)i.MX RT處理器系列很感興趣,因?yàn)樗菣C(jī)器學(xué)習(xí)研究項(xiàng)目中有吸引力的解決方案。機(jī)器學(xué)習(xí)需要大量的計(jì)算能力,而且由于i.MX RT AR
    發(fā)表于 07-22 07:53

    i.MX RT600跨界處理器參考資料

    i.MX RT600跨界處理器宣傳手冊(cè)
    發(fā)表于 12-12 07:21

    01:i.MX RT的市場(chǎng)應(yīng)用和參考解決方案

    應(yīng)用,然后分享現(xiàn)有的硬件/軟件/工具/文檔,以便全面了解i.MX RT系列。最后,還將介紹i.MX RT的典型參考解決方案,以便更好地了解恩
    的頭像 發(fā)表于 01-21 07:13 ?3282次閱讀
    01:<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的市場(chǎng)應(yīng)用和參考<b class='flag-5'>解決方案</b>

    恩智浦i.MX RT600跨界微控制器在功耗、性能和存儲(chǔ)器方面有顯著特點(diǎn)

    恩智浦半導(dǎo)體近日宣布i.MX RT600跨界微控制器 (MCU) 上市,這是一款面向音頻、語音和機(jī)器學(xué)習(xí)等超低功耗、安全邊緣應(yīng)用的理想解決方案
    的頭像 發(fā)表于 03-15 14:29 ?2691次閱讀

    i.MX RT開發(fā)筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測(cè))

    系列文章目錄i.MX RT開發(fā)筆記-01 | 初識(shí) i.MX RT1062 跨界MCUi.MX RT
    發(fā)表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發(fā)筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量控制器NVIC(按鍵中斷檢測(cè))

    RT-Thread & NXP 發(fā)布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界處理器系列。該系列下又包括 i.MX RT1020、i.MX
    發(fā)表于 12-07 13:06 ?2次下載
    <b class='flag-5'>RT</b>-Thread & NXP 發(fā)布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    基于i.MX RT單芯片實(shí)現(xiàn)的GUI圖形顯示和語音控制解決方案

    基于優(yōu)秀的性能指標(biāo),i.MX RT可以勝任許多輕量級(jí)的AI應(yīng)用,賦能越來越多的邊緣設(shè)備。今天這場(chǎng)視頻講座中,恩智浦的專家將向大家展示一款基于i.MX RT單芯片實(shí)現(xiàn)的GUI圖形顯示和語
    的頭像 發(fā)表于 12-31 09:48 ?7199次閱讀

    適用于i.MX RT500和i.MX RT600 MCU的Xtensa音頻框架介紹

    可編程方法,從而提供最大的靈活性,本篇將介紹適用于i.MX RT500和i.MX RT600 MCU的Xtensa音頻框架(XAF)。
    的頭像 發(fā)表于 11-10 09:39 ?2492次閱讀

    i.MX RT1xxx從SD/eMMC啟動(dòng)

    最近在恩智浦官方社區(qū)上支持了一個(gè)關(guān)于i.MX RT從SD卡啟動(dòng)的案例,這讓我想起了一年前寫過的一篇《i.MX RT600從SD/eMMC啟動(dòng)》,那一篇重點(diǎn)介紹了基于eMMC設(shè)備制作程序
    的頭像 發(fā)表于 05-11 14:34 ?1187次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1xxx從SD/eMMC啟動(dòng)

    基于 NXP i.MX RT1050 的 3D 打印機(jī)方案

    MCU-Healer 是基于 NXP i.MX RT1050 做的 3D 打印機(jī)方案,該方案主控 MCU i.MX
    的頭像 發(fā)表于 04-06 15:06 ?1042次閱讀
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050 的 3D 打印機(jī)<b class='flag-5'>方案</b>

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發(fā)表于 10-24 15:46 ?733次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問題

    基于NXP i.MX RT117H智能人機(jī)界面方案

    基于NXP i.MX RT117H智能人機(jī)界面方案
    的頭像 發(fā)表于 10-30 18:22 ?595次閱讀
    基于NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>117H智能人機(jī)界面<b class='flag-5'>方案</b>

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)
    的頭像 發(fā)表于 10-27 09:36 ?428次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500/<b class='flag-5'>600</b>系列上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)