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.

[参考译文] LP-MSPM0G3507:最后一个 SPI 位→BQ79600 后 MSPM0G3507 PICO (MOSI) 悬空不接受 CONTROL1.SEND_WAKE 命令

Guru**** 2794675 points

Other Parts Discussed in Thread: BQ79600EVM, MSPM0G3507, BQ79616

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1619122/lp-mspm0g3507-mspm0g3507-pico-mosi-floats-after-last-spi-bit-bq79600-does-not-accept-control1-send_wake-command

器件型号: LP-MSPM0G3507
Thread 中讨论的其他器件: MSPM0G3507、BQ79600EVM、 BQ79616

TI 团队大家好、

我正在使用的系统 MSPM0G3507 MCU 通过 SPI 连接到 A BQ79600EVM (桥)、它驱动 BQ79616 堆叠‑Q1 AFE 器件。

我目前在唤醒后的第一次写入过程中会看到 SPI 通信问题。 具体地说、 MOSI 线路 (MSPM0 SPI1_PICO) 在最后一个发送位之后‑Z 变为高电平 、结果为 慢速模拟 RC‑(类似上升) 而不是数字高电平。 由于 BQ79600 在空闲时要求 MOSI 保持逻辑高电平、因此桥接器会保持 不会 发送 WAKE 音调、第一个 BQ79616 保持关断状态 (DVDD/CVDD = 0V )。

这种效果是可见的 放置在 MCU 引脚上 (PB8)、‑这不是板级问题。

系统设置程序

MCU:MSPM0G3507

  • SPI1
  • PB9 = SCLK
  • PB8 = MOSI/PICO
  • PB7 = MISO/POCI
  • PB6 = NCS/CS0
  • PB1 = SPI_RDY 输入
  • VIO = 3.3V  
  • SPI 配置:
    • 4MHz  
    • Motorola 4‑导线
    • CPOL = 0、CPHA = 0
    • 8‑位
    • MSB‑优先

桥接和堆栈

  • BQ79600EVM(配置为桥接器)
  • BQ79616‑Q1 菊花‑链
  • 应用了正确的唤醒序列(两个 GPIO 唤醒脉冲)

问题描述

在两次手动唤醒 ping (PB8 + PB6 被驱动为 GPIO) 之后、电桥会正确唤醒并 SPI_RDY 变为高电平

接下来、我发送以下 SPI 写入:

WriteReg(0, CONTROL1, 0x20, 1, FRMWRT_SGL_W)
Bytes on MOSI: 90 00 03 09 20 CRC_L CRC_H

在此帧期间:

  • SCLK 正确((4MHz、总共 56 个时钟)  
  • nCS 在整个帧内保持低电平
  • 当 SCLK 处于有效状态时、MOSI 上的数据位正确
  • 在最后一位之后 、PB8 上的 MOSI 变为 ‑Ω 阻抗持续数微秒
  • 波形显示了 RC 斜升回 3.3V  、而不是主动驱动的数字‘1’
  • ‑MOSI 没有保持有效逻辑 μ A 高电平、因此 BQ79600 忽略 SEND_WAKE 命令 并且未生成 WAKE 音调

我已确认:

  1. SCLK、nCS 和位时序正确
  2. 启用 SPI 之前、唤醒后从 GPIO 恢复到 SPI 的引脚多路复用
  3. 调用 DL_SPI_ENABLE()
  4. 我等了 DL_SPI_isBusy() == false
  5. 我在 DE‑将 nCS 置为有效之前添加了额外的基于 NOP 的延迟
  6. MOSI 上的内部拉电阻设置为“无电阻“
  7. 会对 PB8 执行手动 GPIO 切换 清晰锐利的数字边缘 仅当引脚→SPI 模式时才会发生 Δ V 问题

不会改变 MOSI 上升缓慢。


示波器捕获

紫色= nCS
黄色= MOSI/PB8

SDS00021.png

黄色波形清楚地显示了 SCLK 期间正确的位切换、然后是 慢速模拟上升 发送一个脉冲。

这强烈建议使用 MSPM0 SPI 外设 将 MOSI 线路 (PICO) 释放到高电平‑Z 传输完成后。

目标

我需要 MOSI 在 SPI 帧结束时保持定义的逻辑高电平、以便 BQ79600 成功执行CONTROL1.SEND_WAKE并发出 WAKE 音调、从而使第一个 BQ79616 退出 SHUTDOWN 模式。

乐意在需要时提供 SPI 代码、寄存器设置或其他波形。

感谢您的支持!

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

    在这里、Helic 和 Luke 似乎同意(尽管有 TRM (SLAU846C) 第 25.2.3.2 节 25.2.3.1) 当“空闲“为 Hi-Z 时 Pico 的状态:

     关于:MSPM0G1107:MSPM0 SPI PICO 引脚 

    我在引号中加上“Idle",“,因为、因为 TRM 似乎使用两种不同的“空闲“定义:(a)/CS 置为无效、而 (b) TX FIFO 为空。 在 4 线模式下、这些最终会(大部分)相同。 在 3 线模式下、它们会有所不同(“CS [...]  的行为就像始终选择一样“)。  

    在 3 线模式下、MOSI/PICO 的行为是否有不同(将+/CS 作为 GPIO)?

    【编辑:固定部分参考】

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

    您好 Bruce、
    感谢您的回答。 我还没有尝试 3 线模式、因为桥接器 (BQ79600) 无法在 3 线模式下工作。  
    是否有其他方法可以解决此问题?

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

    在 TRM 中、“4 线模式“表示“使用内置芯片选择“。 通过告诉 SPI 它是 3 线模式、但将/CS 引脚(PB6 没问题)配置为 GPIO 并直接将其设置为低电平/高电平、您可以获得相同的结果。 通过自己这样做,您可以控制/CS 正在执行的操作。

    这样做还有其他好处,你可能会遇到以后;最明显的问题是“连续的背对背“转移,这在实践中很难保证。

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

    尊敬的 Svenja:

    Bruce 在之前的两个答复中都是正确的。 如果您有任何其他问题/疑虑、请随时跟进。

    此致、

    Owen

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

    我在 3 线模式下看到了相同的现象。 它确实与空闲定义有关 (b)[TX FIFO 为空];甚至可以看到、如果我使用两者之间的延迟缓慢地测量字节、也可以看到。

    我确实有一个更好的边缘和更强的上拉,但我不知道这是否会对你有所帮助。

    【编辑:添加范围跟踪。】

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

    事务完成 (BUSY=0) 后、可以立即将 IOMUX:PF 设置回=1 (GPIO)、从而找到某个地方。 假设 GPIO 寄存器 (DOUTSET+DOESET) 为“已准备好“、则开关只是对 IOMUX 寄存器的单次写入。 (听起来好像您已经在为唤醒 ping 执行类似的操作。)

    PICO 仍会短暂变为低电平、如 TRM 第 25.2.3.1 节所述(并在上面的示波器迹线中观察到 — 第二个字节为 0x05)。