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.

[参考译文] CC3220SF-LAUNCHXL:尽管在早期函数中工作、但 SPI 传输仍然失败

Guru**** 2589280 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/891878/cc3220sf-launchxl-spi-transfer-failing-despite-working-in-an-earlier-function

器件型号:CC3220SF-LAUNCHXL

您好!

连续运行多个 SPI 传输时遇到问题、第一个 SPI 传输成功开始、但当我运行下一个传输时失败。 我的 SPI 模块以回调模式运行、提供问题的函数如下所示:

SPI_Transaction 事务;
int i;

对于(I = 0;I < 5;I++)
{
rxBuffer1[i]= 0x00;
TxBuffer1[i]= 0x00;

rxBuffer2[i]= 0x00;
TxBuffer2[i]= 0x00;

rxBuffer3[i]= 0x00;
txBuffer3[i]= 0x00;
}


/////////////////////////////////// 获取编码器1计数////////////
txBuffer1[0]= request_count;

transaction.count = 5;
transaction.txBuf =(void *) txBuffer1;
transaction.rxBuf =(void *) rxBuffer1;
transaction.arg =(void *)'a';

GPIO_WRITE (编码器_S1、0);
bool transferOK = SPI_transfer (encoderSPI、事务);

如果(转让)
{
GPIO_WRITE (编码器_S1、1);
}

////////////////////////////////////////////// 获取编码器2计数//////////////////////////////////////////////////////////////////
txBuffer2[0]= request_count;

transaction.count = 5;
transaction.txBuf =(void *) txBuffer2;
transaction.rxBuf =(void *) rxBuffer2;
transaction.arg =(void *)"b";

GPIO_WRITE (ENCODER_S2、0);
transferOK = SPI_transfer (编码 SPI、事务);

如果(转让)
{
GPIO_WRITE (ENCODER_S2、1);
}

////////////////////////////////////////////// 获取编码器3计数////////////////////////////////////////////////////////////////
txBuffer3[0]= request_count;

transaction.count = 5;
transaction.txBuf =(void *) txBuffer3;
transaction.rxBuf =(void *) rxBuffer3;
transaction.arg =(void *)'c';

GPIO_WRITE (ENCODER_S3、0);
transferOK = SPI_transfer (编码 SPI、事务);

如果(转让)
{
GPIO_write (Encoder_S3、1);
}

如果您需要更多信息、请告诉我、我们将非常感谢您的帮助!

 

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

    您好、Quinton、

    根据 API 文档、 SPI_Transaction 结构必须保持不变、直到传输完成。 是否可以尝试为每个并发传输创建新事务? 您可以使用回调来确定传输何时完成。

    当驱动程序尝试将 transaction.arg 用作回调函数时,可能会遇到错误。 您是否正在使用已定义的函数?: http://dev.ti.com/tirex/explore/node?node=AIQLpsWAlAhNbRw7tZeAww__fc2e6sr__LATEST

    此致、

    Sarah

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

    您好 Sarah、

    感谢你的答复。 我已经尝试使用精算交易、但传输仍然失败我也使用自己的预定义回调函数。

    在程序的早期、我使用一个事务结构和三个事务、没有任何问题。

    最棒的

    金顿

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

    您好、Quinton、

    您的回调函数是如何实现的?

    此致、

    Sarah