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.

[参考译文] TMS320F28388D:F28388D 的配置'SPI

Guru**** 2578945 points
Other Parts Discussed in Thread: TMDSCNCD28388D, C2000WARE, TMDSHSECDOCK, LMX2595, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1564081/tms320f28388d-configuration-of-f28388d-spi

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARETMDSHSECDOCK、TMDSCNCD28388D、 LMX2595SysConfig

工具/软件:

尊敬的支持团队:

我们计划使用 F28388D 的 SPI 来控制一些其他从 SPI 器件。

我们是否可以遵循任何 SPI 代码示例来开发我们的代码?

我   在 Windows 笔记本电脑上安装了 C2000Ware 6.00.00.00 和 CCS 20.2.0。  我使用 TMDSCNCD28388D 版本 MCU063B-003 和 TMDSHSECDOCK controlCARD 集线站版本 F 板进行测试。

希望我们可以从 TMDSHSECDOCK controlCARD 集线站板获取 SPI 信号。

期待您的答复。

此致、

LIN

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

    您好:

    有人能帮我解决这个问题吗? 我们仍然面临这个问题。

    谢谢、

    LIN

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

    您好:

    有人能帮助我了解 SPI 设置吗?

    谢谢、

    LIN

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

    对于响应延迟、我感到非常抱歉。

    以下位置提供了 F28388D 的示例:

    • {C2000Ware Install Location}\driverlib\f2838x\examples\c28x\spi\ccs

    此致、
    Jason Osborn

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

    尊敬的 Jason:

    没关系。

    我找到了示例链接并导入了 spi_ex1_loopback 工程。 我尝试配置 SPI 来控制 TI 的 LMX2595 PLL 芯片组。

    当前状态是,我可以通过使用 SPI_writeDataBlockingNonFIFO() 函数发送 SPI 写命令来配置 LMX2595。 但是,当我使用带有  SPI_readDataBlockingNonFIFO() 函数的 SPI 读命令时,我只能读回 MISO 线路上的最低 8 位数据。 希望在 MISO 线上获得 16 位数据。 BTW、对于 LMX2595 配置、我将 SPI 数据宽度设置为 8 位。

    您能帮我解决 SPI 回读问题吗? 如果您需要更多信息、我可以向您发送主源代码、.syscfg 文件和 Saleae 捕获文件。

    期待您的进一步答复。

    此致、

    LIN

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

    根据此处的描述、我使用 FIFO。 这将是以最小的额外复杂性实现所需内容的最简单方法。

    此致、
    Jason Osborn

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

    尊敬的 Jason:

    感谢您的快速答复和建议。

    是的,我也尝试使用  SPI_writeDataBlockingFIFO() 和 (SPI_readDataBlockingFIFO( )。 我在 SysConfig GUI 中选中“Use FIFO(使用 FIFO)“复选框、以启用 FIFO。 但这次我从回读中得到全部 1 或 0xFF。

    在使用 FIFO 之前、我是否错过了对该 FIFO 的任何设置?  

    为了给您提供更多信息、我随附了 SPI_READ 函数代码。 您可以查看一下吗?

    e2e.ti.com/.../SPI_5F00_Read.txt

    此致、

    LIN

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

    首先我要说的是、SPI_isBusy () 循环可能不是必需的。

    第二、更重要的是、使用 FIFO 时、不需要对 SPI_Read/write 函数调用进行位移。

    此致、
    Jason Osborn

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

    尊敬的 Jason:

    感谢您查看我的代码并指出了一些关键因素。

    我注释掉 了 SPI_isBusy () 行并去掉了 READ 函数中的位移。 我还需要澄清一点、在我运行的代码中实际上没有 spi_clearRxFIFO (SPIA_BASE);行。 (如果添加该行,将收到链接错误:未定义的符号)。

    最新的状态是、通过读取函数的位移、我将得到全 0 的数据;如果不在读取函数中进行位移、我将得到全 1 的数据。 两种情况均不正确。

    您是否有任何进一步的代码修改?

    谢谢、

    LIN

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

    我没有注意到、您要寻找的正确函数是 SPI_ 复位 RxFIFO()、不 clearRxFIFO。

    您是否能够使用示波器或数据分析仪监控数据线路? 如果可能、我建议这样做、以验证数据是否实际正在发送/接收中。

    除此之外、您是否在 regVal 返回变量或 rx 数组中看到了所有 1/0? 在该函数的返回变量之前放置一个断点、并查看 Rx 数组的完整内容。 如果您看到的内容没有任何意义、也可以使用 CCS 寄存器视图查看同一断点处 SPI Rx 仿真寄存器的内容、并告诉我在数组和寄存器中看到的一切内容。

    此致、
    Jason Osborn

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

    尊敬的 Jason:

    非常感谢您提供正确的函数信息和所有调试方法。

    将  SPI_clearRxFIFO () 替换为 SPI_后 复位 RxFIFO()、则 SPI READ 函数起作用。 我通过将 Rx 数组或 regVal 数据与 MISO 线上的数据进行比较来验证结果(使用 Saleae 逻辑分析仪捕获)。 现在、我可以获得整个 16 位回读数据。

     对于 4 种情况 (0x0488、0x005B、0x0164、0x2518)、SPI Rx 仿真寄存器的内容如下:

    SPIRXEMU      0x0088/0x005B/0x0064/0x0018       0x00006106@数据
        ERXBn      0x0088/0x005B/0x0064/0x0018

    下面是一个有关 SPI Rx 仿真寄存器的问题:为什么它只显示最低 8 位、而不是 16 位、或者不显示一乘一 8 位?

    此致、

    LIN

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

    您好 Lin、

    我将接管这一主题的支持。 让我熟悉您的设置和问题、然后返回给您。

    此致、

    Delaney

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

    您好 Lin、

    听起来您的原始问题已根据您的最新回答得到解决。  对于您关于仿真寄存器的问题:您能否验证在寄存器查看器中是否打开了“Continuous Refresh“? 我认为所有 16 位都应该显示在寄存器中。 另一个要尝试的方法是调用  spi_readRxEmulationBuffer () 函数来读取仿真缓冲区 — 这是否返回完整的 16 位值?

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的跟进。

    是的、已发布的问题已解决。 唯一的问题是寄存器内容与回读值不匹配。 我尝试了这种方法,但仍然不匹配。

    但是、由于主要问题已得到解决。 左侧是次要的。 因此、如果您需要、我们可以关闭这个外壳。

    此致、

    LIN

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

    您好 Lin、

    然后、我将关闭线程、在我这边进行研究、看看这个外设的 CCS 寄存器映射是否存在任何问题、我们可能需要在即将发布的 CCS 版本中解决这些问题。

    此致、

    Delaney

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

    谢谢、Delaney。