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.

[参考译文] AM5718-HIREL:可变尺寸 SPI 事务

Guru**** 657500 points
Other Parts Discussed in Thread: AM5718, AM5718-HIREL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1098068/am5718-hirel-variable-size-spi-transaction

器件型号:AM5718-HIREL
主题中讨论的其他器件:AM5718

你好。 我尝试在两个基于 AM5718的定制板之间实现 SPI 通信、其中一个是主板(Linux)、另一个是从板(TI-RTOS)。 从器件能够接收来自主器件的帧、以实现 SPI 事务的初始大小(tration.count)。 但是、当我在运行时增加事务的大小时、从站不会接收所有数据、而是小于事务计数。 更令人惊讶的是、当我以更大的大小重新执行此事务时、从器件再次开始接收所有数据。 这样做的原因可能是什么? 请提供任何帮助。

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

    您好!

    [引用 userid="462663" URL"~/support/processors/group/processors/f/processors-forum/1098068/am5718-HIREL 变量大小-SPI-transaction"]但是,当我在运行时增大事务的大小时,从站不会接收所有数据,而是接收事务计数。[/QUERPLET]

    您能否分享一下您在运行时如何增加交易计数? 您正在为此进行哪些更改?
    此外、请说明您在增加交易时看到了什么行为? 无论您在运行时增加了多少事务、还是发送的数据量有所不同、但与事务计数不匹配、它是否总是发送相同数量的数据?

    此致、
    Parth

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

    Parth、

    我在程序开始时打开从器件 SPI 实例的句柄。 然后、我创建一个 SPI_TRANSACTION 变量、其中'count'首先设置为给定大小(例如200)。 然后使用'SPI_transfer' API 执行事务、该 API 按预期工作。 对于第二次传输、使用相同的事务变量、但现在将"count"设置为更大的值(例如500)。 当这个传输被执行时、从器件接收到一定数量的数据、这些数据与传输的大小不匹配。 接收到的数据量介于之前和新设置的"计数"之间、并且数量不是固定的。 当以这个新的大小重新执行传输时、从器件接收所有数据。

    此致、

    Jay  

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

    您好、Jay、

    您能否确认在更改"计数"后、主器件正在发送所需数量的数据。 这将帮助我们隔离这一问题、如果问题是在从器件侧。

    [引用 userid="462663" URL"~/support/processors-group/processors/f/processors-forum/1098068/am5718-HIREL 变量大小-SPI-transaction/4068391#4068391"]

    当以这个新的大小重新执行传输时、从器件接收所有数据。

    [/报价]

    此外、您能否详细介绍一下这一点吗? 重新执行意味着什么?

    此致、
    Parth

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

    Parth、

    我已确认主器件在"count"被更改后发送所需数量的数据。

    通过重新执行事务、我意味着再次调用'SPI_transfer' API。 第一个'SPI_transfer'调用无法获取主器件在新的'count'上发送的正确数据、但再次调用'SPI_transfer'会获得正确的数据。

    此致、

    Jay

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

    您好、Jay、

    对拖延答复表示歉意。 此问题是否仍然存在? 如果是、您能否突出显示问题的当前状态?
    此外、您能否分享一个我们可以在结尾处尝试的示例代码并重复此问题?

    此致、
    Parth

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

    您好 Parth、

    是的、问题仍然存在。 当前状态仍与我之前描述的相同、在这种状态下、当"count"发生更改时、"SPI_transfer"无法正常工作。 附上下面的示例代码。

        bool transferCompleted = false;
        uint32_t packetCount = 0;
        SPI_Params gSpiParams;
        gSpiParams.transferMode = SPI_MODE_BLOCKING;
        gSpiParams.bitRate = 5000000;
        gSpiParams.dataSize = 8
        gSpiParams.frameFormat = SPI_POL0_PHA0;
        gSpiParams.mode = SPI_SLAVE;
    
        gSpiHandle = SPI_open(1, &gSpiParams);
        while(transferCompleted == false)
        {
            //First transaction of size 500
            SPI_Transaction transaction;
            transaction.txBuf = txData;
            transaction.rxBuf = rxData;
            transaction.count = 500;
            SPI_transfer(gSpiHandle, transaction); 
            packetCount++;
            /*Do some processing on received data and send an acknowledgement*/
            transaction.txBuf = txData;
            transaction.rxBuf = rxData;
            transaction.count = 20;
            SPI_transfer(gSpiHandle, transaction); 
    
            UART_printf("\nAck sent\n");
            memset(txData, 0, sizeof(txData));
            memset(rxData, 0, sizeof(rxData));
            
            if (packetCount == 1000)
            {
                transferCompleted = true;
            }
    
        }

    此致、

    Jay

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

    您好、Jay、

    [~ userid="462663" URL"/support/processors-group/processors/f/processors-forum/1098068/am5718-HIREL 变量大小-SPI-transaction">但是、当我在运行时增大事务的大小时、从站不会接收所有数据、而是接收事务计数。 更令人惊讶的是、当我以更大的大小重新执行此事务时、从器件再次开始接收所有数据。

    在增大数据大小后、您要传输多少数据? 您是否可以尝试将传输大小保持在128以下、并查看它在首次运行时是否正常?

    此致、
    Parth