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.

[参考译文] RTOS/MSP430F5529:SPI 从模式:SPI_TRANSFERT()功能问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/693228/rtos-msp430f5529-spi-slave-mode-the-spi_transfer-funtion-issue

器件型号:MSP430F5529

工具/软件:TI-RTOS

你(们)好  

我的版本:

ccsv7.4

tidriver_msp43x_2_20_00_08

BIOS_6_46_00_23

我仍在使用 EXP_MSP430F5529LP 开发板来验证 SPI 通信 ,最近 ,我卡在 SPI_TRANSF() 函数中。  在 TI-RTOS 下配置 SPI 从模式。

目标:SPI 主器件发送一个字节、SPI 从器件 判断该字节并继续接收或发送数据。

这是我的配置

/*创建 I2C 以供使用*/
SPI_PARAMS_INIT (&spiB1_SLAVE_PARAMS);
spiB1_SLAVE_PARAMS.transferMode = SPI_MODE_BLOCKING;
spiB1_SLAVE_PARAMS.MODE = SPI_SLAVE;
spiB1_slave_Params.dataSize = 8;

spib1_slave = SPI_open (Board_SPIB1_slave、&spib1_slave_Params);
if (spiB1_slave = NULL){
System_abort ("初始化 SPI B1\n"时出错);
}否则{
System_printf ("SPI B1已初始化!\n");
}
system_flush(); 


问题  我使用以下两段代码进行数据接收验证

//code 1
//一次性截取3个字节
SPI_Transaction spiTransaction;

pisaction.txBuf = NULL;
spiTransaction.rxBuf = rxBuf;
spiTransaction.count = 3;

if (spi_transfer (spib1_slave、&spiTransaction)= NULL){
System_printf ("SPIB1_SendData SPI Bus fault\n");
System_flush ();
}
System_printf ("%s\b</bept





);系统代码/r1begbytes 1 / r/ r/ begb
SPI_Transaction spiTransaction;

printTransaction.txBuf = NULL;
spiTransaction.rxBuf = rxBuf;
spiTransaction.count = 1;

if (spi_transfer (spib1_slave、&spiTransaction)= NULL){
System_printf ("SPIB1_SendData SPI Bus fault\n");
System_flush ();










}//继续保留2字节2 bytes (spiBufault = 1);spiBufault

= 1 (spi_b1n1);spiBufault = 1);spi_bid_bn1

结果  

当我使用 SPI 主器件一次发送三个字节时、代码1 接收数据正常、 buf  代码1 将在 第二 个 SPI_transfer ()中被阻断;

当我 使用 SPI 主器件 发送 三个字节 时、每个字节相隔一秒、 代码1 2 接收数据均正常。

为什么会出现此问题?

 祝你一切顺利

XC.mo

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

    当我使用 SPI 主器件一次发送三个字节时、代码1接收数据正常、buf 代码2将在第二个 SPI_transfer ()中被阻断;

    当我使用 SPI 主器件发送三个字节时、每个字节相隔一秒、代码1 2接收数据均正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题  2. 当我使用 SPI 主器件  一次发送两个字节,而从器件模块使用 代码3 时,为什么 接收 数据正常?  

    当我使用 SPI 主器件  时,一次发送三个字节,而从器件模块使用 代码4 ,为什么  在 第二 个 SPI_TRANSLT()中有块?

    //代码3
    //截取两个字节
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf;
    spiTransaction.count = 1;
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_Receive Data SPI Bus FAULT\n");
    system_flush();
    }
    
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf+1;
    spiTransaction.count = 1;
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_SendData SPI 总线故障\n");
    system_flush();
    }
    
    
    //代码4.
    //截取三个字节
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf;
    spiTransaction.count = 1;
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_Receive Data SPI Bus FAULT\n");
    system_flush();
    }
    
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf+1;
    spiTransaction.count = 1;
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_SendData SPI 总线故障\n");
    system_flush();
    }
    
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf+2;
    spiTransaction.count = 1;
    //注意:将在此处阻止
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_SendData SPI 总线故障\n");
    system_flush();
    }
    

     谢谢你

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

    问题3: 当我使用 SPI 主器件  一次发送三个字节,而从器件模块使用 代码5 时,为什么 接收 数据正常?  

    //代码5.
    //第一个截取2字节
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf;
    spiTransaction.count = 2;//
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_Receive Data SPI Bus FAULT\n");
    system_flush();
    }
    
    spiTransaction.txBuf =空;
    spiTransaction.rxBuf = rxBuf+2;
    spiTransaction.count = 1;
    
    if (SPI_transfer (SPI_Handle、&spiTransaction)= NULL){
    System_printf ("SPIB1_SendData SPI 总线故障\n");
    system_flush();
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    XC.mo、
    我在 RTOS 专家中遇到了问题、但他们正在休假、因此他们的回答至少会延迟到29点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好、 Camer

    非常感谢您的帮助, 尽管我向 SPI 主模块添加了一个延迟,以避免 SPI 从设备块 SPI_TRANSLT()函数出现问题,但我想知道原因。  

    此致

    XC.mo

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

    您的帖子中似乎没有足够的详细信息来理解您的问题。  您能否包含说明问题的测试用例?   

    谢谢、
    卡尔-

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    XC.mo、
    您能回答 Karl 的问题吗? 否则,我将需要关闭这个帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于不活动而关闭。