2400738_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2400738_zh-CN

2400738_zh-CN

RW612 FLEXCOMM3/I2S3 支持驱动程序

我们使用 RW612 FLEXCOMM3/I2S3,并采用以下固定硬件布线:

- GPIO24 = 来自 PCM6120 SDOUT 的 I2S 数据输入
- GPIO25 = I2S SCK 输出至 PCM6120 BCLK
- GPIO26 = I2S WS 输出至 PCM6120 FSYNC

编解码器为 PCM6120,处于从属模式。
RW612 旨在作为 I2S 主设备,生成 BCLK/WS 并接收音频数据。

我们已核实的内容:
- GPIO25/GPIO26 可以在普通 GPIO 模式下正确驱动
- FLEXCOMM3 时钟源为 12.288 MHz 的音频 PLL
- 与 PCM6120 的 I2C 通信正常
PCM6120寄存器配置已接受

观察到的行为:
1. 配置为 I2S RX 且 kI2S_MasterSlaveNormalMaster 的 FLEXCOMM3 不会在 GPIO25/GPIO26 上生成任何 SCK/WS 边沿。
2. 将 FLEXCOMM3 配置为 I2S TX,并使用 kI2S_MasterSlaveNormalMaster 也无法工作:FIFOSTAT.TXNOTFULL=1,但在写入 FIFOWR 后 TXLVL 仍为 0,并且引脚上没有出现 SCK/WS 边沿。
3. PCM6120 报告缺少时钟(ASI_STS=0xFF,DEV_STS1=0x80)。

问题:
1.RW612 FLEXCOMM I2S RX 在正常主模式下是否会将 SCK/WS 驱动到外部引脚?
2. 对于“主时钟生成 + 从外部编解码器接收数据”的使用场景,是否支持单个 FLEXCOMM 实例,还是需要双 FLEXCOMM 架构(TX 主设备 + RX 从设备,带 I2S 桥接器)?
3.对于 FLEXCOMM3 I2S TX 主站,除了 I2S_TxInit()、FIFOWR 写入和 MAINENABLE 之外,接受 FIFO 写入是否还有其他先决条件?
4. 对于 I2S 时钟输出,FLEXCOMM3 在 GPIO24/25/26(AON 功能域)上是否存在任何已知的限制?

请帮忙解答这个话题

Re: RW612 FLEXCOMM3/I2S3 Supporting driver

@duyhung ,希望你一切都好。

请问您进行测试时使用的是 FreeRTOS 还是 Zephyr?你使用的是FRDM-RW612板吗?

请同时提供您使用的版本(SDK 或 Zephyr),以及您是否以示例为基础进行开发。

此外,RW612(UM11865)参考手册第28.2节包含I2S外设的基本配置指南,请问您是否已按照这些一般步骤操作?

Re: RW612 FLEXCOMM3/I2S3 Supporting driver

@RomanVR

感谢您的回复。详情如下。


1. 实时操作系统

我们正在使用 裸机和 FreeRTOS 均用于测试。这些测试中没有 Zephyr 参与。所有初始化和 I2S 配置均直接使用 NXP SDK 驱动程序完成。


2. 板

我们是 不是 使用 FRDM-RW612。我们正在使用一个 定制开发板 基于 RW612ETA2I。MCU相同,但板布局不同。

音频编解码器(PCM6120)通过线路连接到 FLEXCOMM3 / I2S3 在以下固定引脚上:

GPIO 信号方向
I2S 数据(来自 PCM6120 的 SDOUT)GPIO24输入
I2S SCK(BCLK 至 PCM6120)GPIO25输出
I2S WS(FSYNC 到 PCM6120)GPIO26输出
I2C SDA(PCM6120 配置)GPIO56 (FC14)双向
I2C SCL(PCM6120 配置)GPIO57 (FC14)双向
AUX_EN(PCM6120 电源)GPIO54输出

3. SDK 版本

我们正在使用 SDK_2.x_RD-RW612-BGA,版本 25.03.00


4. 基本示例

我们使用了 rdrw612bga_i2s_dma_record_playback 作为参考示例。该示例使用 FLEXCOMM1(TX 主设备)+ FLEXCOMM0(RX 从设备)+ I2S 桥接器,我们已确认其工作正常。

然而,由于硬件限制,我们不得不使用一种 单路 FLEXCOMM(仅限 FC3) 整个 I2S 链路到 PCM6120。PCM6120 必须以从机模式工作,因为我们没有外部时钟源作为 BCLK。我们尝试将 FC3 配置为 kI2S_主从正常主 使其在接收数据时生成 SCK/WS。


5. UM11865 第 28.2 节 – I2S 配置步骤

我们已审阅 UM11865 第 28.2 节,并确认所有 6 种配置均正确无误。
步骤如下:
步骤 1:启用 Flexcomm,使用 CLOCK_EnableClock + RESET + CLOCK_AttachClk
步骤 2:FIFO 配置(FIFOCFG=0x35,ENABLETX=1,SIZE=8)
步骤 3:通过 IO_MUX_SetPinMux(IO_MUX_FC3_I2S) 设置 I2S 引脚,启用 AON MCI_IOMUX
步骤 4:速率配置(CFG1 MSTSLVCFG=0b11=NormalMaster,DIV=3 → BCLK=3.072MHz)
步骤 6:在 FIFOCFG 中启用 DMA

尽管我们已遵循所有步骤,但仍观察到以下情况:
- GPIO25/GPIO26 上没有 SCK/WS 边沿
- TX FIFO 不接受数据:TXNOTFULL=1,但 FIFOWR 写入后 TXLVL 仍为 0

第 28.2 节步骤 4 指出:“对于控制器操作,时钟决定
I2S 速率”,但没有具体说明 PERSEL=I2S_RECEIVE 是否与
NormalMaster 预计会将 SCK/WS 驱动到焊盘上。

请您澄清一下:
1.PERSEL=I2S_RECEIVE (0b101) 是否能够驱动 SCK/WS 作为输出
当 MSTSLVCFG=NormalMaster 时?
2. 为什么在使用 PERSEL=I2S_TRANSMIT 向 FIFOWR 写入数据后,TXLVL 仍然为 0?
FIFOWR 写入操作是否需要先启用 MAINENABLE 权限?


6. 观察到的问题——我们的具体问题

完成以上所有配置后, GPIO25 和 GPIO26 产生零边沿。PCM6120 报告缺少时钟信号(ASI_STS = 0xFF, DEV_STS1 = 0x80)。

我们进一步运行了诊断程序:我们将 FC3 配置为 I2S TX 主控端 (而不是 RX 主控端)并发现 写入 FIFOWR 不会递增 TXLVL — FIFOSTAT 保持不变 0x30 无论我们写多少个字,(TXNOTFULL=1,TXLVL=0)。

TX 主探测后的相关寄存器状态:

 

CFG1 = 0x17003C(MSTSLVCFG=3 = NormalMaster,DATALEN=24,MAINENABLE=0)
分频比 = 3(分频器=4,BCLK = 12.288MHz / 4 = 3.072MHz)
FIFOCFG = 0x35 (ENABLETX=1, TXI2SE0=1)
FIFOSTAT = 0x30(写入后 TXNOTFULL=1,TXLVL=0)

MAINENABLE=1 之后:
STAT = 0x5(BUSY=1,LR=1 — 内部时钟逻辑运行)
GPIO25/GPIO26 上的 SCK/WS 边沿:0

我们向恩智浦提出的具体问题:

当 FLEXCOMM3 I2S 配置为 kI2S_主从正常主 (无论是 TX 还是 RX),RW612 上的 SCK/WS 是否是预期行为? 不是 即使 STAT 显示外设内部正在运行,驱动信号仍然会输出到 GPIO25/GPIO26(AON 功能域)?

或者:采用单FLEXCOMM拓扑结构(一个飞控同时作为时钟主控和RX数据接收器)。  对于这种使用场景,RW612 I2S 硬件是否必须支持两个独立的 FlexComm 实例(一个 TX 主站 + 一个 RX 从站,通过 I2S 桥接器)?

谢谢!

Tags (1)
No ratings
Version history
Last update:
a week ago
Updated by: