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.

[参考译文] TMS320F280037C-Q1:与多个获取 0xFFFF 的 SPI 从器件一起使用时 TMP125 的 SPI 接口

Guru**** 2782615 points

Other Parts Discussed in Thread: TMP125

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612450/tms320f280037c-q1-spi-interface-for-tmp125-when-used-with-multiple-spi-slaves-getting-0xffff

器件型号: TMS320F280037C-Q1
主题中讨论的其他器件: TMP125

尊敬的团队:

我通过 C2000 器件上的 SPI 连接 TMP125 温度传感器。 我面临一个奇怪的问题:同一个 SPI + TMP125 代码在独立(裸机)工程中正常工作、但在集成到 FreeRTOS 工程中时失败、即使在调度器启动之前、TMP125 读取值也变为 0xFFFF(或 MISO 上为 0xFF)我已验证 SPI 配置(SPI_setConfig、CPOL/debugger,比特率,数据宽度)在两个项目中是相同的 CS 引脚正确切换(在 CPHA 中验证) TMP125 CS 在事务期间置位为低电平所有其他 SPI 从器件 CS 引脚保持高电平启用 SPI FIFO 并且复位没有由我写入 SPI ISR 我在 vTaskStartScheduler () 之前测试了在 while 循环中读取 TMP125、因此这不是任务切换问题逻辑分析仪显示 SPI 时钟活动、 但 TMP125 MISO 保持高电平→读取变为 0xFFFF SPI 使用情况一条 SPI 总线多个 SPI 从器件 (LCD + TMP125) 手动 GPIO 控制的 CS SPI 轮询 API (SPI_pollingFIFOTransaction) 对于两个项目、相同的布线和相同的电路板对于独立项目进行观察、TMP125 在 FreeRTOS 集成项目中正确读取、TMP125 始终返回 0xFFFF 唯一的差异是项目集成(FreeRTOS + Board_init /系统初始化)。

当相同的 SPI 代码在独立项目中运行时、什么可能导致 TMP125(或通常的 SPI 从设备)在集成的 FreeRTOS 项目中始终返回 0xFFFF、即使在调度程序启动之前也是如此? 是否存在与以下相关的已知交互:board_init/pinmux SPI FIFO/RX 行为 PIE /中断初始化 SPI 外设状态差异 RTOS 项目中有关我应该验证的内部 SPI 状态或初始化步骤的任何指导都非常有用。 提前感谢。

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

    尊敬的 Prashanth:

    通常、Timer2 仅保留用于 FreeRTOS 应用。 我想请我们的 FreeRTOS 专家进行进一步评论。

    此致、

    Aishwarya

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

    尊敬的 Prashanth:

    这看起来与 FreeRTOS 无关。 用于 FreeRTOS 的硬件资源是用于节拍的 TIMER2 和一个额外的中断线路、这两者都不会干扰您的设置。

    您是否还验证了 MOSI 上的读取命令是否正确发送? 有时、当添加 FreeRTOS 时、系统堆栈可能会在调度器启动之前溢出、因此需要检查这一点。 另一个原因可能是多个 SPI 从器件同时发送数据、您似乎 已经排除了这一问题、但可能值得重新检查。 如果您有任何新发现、请告诉我。

    此致、

    Arnav

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

    感谢您的支持、并对延迟的回复深表歉意。

    问题已解决。 根本原因与使用单个 SPI 外设与两个从器件进行通信有关:KW45 和 TMP125 温度传感器。

    我们对两个从器件使用相同的 SPI 发送/接收过程。 但是、在 MCU SPI 引脚和连接到 KW45 SPI 接口的接头之间放置了一个电压隔离器。 为了与 KW45 通信、我们需要启用一个特定的 GPIO 来为该电压隔离器供电/使能该电压隔离器。

    问题在于、与 KW45 完成通信后、我们没有禁用此 GPIO(即电压隔离器保持启用状态)。 因此、SPI 线路仍被驱动通过隔离器路径、这干扰了与 TMP125 的通信、并导致接收到 0xFFFF。

    在与 TMP125 通信之前正确禁用 GPIO(从而禁用电压隔离器)后、两个 SPI 从器件都正常工作、并且我们开始接收有效数据。

    我附加了相关的原理图片段、其中显示了 MCU SPI 引脚和 KW45 接头之间的电压隔离器以供参考。

    此致、

    Prashanth