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的定制板之间实现 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