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.

[参考译文] DRV8462:DRV8462 SPI 菊花链-无法正确解码响应

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1348753/drv8462-drv8462-spi-daisy-chain---unable-to-decode-responses-properly

器件型号:DRV8462

您好!

有人能告诉我两个设备(以菊花链形式连接)的响应数据包是什么样子的吗?  尽可能帮助我解决为什么在开始时接收到的数据包不同、因为认为状态回复应该以11开头、而82和 A0不以11开头

我知道从 MCU 到第一个 DRV8462的 SDI 会像 HDR1 HDR2 A2 A1 D2 D1一样、但接下来的两个数据包看起来是什么样子的?

我知道对于三个器件、它们是这样的

// SDO1/SDI   S1 HDR1 HDR2 A2 A2 R1 D2 *
// SDO2 / SDI3  S2 S1 HDR1 HDR2 A3 R2 R1 D3  
// SDO3         S3 S2 S1 HDR1 HDR2 R3 R2 R1 *
我有的代码传输了两个标头、即 HDR1 0x82和 HDR2 0xA0  、它们已保存到 dataMSB2 dataMSB1 -如何改用 STATUS 字节?
 
发送的数据包 HDR1 HDR2 A2 A1 D2 D1  

此致

菲利普·博特马

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //该 SPI 函数用于编写设置的器件配置和运行参数。
    uint16_t SPI_writeRegister (uint8_t 地址uint16_t 数据)
     uint16_t reg_value = 0

     REG_VALUE |=((address << SPI_ADDRESS_POS)和 SPI_ADDRESS_MASK) //添加寄存器地址值
     REG_VALUE |=((DATA << SPI_DATA_POS)和 SPI_DATA_MASK)     //添加数据值

     hspi->beginTransaction (SPISettings (spiClk、MSBFIRST、SPI_MODE1))
     digitalWrite (hspi->pinSS ()、low) //将 SS 拉低以准备传输的其他端

     uint8_t h1 = 0b10000010
     uint8_t H2 = 0b10100000

     uint8_t h11 = hspi->transfer (H1) //发送第一个字节、MSB 字节
     uint8_t h22 = hspi->transfer (H2) //发送第二个字节、LSB 字节

     uint8_t dataMSBS =((reg_value >> 8)和0xFF)
     uint8_t dataLSBS =(REG_VALUE & 0xFF)

     uint8_t dataMSB2 = hspi->transfer (dataMSSBS) //发送第一个字节、MSB 字节 A2
     uint8_t dataMSB1 = hspi->transfer (dataMSSBS) //发送第一个字节、MSB 字节 A1

     uint8_t dataLSB2 = hspi->transfer (dataLSBS) //发送第二个字节、LSB 字节 D2
     uint8_t dataLSB1 = hspi->transfer (dataLSBS) //发送第二字节、LSB 字节 D1

     hspi->endTransaction ()
     digitalWrite (hspi->pinSS ()、HIGH) //将 ss 拉至高电平以表示数据传输结束

     if (debug => 2)
      serial.print ("已写:")
      serial.print(addPadding(dataMSBS);
      serial.print(addPadding(dataLSBS);
      string data1 = addPadding (dataMSB2)+""+ addPadding (dataLSB2)
      string data2 = addPadding (dataMSB1)+""+ addPadding (dataLSB1)
      serial.print ("已接收:")
      serial.print (data1)
      serial.print(");
      serial.print (hexToBinary (data1))
      serial.print(");
      serial.print ("已接收:")
      serial.print (data2)
      serial.print(");
      serial.print (hexToBinary (data2))
      serial.println ("")
     

     //if (地址== SPI_CTRL2)
     //  确定微步进(数据);

     返回0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //该 SPI 函数用于编写设置的器件配置和运行参数。
    uint16_t SPI_writeRegister (uint8_t 地址uint16_t 数据)
     uint16_t reg_value = 0

     REG_VALUE |=((address << SPI_ADDRESS_POS)和 SPI_ADDRESS_MASK) //添加寄存器地址值
     REG_VALUE |=((DATA << SPI_DATA_POS)和 SPI_DATA_MASK)     //添加数据值

     hspi->beginTransaction (SPISettings (spiClk、MSBFIRST、SPI_MODE1))
     digitalWrite (hspi->pinSS ()、low) //将 SS 拉低以准备传输的其他端

     uint8_t h1 = 0b10000010
     uint8_t H2 = 0b10100000

     uint8_t h11 = hspi->transfer (H1) //发送第一个字节、MSB 字节
     uint8_t h22 = hspi->transfer (H2) //发送第二个字节、LSB 字节

     uint8_t dataMSBS =((reg_value >> 8)和0xFF)
     uint8_t dataLSBS =(REG_VALUE & 0xFF)

     uint8_t dataMSB2 = hspi->transfer (dataMSSBS) //发送第一个字节、MSB 字节 A2
     uint8_t dataMSB1 = hspi->transfer (dataMSSBS) //发送第一个字节、MSB 字节 A1

     uint8_t dataLSB2 = hspi->transfer (dataLSBS) //发送第二个字节、LSB 字节 D2
     uint8_t dataLSB1 = hspi->transfer (dataLSBS) //发送第二字节、LSB 字节 D1

     hspi->endTransaction ()
     digitalWrite (hspi->pinSS ()、HIGH) //将 ss 拉至高电平以表示数据传输结束

     if (debug => 2)
      serial.print ("已写:")
      serial.print(addPadding(dataMSBS);
      serial.print(addPadding(dataLSBS);
      string data1 = addPadding (dataMSB2)+""+ addPadding (dataLSB2)
      string data2 = addPadding (dataMSB1)+""+ addPadding (dataLSB1)
      serial.print ("已接收:")
      serial.print (data1)
      serial.print(");
      serial.print (hexToBinary (data1))
      serial.print(");
      serial.print ("已接收:")
      serial.print (data2)
      serial.print(");
      serial.print (hexToBinary (data2))
      serial.println ("")
     

     //if (地址== SPI_CTRL2)
     //  确定微步进(数据);

     返回0
    悔改
    11:08:45.139 ->写入:057A 已收到:823A 10000010 00111010已收到:A03A 10100000 00111010
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    认为来自  SDO2的回复包将是以下-这似乎正确

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

    发现状态的响应存储在  H11 H22中-因此无论如何都可以解决这个问题