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

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1346610/drv8462-drv8462

器件型号:DRV8462
主题中讨论的其他器件:DRV8426

您好!

  • 我无法通过 DRV8426进行 SPI 通信- MODE 且 nSLEEP 为高电平。
  • 故障寄存器的 SPI 读取命令针对 FAULT 和 SPI_ERROR 返回1 -不过、数据包在使用 SPI 模式1时似乎正确、有数据包时 nSCS 为低电平?
  • 我已尝试通过 CLR_FLT 位或 nSLEEP 复位脉冲清除故障-不确定写入是否作为写入0x06B8而返回0xC038是否正确?
  • 读取命令0x0400返回0xC0C0应为0xC000 -正确吗?

  ]

提前感谢、

菲利普·博特马

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

    嗨、Phillip、给我们安排一天时间来看看、抱歉。

    确保您遵守 SPI 格式要求。  这通常符合"SPI 模式1"的标准、其中 CPOL=0和 CPHA=1、输出边沿上升和数据捕捉下降。  

    此致!

    雅各布

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

    也许我们的 EVM 中的此示例代码也将有助于:

    // Direct writing of a register
    void DRV8462::writeRegister(uint8_t reg, uint8_t value)
    {
      write8(reg, value);
    }
    
    // These defines are in the .h file
    // SPI Protocol
    #define SPI_ADDRESS_MASK   0x3F00        // Mask for SPI register address bits
    #define SPI_ADDRESS_POS    8             // Position for SPI register address bits
    #define SPI_DATA_MASK      0x00FF        // Mask for SPI register data bits
    #define SPI_DATA_POS       0             // Position for SPI register data bits
    #define SPI_RW_BIT_MASK    0x4000        // Mask for SPI register read write indication bit
    
    void DRV8462::write8(uint8_t reg, uint8_t value) {
    
      // This SPI function is used to write the set device configurations and operating
      // parameters of the device.
      // Register format |R/W|A5|A4|A3|A2|A1|A0|*|D7|D6|D5|D4|D3|D2|D1|D0|
      // Ax is address bit, Dx is data bits and R/W is read write bit.
      // For write R/W bit should 0.
    
      volatile uint16_t reg_value = 0; // Variable for the combined register and data info
      reg_value |= ((reg << SPI_ADDRESS_POS) & SPI_ADDRESS_MASK);         // Adding register address value
      reg_value |= ((value << SPI_DATA_POS) & SPI_DATA_MASK);             // Adding data value
    
      digitalWrite(_cs, LOW);
    
      SPIxfer((uint8_t)((reg_value>>8) & 0xFF));
      SPIxfer((uint8_t)(reg_value & 0xFF));
    
      digitalWrite(_cs, HIGH);
    }
    
    uint8_t DRV8462::SPIxfer(uint8_t x) {
      if (_clk == -1) {
        return _spi->transfer(x);
      } else {
        // Serial.println("Software SPI");
        uint8_t reply = 0;
        for (int i = 7; i >= 0; i--) {
          reply <<= 1;
          digitalWrite(_clk, HIGH);
          digitalWrite(_mosi, x & (1 << i));
          digitalWrite(_clk, LOW);
          if (digitalRead(_miso))
            reply |= 1;
        }
        return reply;
      }
    }

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

    您好!

    我仔细检查了 SPI 模式是否为事实1、但它现在不工作。

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

    您好、Jacob:

    您是否在动态链配置中具有通过 SPI 向两个 DRV 器件写入的示例代码、即芯片选择是同一行  

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

    感谢雅各的帮助。 意识到它不是 SPI 模式1、因此从那时起已进行了更改。