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.

[参考译文] MIBSPI-AM273X:MCU-PLUS-SDK MOSI 数据不正确。

Guru**** 2553390 points
Other Parts Discussed in Thread: LMX2595

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1539378/mcu-plus-sdk-am273x-mibspi-mosi-data-is-not-correct

部件号:AM273X - MCU-PLUS-SDK
主题中讨论的其他器件:LMX2595

工具/软件:

您好支持团队:

我现在使用了 MCU+ SDK 示例工程和 AM273x EVM 来测试 MIBSPI 设置。 我选择 MSS_SPIB 作为标准 SPI、并通过设置 S2 将 SPI 信号切换到 EVM 的 J16。

现在我可以在 J16 上获取 CLK、CS0 和 MOSI 信号。 但是、MOSI 数据(Saleae Logic Pro 8 测量的 3 个字节)与 SPI 事务代码中的输入数据不匹配。

请帮帮我。

如果您需要我的 example.syscfg 和修改后的 mibspi_loopback.c 文件、我可以在此处分享。

期待您的答复和建议。

此致、

LIN

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

    您好 Lin、

    您能否共享 example.syscfg、linker.cmd 和 修改后的 mibspi_loopback.c?

    您还能分享您的 Saleae 捕获吗?

    此致、

    Ming

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

    尊敬的 Ming:

    还有一个观察结果要与您分享。 在 Saleae Logic 2 上、总 24 位 CLK 不是完全平滑或连续的。 第 8 个和第 9 个、第 16 个和第 17 个 CLK 之间存在位延迟或间隙。 或者每个字节之间存在延迟或间隙。 这可能会导致 MOSI 数据移位。 现在我使用 3 引脚模式 SPI。 是否应该更改为 4 引脚模式? 在该模式更改后、我可以获得平滑或连续的 CLK 吗?

    谢谢、此致、

    LIN

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

    您好 Lin、

    您能共享您的 Saleae 捕获文件吗?

    您的 Saleae Pro 8 数据采样率是多少? 请尝试 500ms /s 以排除采样率可能导致的问题。

    此致、

    Ming

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

    尊敬的 Ming:

    为了供参考、我将使用 Saleae Logic 2.4.29 软件。 Device Settings 下的我当前数据采样率为 125MS/s。

    以下是我的 Saleae 捕获文件、其中输入 0xAABBCC 和 0x010203 的速度为 125MS/s、输入为 500MS/s 使用 500m/s 采样率、CS0 信号看起来不正确、MOSI 数据无法解码。

    我尝试上传捕获文件、但失败。 在这里我分享我的谷歌驱动链接希望你能得到它. 如果没有、请告诉我。   

    https://drive.google.com/drive/folders/1RzEiPagliljvpkyLmSWQ5hYlT6CfKJRy

    希望以上信息有助于您的分析。

    此致、

    LIN

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

    尊敬的 Ming:

    我将 SPI 结果导出到 TXT 文件。 您能查看他们是否有帮助吗?

    e2e.ti.com/.../SaleaeSPIResults_5F00_010203_5F00_125Ms.txte2e.ti.com/.../SaleaeSPIResults_5F00_010203_5F00_500Ms.txt

    谢谢、此致、

    LIN

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

    尊敬的 Ming:

    我尝试将.Sal 文件重命名为.txt 以在此处上传。 当你得到它时,你可以改回 Sal。

    e2e.ti.com/.../Session01_5F00_AABBCC.txte2e.ti.com/.../Session02_5F00_010203.txte2e.ti.com/.../Session04_5F00_010203_5F00_500Ms.txt

    希望他们能提供帮助。

    此致、

    LIN

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

    尊敬的 Ming:

    我将 SPI 设置从 3 引脚模式更改为 4 引脚模式(无 GPIO)。 重复我的测试得到了以下结果:

    当输入 0x010203 时、捕获 Saleae 并解码为 0x008101。

    当输入 0xAABBCC 时、捕获 Saleae 并解码为 0x555DE6。 数据不正确、只发生一位移位、但结果一致或稳定、与数据更改的 3 引脚模式不同。

    另一个观察结果是 CS 信号延长了一个周期、而不是 24 位、最终会导致一些额外的 CLK 位、但这不会影响 MOSI 解码结果。

    以下是文件和屏幕截图。

    e2e.ti.com/.../Session05_5F00_010203_5F00_4pin_5F00_500Ms.txte2e.ti.com/.../Session06_5F00_AABBCC_5F00_4pin_5F00_500Ms.txt

    如果您需要我方面的更多信息、请告诉我。

    此致、

    LIN

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

    尊敬的 Ming:

    对于数据结果、看起来当 CLK 的第一个上升沿出现 ( 0x010203 => 0x008101 和 0xAABBCC => 0x555DE6) 时、MOSI 数据未就绪、 只有一位延迟。 是否有任何提示或建议的解决方案?

    此致、

    LIN

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

    尊敬的 Ming:

    还有一个测试结果要与您分享。

    我通过将模式从 0 更改为 1、CPOL = 0、CPHA = 1 来验证一位移位(如屏幕截图中所示)、并获取正确的解码数据。 我的意思是  0x010203 => 0x010203 且 0xAABBCC => 0xAABBCC 。

    但是、我们的外设 SPI 器件(例如 LMX2595)都处于模式 0 、CPOL = 0、CPHA = 0。 我们如何修改 AM273x 侧的控制器 SPI 以满足要求?

    此致、

    LIN

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

    尊敬的 Ming:

    很抱歉今天发送了太多的消息、因为我被这个 SPI 问题阻止、所以感到压力、想要赶上一个时间。

    当我发出最后一封邮件时、我应该提出某种解决方案。 然而,我有点急事,不是很好的状况。 因此、它被延迟以获得结果。 主要结论如下。 AM273x EVM 与 Saleae 逻辑 2 之间的 SPI 模式不匹配。 关系如下所示:

    AM273x EVM                     Saleae Logic 2.
    模式 0 (POL0 PHA0)              模式 1 (CPOL=0 CPHA=1)
    模式 1 (POL0 PHA1)              模式 0 (CPOL=0 CPHA=0)
    模式 2 (POL1 PHA0)              模式 3 (CPOL=1 CPHA=1)
    模式 3 (POL1 PHA1)              模式 2 (CPOL=1 CPHA=0)

    您能否仔细检查一下您的观点?

    我是否在设置和代码中做了任何错误? 还是 TI MCU+ SDK 中的错误?

    期待您的确认。

    此致、

    LIN

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

    您好 Lin、

    我还确认了问题与 SPI 模式 0 有关。 这两个校准周期。 它运行完美。

    我知道 AM273x EVM SPI 模式与您的描述一致。 我还相信 AM273x EVM 的作用是正确的。 我不知道 Saleae Logic 2 在做什么。

    此致、

    Ming

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

    尊敬的 Ming:

    感谢您的确认。

    请问您能否在 Saleae Logic 软件中获得并打开我在之前的消息中发送的 Saleae 捕获文件? 我想确保将来我们能够以这种方式交换/分享结果和状态。

    此外、我对您的确认 SPI 信号捕获有疑问。 我在 SPI 使能/CS 信号中看到两个脉冲、而 SPI CLK 信号在字节之间也有一些延迟。 这些是否会成为 SPI 通信的潜在问题? 或者它们可以接受。

      

    谢谢、此致、

    LIN

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

    您好 Lin、

    是的。 我可以打开您的*。Sal 文件。

    可以在两个字节之间设置 CLK 暂停。

    此致、

    Ming

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

    尊敬的 Ming:

    很高兴知道这一点。 稍后、我将以这种方式共享我的 Saleae 捕获文件、

    您确认 CLK 暂停可以让我对项目开发更有信心。

    顺便说一下、我有 60 引脚 ZX100QTH 适配器。 我想检查 AM273x EVM 的 J7 上的 MSS_SPIB 信号。 您能否确保、一旦 S2 切换到 DBG_SPI、哪些引脚我可以从 J7mof EVM 获取 CLK、CS、MOSI 和 MISO 信号?

    感谢您的持续支持。

    此致、

    LIN

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

    您好 Lin、

    是的、将  S2 开关设置为 DBG_SPI、您应该在 EVM 的引脚 9 处获得 CLK、在引脚 7 处获得 CS0、在引脚 11 处获得 MOSI、在 EVM 的 J7 的引脚 12 处获得 MISO。

    此致、

    Ming

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

    尊敬的 Ming:

    感谢您的信息。 我将使用适配器对它们进行测试。

    此致、

    LIN

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

    尊敬的 Ming:

    要获得 SPI MISO 信号、在编码时应该注意什么? 当我尝试从从从从器件/外设器件读回时、MISO 上的数据没有意义。

    感谢您的帮助。

    此致、

    LIN

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

    您好 Lin、

    由于 AM273x 是 SPI 主器件、因此在从 SPI 从器件读取时、它必须为 MISO 提供时钟。 为了提供 SPI 时钟、AM273x 必须发送数据、即使要发送的数据也是垃圾数据。

    /*启动传输*/
    spiTransaction.count = APP_MIBSPI_MSGSIZE;
    spiTransaction.txBuf =(void *) gMibspiTxBuffer;
    spiTransaction.rxBuf =(void *) gMibspiRxBuffer;
    spiTransaction.peripheralIndex = 0U;
    spiTransaction.arg = NULL;

    transferOK = MIBSPI_TRANSFER (gMibspiHandle[CONFIG_MIBSPI0]、&spiTransaction);

    最好的餐厅

    Ming  

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

    尊敬的 Ming:

    我确实需要您的帮助来读回 LMX2595 寄存器内容。 我知道您告诉我您不熟悉 LMX2595。 于是我又创建了一个帖子、向大家寻求有关 LMX2595 芯片组配置的帮助。 但是、当我告诉对方我们要使用 AM273x EVM 来控制 LMX2595 芯片组/与该芯片组通信时、支持人员让我回到了 AM273x 专家的身边。 因此、我希望能得到您的帮助。 目前唯一的问题是寄存器读回。  

    我按照数据表根据我们的原始 4 引脚 MSS_SPIB 设置创建了读回代码。 我在这里共享代码、您能帮助我检查是否有问题或我遗漏了任何内容吗?

    void sendLmx2595Frame (uint8_t regAddr、uint16_t regData)

    uint8_t txBuf[3];
    uint8_t rxBuf[3]={0};
    MIBSPI_Transaction spiTransaction;
    int32_t transferOK;

    txBuf[0]= regAddr;
    txBuf[1]=(regData >> 8)& 0xFF;
    txBuf[2]= regData 和 0xFF;

    spiTransaction.count = 3;
    spiTransaction.txBuf =(void *) txBuf;
    spiTransaction.rxBuf =(void *) rxBuf;
     spiTransaction.peripheralIndex = 0U;
    spiTransaction.arg = NULL;


    transferOK = MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);

    if ((transferOK!= SystemP_Success)||(spiTransaction.status!= MIBSPI_TRANSFER_COMPLETED))

    DebugP_LOG(“LMX2595 SPI 传输失败!\r\n“);
    DebugP_ASSERT (FALSE);
    }
    }

    void lmx2595_READ_REGISTER (uint8_t regAddr)

    Uint8_t txBuf[3]={0x80 | regAddr、0x00、0x00};//设置 MSB 以进行读取
    uint8_t rxBuf[3]={ 0 };
    MIBSPI_Transaction spiTransaction ={
    .count = 3、
    .txBuf =(void *) txBuf、
    .rxBuf =(void *) rxBuf、
    .peripheralIndex = 0U、
    .arg = NULL
    };

    int32_t transferOK = MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);
    if ((transferOK == SystemP_Success)&&(spiTransaction.status == MIBSPI_TRANSFER_COMPLETE))

    uint32_t value =(rxBuf[1]<< 8)| rxBuf[2];
    DebugP_log(“Read R%u = 0x%04X\r\n“、regAddr、value);
    }
    暴露

    DebugP_LOG(“SPI 读取失败! reg 0x%02x\r\n“、regAddr);
    }
    }

    在 mibspi_loopback_main () 中  

    sendLmx2595Frame (0x00、0x2518);//设置 MUXOUT_SEL = 0 以回读 R0-D2
    ClockP_USleep (5000);
    LMx2595_READ_REGISTER (110);    //根据数据表、只能读回 R110、R111、R112  

    感谢您的时间和帮助。

    此致、

    LIN

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

    您好 Lin、

    同样、我不熟悉  LMX2595、因此我不知道它用于读取其寄存器内容的 SPI 协议。

    我完成了您的代码。 我在  lmx2595_read_register () 中看到了一个潜在的问题:

    您仅发送了 SPI 3 字节命令:

    { 0x80 | regAddr、0x00、0x00 };//将 MSB 设置为读取

    LMX2595 在该 SPI 事务结束时获取命令、因此无法返回您在同一事务中请求的数据。 芯片需要时间来准备您请求的数据。 它将能够发送您在下一个 SPI 事务中请求的数据。 您将需要执行另一项操作  

    MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);

    在延迟一段时间后(以便 LMX2595 准备所请求的数据)、TX 缓冲器填充 0、RX 缓冲器准备好接收所请求的数据。 AM273x 将为 LMX2595(SPI 从器件)提供 SPI 时钟、以将数据发送到 AM273x(到 RX 缓冲器)

    上述分析完全基于 SPI 工作原理的一般原则。 请与 LMX2595 人员核实详细信息。

    此致、

    Ming  

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

    尊敬的 Ming:

    非常感谢您花时间检查我的代码并解释 SPI 读取原理。

    我将尝试第二次读取或写入、看看是否可以获得正确的数据。 完成后、我会更新您。

    此致、

    LIN

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

    尊敬的 Ming:

    通过运行  MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);第二次运行或运行虚拟写入命令、读回数据看起来仍然不正确。 我正在尝试其他一些方法。

    为了方便起见、在上述测试中、我不断将 AM273x SPI 设置为模式 1 而不是模式 0、以便与 LMX2595 进行通信(它需要模式 0)。 如果我将 AM273x SPI 模式更改为 0、情况会更糟。

    如果您有任何其他建议、请告诉我。

    谢谢、此致、

    LIN

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

    您好 Lin、

    您需要与 LMX2595 人交谈、以获取 SPI 读取协议的详细信息、包括发送读取命令和从 LMX2595 开始读取数据之间所需的延迟。

    您可以与 LMX2595 共享数据。

    此致、

    Ming

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

    尊敬的 Ming:

    感谢您的建议。 我会这样做的。

    此致、

    LIN

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

    尊敬的 Ming:

    我想我得到了你的超级支持,在这篇文章中的“MIBSPI MOSI 数据不正确“问题. 我将选中此复选框以解决我的问题并关闭此帖子。 我希望我将在另一篇文章中继续与您讨论 AD7389-4 ADC 配置和数据采集。  

    感谢您的帮助和支持。

    此致、

    LIN