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.

[参考译文] TMS320F28035:用于 SPI 通信的帮助、用于读取数据并将数据写入从器件芯片

Guru**** 2561530 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/637536/tms320f28035-help-for-spi-communication-for-reading-and-writing-data-to-slave-chips

器件型号:TMS320F28035
主题中讨论的其他器件:C2000WARE

你好

  我尝试使用 SPI 通信将数据读取并写入传感器芯片。 它是4线制 SPI 通信、28035被用作主控模式。 对于传感器芯片、数据传输从 CSn (引脚19)的下降沿开始 、而 SPI 命令在 CSn 的上升沿执行。  但是、我似乎可以正确地读取和写入数据。 我写了如下内容。 有人可以帮助我解决问题吗? 这是我第一次使用 SPI、感谢您的任何帮助。

#define SPI_WRITE_MICRO (v)\
SpiaRegs.SPITXBUF = v;\
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;\
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
GpioDataRegs.GPASET.bit.GPIO19 = 1;\
SPI_READ_Dummy = SpiaRegs.SPIRXBUF;

#define SPI_READ_MICRO (v)\
SpiaRegs.SPITXBUF = SPI_WRITE_Dummy;\
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;\
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}/*检查已发送的数据*/\
GpioDataRegs.GPASET.bit.GPIO19 = 1;\
V = SpiaRegs.SPIRXBUF;

 

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

    您是否已查看 c2000WARE 中的示例? 它应该有助于您对模块及其工作原理有基本的了解。 请仔细阅读用户指南(http://www.ti.com/lit/SPRUG71)

    我认为您有一个拼写错误、是说您无法正确读取和写入数据?

    首先、写入 SPITXBUF 后、SPI 将开始传输。 由于您接下来要做的是启用从器件、因此您可能违反了从器件时序要求。 当从器件被启用时、这个字将从 SPI 发出。 传输的第一个位丢失的风险。 您至少需要在写入 SPITXBUF 之前将片选置为有效。

    或者、如果这是唯一的从器件、则可以让 SPI 驱动芯片选择信号。 确保在开始传输之前设置 GPIO 多路复用器。 通过允许 SPI 控制芯片选择信号(SPISTEA)、您无需在通信期间浪费额外的周期来控制 GPIO。

    由于这是您第一次使用 SPI、我强烈建议您查看示例。 如果您有开发套件、您可以连接两个 SPI、为主器件和从器件编写代码、并查看它们如何协同工作。 用户指南和网络上的许多其他来源是 SPI 的优质资源。 它是一个非常简单的模块、世界上有许多器件使用它。

    如果您有其他问题、请告诉我。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark、您好!
    感谢您的快速回复。 我再次阅读 SPI 文档、可能需要您的帮助来澄清我的理解。
    关于 SPISTE 引脚、在主控模式下、它是否自动控制? 我是说这个引脚在传输前被驱动为低电平、在传输后被设置为高电平、并且无需控制它。
    在主控模式中、写入 SPIDAT 和写入 SPITXBUF 有何区别? 如果数据被写入 SPITXBUF、那么 SPI 是否首先传输 SPIDAT 中的现有数据并从从从器件接收数据、在接收到的数据被传输到 SPIRXBUF 后、写入的数据被传输? 如果只有一个字被传输,我是否需要写入 SPIDAT 而不是 SPITXBUF?
    谢谢你。

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

    1.是的、在主控模式下、SPI 将自动控制 SPISTE 芯片选择引脚。 它将在开始发送前被驱动至活动状态、并在最后一个字被发送后被取消置位。 只要有数据要发送、SPI 就会使 SPISTE 保持活动状态。
    SPIDAT 是移位寄存器。 您可以写入该寄存器、传输将开始。 在传输过程中、您将看到该寄存器的状态变化。 传输完成后、SPI 将数据从 SPIDAT 复制到 SPIRXBUF。 如果您一次只写入一个字、并且在传输下一个字之前读取它、是的、那么您可以使用 SPIDAT。

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