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.

[参考译文] DRV8311:应用问题。

Guru**** 2399305 points
Other Parts Discussed in Thread: DRV8311

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1434191/drv8311-application-issues

器件型号:DRV8311

工具与软件:

大家好、团队成员:

使用 tSPI 协议进行寄存器读取和写入时、我们发现写入的数据与读取的数据不一致
1) NSLEEP 下拉->上拉
2) PWM_SYNC ->上拉
3) 3)寄存器写入和读取
能不能帮我弄清楚原因是什么?

原理图和通信程序如下所示:

 e2e.ti.com/.../drv8311_5F00_p.c

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

    尊敬的 Reed:

    当您认为 SPI 写入数据和读取数据不一致时、您可以进行详细阐述吗? 您是否正在使用逻辑分析仪? 您是否有一些阅读和写作的屏幕截图?

    您在使用什么 MCU 和 IDE? 在实际查看代码方面、我可能没有多大帮助 、但这里是 tSPI 如何使用 LAUNCHXL - 280049C 和 CCS 针对 DRV8311工作的片段

    Uint16 tspi_read_block(Uint16 id, Uint16 addr, Uint16 data_size)
    {
        Uint16 p_addr;
        Uint16 p_data;
        Uint16 commandword;
    
        Uint16 dummy = 0;
    
        p_addr = spi_parity_calc(addr);
        commandword = (0x8000) | (id << 11) | (addr << 3) | (p_addr << 0);
        SpiaRegs.SPITXBUF=commandword;
    
        int data_ptr;
        for (data_ptr = 0; data_ptr < data_size; data_ptr++)
        {
            p_data = spi_parity_calc(dummy);
            commandword = (p_data << 15) | dummy;
            SpiaRegs.SPITXBUF=commandword;
            spi_data_tx[data_ptr] = SpiaRegs.SPIRXBUF;
        }
    
        while(SpiaRegs.SPIFFRX.bit.RXFFST != data_size);
    
        return SpiaRegs.SPIRXBUF;
    }
    
    Uint16 tspi_write_block(Uint16 id, Uint16 addr, Uint16 data_size, Uint16 data[])
    {
    
        Uint16 p_addr;
        Uint16 p_data;
        Uint16 commandword;
    
        p_addr = spi_parity_calc(addr);
        commandword = (id << 11) | (addr << 3) | (p_addr << 0);
        SpiaRegs.SPITXBUF=commandword;
    
        int data_ptr;
        for (data_ptr = 0; data_ptr < data_size; data_ptr++)
        {
            p_data = spi_parity_calc(data[data_ptr]);
            commandword = (p_data << 15) | data[data_ptr];
            SpiaRegs.SPITXBUF=commandword;
        }
    
        while(SpiaRegs.SPIFFRX.bit.RXFFST != data_size);
    
        return SpiaRegs.SPIRXBUF;
    }

    此致、

    Yara

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

    非常感谢您的答复。 如果禁用奇偶校验、是否仍需要计算奇偶校验位? 顺便说一下、您能否为 spi_parity_calc 函数提供源代码?

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

    尊敬的 Zhu:

    是的、如果禁用了奇偶校验、您仍然应该确保您的 SPI 帧具有正确的奇偶校验、否则这将是无效的 SPI 事务。

    bool spi_parity_calc(Uint16 word)
    {
        uint16_t p = 0;
        while(word)
        {
           p ^= (word & 1);
           word >>= 1;
        }
        return(p);
    }
    

    此致、

    Yara

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

    您好、Yara、  

    感谢您的及时回复、 
    按照您的建议、我填写了正确的奇偶校验位、但仍然有问题。 
    例如、我将数据写入 PWM_CTRL1寄存器、但当我再次读取 PWM_CTRL1的数据时、读出的数据不是我写入的数据。 

    还有一个问题、我们在使用 HiSilicon 3519主芯片组。 在构成 tSPI 帧数据后、我们使用 Linux SPI 总线通信协议来执行数据读取和写入操作、 
    这种方法是否可行? 
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Zhu:

    在编写 tSPI 帧数据后、我们使用 Linux SPI 总线通信协议执行数据读写操作、

    只要您牢记此器件的 SPI 要求、我就不会遇到此问题  

    您是否有逻辑分析仪? 您可以向我展示 SPI 通信的任何波形?

    一个好的开始是读取所有寄存器、然后查看是否获得了默认值。 如果没有获得默认值、则 SPI 帧可能会出现问题。 请记住、您应使用 tSPI 帧、而不是数据表中的 SPI 帧。

    此致、

    Yara

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

    您好、 Yara、  

    我使用逻辑分析仪分析波形、这里是波形结果和我的日志输出

    是的、 我正在使用 tSPI 帧、但它似乎无效、我检查了数据、但找不到任何问题。 我撰写的数据可以在上面图像的日志输出中看到。  您能看到任何问题吗?

    此致、

    Zhu

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

    您好、Yara、感谢您的帮助。

    我知道问题的原因、在数据表中、它描述的数据输出为24位、但实际上输出是32位、最后16位是数据内容、因此我读取4字节输出数据的最后16位、即我之前写入的数据。

    此致

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

    尊敬的 Zhu:

    您的问题已经得到解决? 请点击"此问题已解决"按钮、以便关闭该主题帖。

    如果您有任何其他问题、请随时发布另一个 E2E 问题。

    此致、

    Yara

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

    您好、Yara、  

    谢谢、我要结束本主题。 如果我还有其他问题、我会请求您的团队提供帮助。

    此致、

    Zhu