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.

[参考译文] MSPM0G3507:SPI 通信 — 防止地址和数据字节之间的 nCS 线路变为高电平(8 位事务)

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561774/mspm0g3507-spi-communication---prevent-ncs-line-from-going-high-in-between-address-and-data-byte-8-bit-transactions

器件型号:MSPM0G3507


工具/软件:

尊敬的团队:

我正在使用 MSPM0、并尝试通过 SPI 总线将其连接到 SBC(TCAN284X 器件)。  

我的一切几乎都正常工作、但我找不到可以修改 nCS 引脚行为的标志或寄存器。  

目前、器件将发送 7 位地址+ R/W 位、然后将 nCS 引脚提升为高电平、然后再将其恢复为低电平以发送 8 位事务或接收 8 位消息。  

SBC 期望在包括地址和数据在内的整个信号(包括地址和数据)内 nCS 为低电平、如下所示:

但 MCU 上的 nCS 引脚会继续执行此操作:


在这种情况下、它在每个字节后将 nCS 拉至高电平。  

我认为应该有一种方法来解决这个问题、此时整个事务将 nCS 设为低电平、而不是为每个字节变为低电平。 与当前正在发生的情况一样、每当 nCS 引脚在转换过程中变为高电平时、SBC 上的 SPI 总线都会复位。  

我尝试仅使用 GPIO 作为 nCS、但时序看起来并不好、GPIO 的输出特性在外观上也不是很好 — 我使用的是 LaunchPad、因此它在我可以访问的所有引脚中都受到限制。  

我的主要问题是:

1.我可以确保 nCS 在整个事务中处于低电平、而不是仅 1 个字节(我尝试了使用 16 位事务 — 但这似乎也不起作用)  

2.如果我能做到第 1 点 — 如何做到这一点。  

非常感谢任何帮助 — 由于 CAN 控制器、我们希望将 MSPM0 用作许多 SBC 的配套 MCU、因此该问题不仅有助于我们解决该问题、还有助于我们确定与该器件配套的 MCU。  

此致、

Parker Dodson

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

    简短答案:我建议为 nCS 使用 GPIO。 您没有理由不能使用与内置 nCS 相同的当前 PIN。 您对此有什么困难?

    答案稍长:TRM (SLAU846B) 第 19.2.3.1 节介绍了/CS 如何在每个 SPI 模式下工作。 在其中两种模式下、只要您保持“连续的背对背“传输、/CS 就会保持低电平;根据上下文和历史记录、我将其解释为“ Tx FIFO(+移位寄存器)从不清空“。

    对于足够快的 SPI、使用软件很难保证这一点。 DMA 可能会完成它,但即使这没有保证 ( DMA 可能会“分心“)。  不跟上(正如你所看到的)的结果是,你的交易分解成两个,你甚至不会知道它发生了。

    通过为 nCS 使用 GPIO、您可以完全控制 nCS 的生效时间。

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

    尊敬的 Parker:

    答案稍长:TRM (SLAU846B) 第 19.2.3.1 节介绍了/CS 如何在每个 SPI 模式下工作。 在其中两种模式下、只要您保持“连续的背对背“传输、/CS 就会保持低电平;根据上下文和历史记录、我将其解释为“ Tx FIFO(+移位寄存器)从不清空“。

    显示有关 Bruce 简介的更多详细信息:

    这会将 M0 限制为外设模式、我假设您将 M0 设置为控制器、因此这不应限制您的控制器行为。

    为它引入了两种方法:

    1、使用 SPH=1 模式、控制器在数据帧期间不会生成 CS 脉冲。

    2.禁用 CS 功能,并使用 GPIO 作为您之前尝试过的操作,我认为它应该可以正常工作,没有任何问题。 我曾经尝试过这个方法。

    B.R.

    Sal