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.

[参考译文] TM4C1290NCZAD:SPI 通信机制问题

Guru**** 2510095 points
Other Parts Discussed in Thread: TM4C1290NCZAD, MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1258789/tm4c1290nczad-spi-communication-mechanism-question

器件型号:TM4C1290NCZAD
主题中讨论的其他器件: MSP430FR5994

大家好、团队成员:

   现在、我想使用 TM4C1290NCZAD 和 MSP430FR5994  通过 SPI 通信传输一些数据。  

 在我的系统中、TM4C 是主设备、MSP430是从设备。  

 主机发送一个请求帧、然后主机继续发送一些虚拟信号以生成时钟信号、

在从器件接收到主机的命令之后、由于总线上的时钟信号此时是正常的、因此从器件

能够正常将数据发送回主机。  

我们都知道 SPI 是全双工通信。 但在我描述的过程中、SPI 似乎是一种半双工通信。

当主机发送数据时、从器件需要依赖主机生成的时钟信号来发送一些虚拟信号(如0xFF)

将自己的数据发送回主机。

如果在这个过程中、由于某些原因时钟信号有问题、则 SPI 将无法发送和接收数据。

所以我真的想知道
(__LW_AT__1)SPI 全双工通信、主机和从机如何同时发送和接收数据、

为什么主器件不需要向从器件提供额外的时钟信号?

(__LW_AT__2 μ s)、我们遇到的问题是偶尔会在两个器件之间进行 SPI 通信、

这两个芯片无法通信。 主器件发送虚拟信号来为从器件生成时钟信号是否可行?

请原谅我的冗长诱惑。 希望有的专家一看到就能耐心的帮我回答。

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

    您好!

     主机发送请求帧,然后主机继续发送一些虚拟信号以生成时钟信号

    您能否说明一下您用于生成时钟的虚拟信号是什么?

    您是否未使用片上 SPI 模块生成 SPI 时钟? 如果您未使用 SPI 模块、那么不使用 SPI 模块的原因是什么?

    您是否建议您使用一种位绑定方法来使用 GPIO 模块生成 SPI 时钟?

    如果在这个过程中、由于某些原因时钟信号有问题、则 SPI 将无法发送和接收数据。

    所以我真的想知道
    (__LW_AT__1)SPI 全双工通信、主机和从机如何同时发送和接收数据、

    [/报价]

    SPI 是一种全双工操作、这意味着在存在 SPI 时钟的情况下、数据由主器件通过 TX 引脚发送、而从器件通过 RX 引脚发送数据。 如果时钟出现问题、则可能会导致两侧误判数据传输的完成情况。 例如、如果时钟信号上存在一些噪声、则可能会导致从器件将其误解为额外的时钟或缺少时钟边沿。  

    [quote userid="543811" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1258789/tm4c1290nczad-spi-communication-mechanism-question 为什么主设备不需要向从设备提供额外的时钟信号?

    我不理解您在这里的问题。 如果您使用我建议使用的硬件 SPI 模块、而不是使用软件方法对协议进行 Bitbang、则时钟脉冲的数量由硬件控制。 除非您在总线上讨论一些噪声、否则主器件不会生成其他时钟。 如果是这样的话、您需要解决原理图上的系统级问题。  

    (__LW_AT__2 μ s)、我们遇到的问题是偶尔会在两个器件之间进行 SPI 通信、

    这两个芯片无法通信。 主器件发送虚拟信号来为从器件生成时钟信号是否可行?

    [/报价]

    请详细说明哪些不起作用。 那么、什么是虚拟信号信号? 是否使用软件方法来生成 SPI 时钟? 我不推荐将此方法用于实时操作。  

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

    非常感谢你的详细答复,也许我的表达不是很清楚,有些地方误解了你,让我先回答你的问题。

     XI.yan.Kiana 说:

    主机发送一个请求帧、 然后主机继续发送一些虚拟信号以生成时钟信号、

    您能否说明一下您用于生成时钟的虚拟信号是什么?

    --------  虚拟信号参考0xFF。

    您是否未使用片上 SPI 模块生成 SPI 时钟? 如果您未使用 SPI 模块、那么不使用 SPI 模块的原因是什么?

    -------- 我使用片上 SPI 模块生成时钟信号。

    您是否建议您使用一种位绑定方法来使用 GPIO 模块生成 SPI 时钟?

    -------- 我尚未使用此方法

    (__LW_AT__2 μ s)、我们遇到的问题是偶尔会在两个器件之间进行 SPI 通信、

    这两个芯片无法通信。 主器件发送虚拟信号来为从器件生成时钟信号是否可行?

    主机发送一个:帧        2 μ s (注:SPI 时钟通道0:SPI 时钟通道1:cs (unused)通道2:主器件  通道3:从器件)

    0xAA 0xBB 0x06 0x02 0x00 0x00 0x00     0x00 0x00   0x00 0x00 0x00  0xCC 0xDD  

    发送请求帧后、主机继续发送0xFF 以  生成 SCLK 信号(0xFF 是我所称的虚拟信号)   

    从器件向主器件回复数据

    情况2:在我尝试主机发送请求帧后、主机不会继续发送0xFF,、波形如下:

    主机发送一个请求帧:

    由于没有时钟信号、从器件发送的数据将不会出现在总线上

    最后、我想问的是、当前 SPI 通信机制似乎通过软件生成时钟信号。 如果这种方法确实有问题、我想问、是否有其他方法可以生成 SPI 时钟信号? 您能否详细介绍如何生成时钟信号? 如果有相关例程、您可以参考它。

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

    尊敬的 Kiana:

     感谢您捕获波形。 您能否告诉我由什么触发您的代码在主器件端发送0xFF? 是基于从器件接收到的数据吗?

     如果您看看案例1、在发送0xAA  0xBB 0x06  0x02 0x00 0x00 0x00 0x00时       0x00 0x00 0x00  0xCC 0xDD 、您收到的是0x44、0x44... 0x44从器件? 这是您预期会收到的吗?

     如果您看看情况2、在发送0xAA 0xBB 0x06    0x02 0x00 0x00 0x00 0x00时       0x00 0x00 0x00  0xCC 0xDD、您收到的是0x88、0x88...0x88、这与案例1不同。 在主器件侧、如果它接收非0x44、则它可能不会使用0xFF 发送虚拟时钟? 0x44和0x88之间似乎存在一个1位移位。 您将需要对此进行研究。 请确保两侧具有相同的波特率。 检查总线上是否有任何噪声、因为此噪声可能会导致从器件将其误解为有效时钟。 如果发生这种情况、它会过早发送数据、导致出现移位。 您将需要使用示波器来查看此情况。   我建议你把注意力集中在你发送的第一个字符上。 在第1种情况下、当您在主请求帧上发送0xAA 时、将收到0x44 (01000100b)。 在第2种情况下、您将收到0x88 (10001000b)。 找出为什么会移动一位。