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.

[参考译文] RTOS/CC2640:CC2640:SPI0、带多芯片选择

Guru**** 2589280 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/603174/rtos-cc2640-cc2640-spi0-with-multiple-chip-selects

器件型号:CC2640

工具/软件:TI-RTOS

你好,Forum

我在论坛上搜索了很多、但我没有找到适合我使用的解决方案。

我有一个带有 SPI 传感器和 SPI 闪存的定制板、它们都使用相同的 SPI 总线(当然、CS 不同)。 现在我很好奇、我如何使用 SPI 驱动器来满足这两种片选。

我通过 SPI_MODE_CALLACK 使用 SPI 驱动程序、并且已经编写了一个包含传感器的正在运行的系统。 现在我想添加闪存功能、我很难执行正确的方法:
我宁愿这样做

  • 创建一个新的 SPI1句柄、它与 SPI0器件共用相同的 MISO、MOSI 和 SCK 引脚、但与另一个 CS 共用? 可以这样做吗? 然后、SPI0句柄被用来访问传感器、而 SPI1句柄被用来访问闪存?
  • 每次使用不同的 CS 时是否重新配置 SPI0? 如果是、我应该首先调用 SPI_Close、然后使用其他索引和参数打开 SPI:open?

我不想将 CS 用作专用 GPIO、因为我只能在 SPI 传输完成回调函数中复位 CS、因此我需要立即启动新的事务:CS-GPIO 引脚处于高电平的时间将会太短!

我真的希望您能理解我的问题和问题、并为我提供一个巧妙的解决方案。

此致、

Matthias

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

    我将询问办公室周围的情况、看看一些专家对最优雅的解决方案有何看法。

    我知道一种潜在的节能解决方案是通过传感器控制器执行位拆裂 SPI。 (您可以将 GPIO 与 CS 线路具有相同的 SPI 接口)但不使用 SPI 驱动器、因此存在这种情况。 但同时、它的功耗很低、因为 M3可以处于睡眠状态。

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

    你(们)好,反叛

    非常感谢您的快速回复。 低功耗解决方案始终是一个好解决方案、这听起来非常有趣... 但我不确定这是否适合当前应用、以及该解决方案是否可以满足我的所有要求。 我将深入了解这一点、如果我有任何使用传感器控制器的解决方案、我会随时向您发布。

    但我仍然非常感兴趣的是、您办公室的其他专家会对最佳解决方案的看法。 这对于后续项目也很有趣、而且到目前为止、这是解决我的问题的最快解决方案(我从未使用过传感器控制器)。

    再次感谢、致以诚挚的问候、

    Matthias

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

    Mattias、

    1. 虽然 SPI 控制器具有硬件 CS 引脚、但预期的 CS 行为可能会也可能不会如您预期的那样正常工作。 有关各种 PHA 和 POL 设置、请参阅 SSI 控制器的时序图。 如果 CS 引脚置位行为与您的设计要求不兼容、则您别无选择、只能使用 GPIO 引脚作为 CS。
    2. SPI 句柄是每个 SPI 控制器的、而不是每个 SPI 总线上的器件的(例如、每个总线一个句柄)
    3. 从驱动器的角度来看、控制器可以在不分配 CS 引脚的情况下运行。 我想在您的应用中,您可能应该为每个 SPI 从器件分配一个专用 GPIO 引脚,并确保您选择了正确的从器件并进行了出色的调用 SPI_transfer()。

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

    你(们)好,Tom

    感谢您的回答。

    我想、这就是使用专用 GPIO 引脚的方法。 但是、我非常谨慎地这样做、因为我将在 SPI 传输完成回调中将 GPIO 引脚设置为高电平、这会立即触发一个新的 SPI 传输、用于同一器件的下一条命令。 如果我使用 GPIO、在这种情况下 CS 可能很快处于高电平(可能太短)、最低150ns。 但这仅是 CPU 速度为24MHz 的3.6个时钟周期、这应该是可以的... 即使是优化的汇编器也没有那么快:)

    我将尝试使用 GPIO 来实现这一点、如果它不起作用、我将返回给您、如果它起作用、我将把您的答案标记为解决方案。

    再次感谢

    此致、
    Matthias