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.

[参考译文] DRV8908-Q1:SPI Tx 和 RX 不工作

Guru**** 2766765 points

Other Parts Discussed in Thread: MSPM0C1105, DRV8908-Q1

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1609229/drv8908-q1-spi-tx-and-rx-is-not-working

器件型号: DRV8908-Q1
Thread 中讨论的其他器件: MSPM0C1105

您好团队:

我将 MSPM0C1105 微控制器与 DRV8908 用于 SPI 通信。 我正在尝试实现环回测试、但无法正常工作。 下面是示例代码。


Void SpiLoopBacktesting(Void)
  uint16 SPI_TRANSMIT_DATA = 0x01;
  uint16 spi_receive_data;
 
  /*检查 SPI TX FIFO(发送 FIFO 缓冲器)是否为空、是否准备好接收新数据*/
  IF (DL_SPI_isTXFIFOEmpty (SPI_0_INST))
  {     
    /*等待 TX FIFO 为空*/
    while(!(DL_SPI_isTXFIFOEmpty (SPI_0_INST)));
    
    /*芯片选择低*/
    DL_GPIO_clearPins (GPIO_GRP_0_PORT、GPIO_SPI_0_CS0_PIN);

    /*将数据发送到从器件*/
    DL_SPI_transmitData16 (SPI_0_INST、SPI_TRANSMIT_DATA);
    
    /*假设 32MHz CPU_CLK */、这会导致大约 10s 的延迟
    delay_cycles (320000000);
    
    /*接收到主设备的数据*/
    SPI_RECEIVE_DATA = DL_SPI_receiveData16 (SPI_0_INST);
    
    /*芯片选择高*/
    DL_GPIO_setPins (GPIO_GRP_0_PORT、GPIO_SPI_0_CS0_PIN);

    IF (SPI_RECEIVE_DATA == 0x01)
    {
      printf(“SPI 环回传递\n“);
    }
    暴露
    {
      printf(“SPI 环回失败\n“);
    }
    
  }
  暴露
  {
    /*不执行任何操作*/
  }
}
 
或者、请帮我了解如何读取器件 ID  
image.png
请告诉我、是否需要注意任何引脚配置

 

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

    请任何人就此提供帮助

    我正在读取 IC_ID (0x07)、但它不起作用

    使用 DRV8908 的 Im


    包含“ti_msp_dl_config.h"</s>“

    uint16_t SPI_TRANSMIT_DATA = 0x4700//0x0047
    uint16_t SPI_RECEIVE_DATA;
    uint8_t registerValue;
    内部 main (void)
      SYSCFG_DL_init ();
      
      while (1)
      {
        /*****设备 ID */
        /*检查 SPI TX FIFO(发送 FIFO 缓冲器)是否为空、是否准备好接收新数据*/
        IF (DL_SPI_isTXFIFOEmpty (SPI_0_INST))
        {  
          //DL_GPIO_clearPins (GPIOA、DL_GPIO_PIN_11);

          /*等待 TX FIFO 为空*/
          while(!(DL_SPI_isTXFIFOEmpty (SPI_0_INST)));
          
          /*将数据发送到从器件*/
          DL_SPI_transmitData16 (SPI_0_INST、SPI_TRANSMIT_DATA);
        
          /*等待 SPI 外设不再繁忙*/
          while (DL_SPI_isBusy (SPI_0_INST));
        
          /*接收到主设备的数据*/
          SPI_RECEIVE_DATA = DL_SPI_receiveData16 (SPI_0_INST);

          //DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_11);
          
          registerValue =(uint8_t)(SPI_RECEIVE_DATA & 0xFF);

        }
        暴露
        {
          /*不执行任何操作*/
        }
      }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Santhosh、

    根据我对代码的看法、虽然负责 MSPM0 的工程师能够提供更好的分析、但从我所见内容来看、没有任何不正确的地方。

    1. 首先、您能否提供 SPI 信号、SDO、SDI、SCLK 和 nSCS 的捕捉? 我想检查从 MCU 和 DRV89xx-Q1 发送的 SPI 信息是否正确。
    2. 另外、为了确认一下、您要与 DRV8908-Q1 器件一起进行此测试的 DRV89xx-Q1 器件是否正确?

    此致、

    Joshua

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

    您好 Joshua、  

    非常感谢您的答复。

    现在 SPI 通信正常、但我在读取寄存器时始终收到 0xE0000

    E'表示 OT(过热)。 为什么我收到过热故障、以及根本原因是什么?“

     

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

    你好、Santhosh、

    是否驱动负载、如果不驱动、则何时报告 OT?

    您是否还可以读取地址 0x00 以检查位 6 或位 5 是否为高电平? 如果两者都不为高电平、您能否提供 SlCK、SDI 和 SDO 信号的捕获?

    此致、

    Joshua