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.

[参考译文] DRV8305:DRV8305 SPI SDO 引脚无输出

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/678380/drv8305-drv8305-spi-sdo-pin-no-output

器件型号:DRV8305

您好!

我有一个 DRV8305通过 SPI 连接到 STM32F334

SDO 引脚上有一个1k5上拉电阻器。

SPI 配置为:

   SPI.SPI_Mode         = SPI_Mode_Master;
   SPI.SPI_DIRECTION      = SPI_DIRECTION 2Lines_FullDuplex;
   SPI.SPI_CPOL         = SPI_CPOL_Low;      /* CPOL=0 -> Low   */
   SPI.SPI_CPHA         = SPI_CPHA_2Edge;   /* CPHA=1 -> 2Edge   */
   SPI.SPI_NSS         = SPI_NSS_Soft;
   SPI.SPI_BaudRatePrescaler   = SPI_BaudRatePrescaler_64;
   SPI.SPI_FirstBit      = SPI_FirstBit_MSB;

我无法从 SDO 引脚获取任何数据。

有什么想法,可能是什么导致了问题?

提前感谢

制造商

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

    您尝试读取/写入哪个寄存器?

    根据数据表、SPI 命令为1个写入/读取位、4个地址位、然后是11个数据位。 在示波器捕获中、SDI 输入将尝试将"0b00010001000"写入地址0x0、该地址不是有效地址。

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

    首先、感谢您的快速回答。

    我一直在尝试读取寄存器:0x01、这导致了该波形。 我也尝试了寄存器0x05、这对 SDO 输出没有任何影响。 但您的解释很响亮、很清楚。

    但是、尽管如此、我还是很不明白为什么 SPI 外设没有输出实际写入的内容。

    它的作用如下:

    #define SPI_SR_RxTx(SPI_SR_TXE | SPI_SR_RXNE)
    #define SPI_ENABLED (SPIx)((SPIx)->CR1 & SPI_CR1_SPE)
    #define SPI_BUSY (SPIx)((((SPIx)->SR & SPI_SR_RxTx)=0 ||(((SPIx)->SR & SPI_SR_BSY))

    #define DRV8305_RD(1 << 15)
    #define DRV8305_WR(0 < 15)

    void SPI_read (uint8_t reg)

    while (SPI_BUSY (SPI1));
    SPI1->DR =(uint16_t)(DRV8305_RD |((reg & 0x1f)<< 11));
    while (SPI_BUSY (SPI1));


    和在 main()中

    SPI_InitTypeDef SPI;
    GPIO_InitTypeDef Pio;

    /* SPI1*/
    _GPIOA_CLK_ENABLE();/* GPIOA 时钟*
    PIC.GPIO_Pin= PIN_4;/* NSS:A.4*
    PI奥.GPIO_Mode= GPIO_Mode_OUT;
    PIO.GPIO_OType= GPIO_OType_PP;
    PI奥.GPIO_Speed= GPIO_Speed_50MHz;
    GPIO_Init (GPIOA、&PIO);

    PI奥.GPIO_Pin= PIN_5 | PIN_6 | PIN_7;/* SCK:A.5、MISO:A.6、MOSI:A.7*
    PI奥.GPIO_Mode= GPIO_Mode_AF;
    GPIO_Init (GPIOA、&PIO);

    GPIO_PinAFConfig (GPIOA、PINSRC_5、GPIO_AF_5);/* SPI1:从 SCK =PA.5*/
    GPIO_PinAFConfig (GPIOA、PINSRC_6、GPIO_AF_5);/* SPI1:从器件 MISO/SDO=PA.6*/
    GPIO_PinAFConfig (GPIOA、PINSRC_7、GPIO_AF_5);/* SPI1:从器件 MOSI/SDI=PA.7*
    _PIN_SET (GPIOA、PIN_4、1);// CS deassert*/

    _SPI1_CLK_ENABLE();
    SPI_I2S_DeInit (SPI1);
    SPI_StructInit (&SPI);
    SPI.SPI_Mode= SPI_Mode_Master;
    SPI.SPI_DIRECTION= SPI_DIRECTION 2Lines_FullDuplex;
    SPI.SPI_CPOL= SPI_CPOL_Low;/* CPOL=0 -> Low*/
    SPI.SPI_CPHA= SPI_CPHA_2Edge;/* CPHA=1 -> 2Edge*/
    SPI.SPI_NSS= SPI_NSS_Soft;
    SPI.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_64;
    SPI.SPI_FirstBit= SPI_FirstBit_MSB;

    SPI_Init (SPI1、&SPI);
    SPI_Cmd (SPI1、使能);

    _PIN_SET (GPIOA、PIN_4、0);// CS 断言*/
    SPI_READ (0x01);
    _PIN_SET (GPIOA、PIN_4、1);// CS deassert*/


    谢谢、

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

    您好、Garrett、

    我想、我可能发现了这个问题。

    SPI 外设在16位模式下,上8位和下8位似乎与 STM32F334交换。

    交换高字节和低字节似乎有效?

    非常感谢您的帮助!

    我能够读取寄存器1-12

    读取 Reg1-12
    ------------------------
    RD REG:0x01=0x00
    RD REG:0x02=0x00
    RD REG:0x03=0x00
    RD REG:0x04=0x00
    RD REG:0x05=0x344
    RD REG:0x06=0x344
    RD REG:0x07=0x216
    RD REG:0x08=0x00
    RD REG:0x09=0x20
    RD REG:0x0a=0x00
    RD REG:0x0B=0x10A
    RD REG:0x0c=0x2c8


    我认为这些是与寄存器相关的默认值

    读取寄存器0x05