主题中讨论的其他器件:SysConfig
您好!
我们之前在具有 FIFO 的控制器模式下使用 I2C 与电路板上的另一个芯片定期通信、并在不需要通信的情况下在 STANDBY1模式下使用 I2C。 典型 I2C 交换的大致格式如下、交换的周期性100ms 和交换持续时间、包括软件开销小于1ms。 MCU 在剩余的99ms 内处于休眠状态。 整个板的平均电流消耗~250uA。
发送写地址+发送我们要访问的2字节寄存器 ID +重启+发送读取地址+读取8字节数据。
但现在、我们希望切换到一次接收10个字节的数据。 I2C FIFO 最多只能有8个字节、因此我们切换到 DMA 以便仅进行接收。 按如下所示配置了 I2C+DMA 并且其工作正常、我们得到预期的10字节数据:
- DMA 事件2上的 I2C 中断
- I2C RX FIFO 级别>= 1字节
- DMA 事件2触发=控制器 RX FIFO 触发
- 修正了地址到块地址。 源为 I2C1.MASTER.MRXDATA、目标地址为 RAM 中的某个缓冲区。
- 源和目的长度=字节
- 待传输数目= 10
- DMA 传输模式单路
正如我说过的、I2C 通信按预期运行。 但电流消耗从250uA 跃升至~μ A 1.8mA。 我通过围绕 WFI 指令切换引脚来确认、MCU 在~99ms 内确实处于睡眠状态、此时它不进行任何 I2C 交换。 通常我只是 在睡眠前调用 DL_I2C_disableController (),而不是使用 DL_I2C_disablePower ()完全禁用 I2C 外设,但我也尝试过这样做,而且功耗没有变化。
我将在每次10字节传输之前设置一次 DMAEN。 当 DMA 传输完成时、我已经确认:
- DMAEN 被自动设回0
- 使用 DL_I2C_IIDX_CONTROL_EVENT2_DMA_DONE 命中 I2C 中断
- 未命中其他 I2C 中断
我怀疑 DMA 中的某些内容会使 CPU 的某些部分保持唤醒状态、从而导致高电流消耗。 已确认我是否仅在 DL_DMA_enableChannel ()调用中添加功耗降至~0.2mA。 但我找不到直接禁用/复位 DMA 的方法、所以我很困。
由于此电流消耗超出了我们的应用预算、请帮助我们。