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.

[参考译文] LAUNCHXL-F280039C:当 F280039C 上的从器件断开连接时、不会触发 SPI 超时。

Guru**** 2443910 points
Other Parts Discussed in Thread: TMS320F280039C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1520048/launchxl-f280039c-spi-timeout-not-triggering-when-slave-is-disconnected-on-f280039c

器件型号:LAUNCHXL-F280039C
主题:TMS320F280039C 中讨论的其他器件

工具/软件:

我负责 A 之间的 SPI 通信 TMS320F280039C (配置为 SPI 主器件)和 A PIC33EP128GP504 (SPI 从器件)。 我正在使用 定制 SPI 驱动器 TI 方面的实施 轮询和超时逻辑 以检测通信故障。

我将使用以下函数进行带有错误处理的 SPI 发送/接收:   

SPI_Status SPI_DATA.Status Transfer_With (uint8_t txDatauint8_t *rxData、uint16_t TIMEOUT_us)
  uint16_t TIMEOUT = timeout_us;
  SPI_Status = SPI_OK;

  //将 CS 置为有效
  GPIO_writePin (50);
  DEVICE_DELAY_US (2);

  //等待 TX 缓冲区未满
  
  while (((HWREGH (mySPI0_BASE + SPI_O_STS)& SPI_STS_BUFFULL_FLAG)!= 0U)
    如果 (--timeout =0){
      GPIO_writePin (51);
      返回 SPI_ERROR_TIMEOUT;
    }
    DEVICE_DELAY_US (1);
  }

  //写入数据
  HWREGH (mySPI0_BASE + SPI_O_TXBUF)= txData;

  //等待 RX 数据可用
  TIMEOUT = TIMEOUT_us;
  
  while ((HWREGH (mySPI0_BASE + SPI_O_STS)& SPI_STS_INT_FLAG)= 0U)
    如果 (--timeout =0){
      GPIO_writePin (51);
      返回 SPI_ERROR_TIMEOUT;
    }
    DEVICE_DELAY_US (1);
  }
  //读取接收的数据
  *rxData =(uint8_t)(HWREGH (mySPI0_BASE + SPI_O_RXBUF)& 0xFF);
  /*
  //释放 CS
  GPIO_writePin (51);
  返回 SPI_OK;
}

然而,即使我 断开电源 断开从设备 未触发超时 SPI_STS_INT_FLAG获取设置数据并 0xFF0x00 返回虚拟数据、如或所示。   

  • F28003x 上的 SPI 模块是否有这种预期行为?

  • 是否有方法 可靠地检测无从器件响应或超时  ?

  • 有任何问题吗 建议的战略 在这种 SPI 主从设置中实现错误检测或诊断?

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

    您好、Antony、

    SPI 硬件无法检测目标是否存在、并且没有内置超时功能。 控制器始终生成时钟、POCI 将浮动在高电平/低电平、因此您看到的是预期的。

    SPI 协议不提供检测非响应 SPI 外设的机制、因为 SPI 是一种简单的协议、实际上并不必须实现任何错误检查/总线超时机制、通常只需要一个简单的发送/接收数据和芯片选择处理逻辑(内置硬件或使用 GPIO 的手动)。 例如、您可以在读取并返回传递函数中的数据之前、只包含 while 语句来等待传输完成。 如果您确实需要、可以简化上述过程、以检查 INT 标志和 SPI STS 何时设置为 0。  随时也可以在 E2E 上查看其他用户所做的操作。  

    此致、

    Aishwarya

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

    安东尼

    查看问题是否已解决和/或您有任何其他问题。

    此致、

    Aishwarya