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.

[参考译文] DRV3255-Q1:DRV3255-Q1 SPI 问题读取 IC_STAT_1

Guru**** 2650005 points

Other Parts Discussed in Thread: DRV3255-Q1, C2000WARE

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1586830/drv3255-q1-drv3255-q1-spi-issues-reading-the-ic_stat_1

器件型号: DRV3255-Q1
主题: C2000WARE 中讨论的其他器件

尊敬的支持部门:

我尝试与 DRV3255 SPI 连接、但遇到了一些问题。

 

在测试期间、我用 0x0000 在 SPI 中写入 16 位、其响应不符合预期 (0x80 或 0x8080)

目前、我们正在 根据代码运行情况获取不同的值、但请求相同的数据。

 

uController 是一个 F28P55x、设置为:

 -传输协议:模式 0

 -模式: SPI 控制器,

 - PTE 极性:Pte 在低电平时有效、

 -比特率:500000

 数据宽度:16

 -使用案例:标准

 -无 DMA、无 FIFO  

 

我使用文件 DRV3255-Q1 - SLVSGX9–2022 年 8 月作为参考。

 

 

 

 

 

 

提前感谢您的支持。

 

祝你一切顺利、

Pedro Oliveira

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

    Pedro,

    您能澄清一下、您尝试写入哪些确切的寄存器和位?  

    MOSI (SDI) 行针对所有事务显示 0x00、指示对寄存器 0x0 或 IC_STAT_1 的写入命令。

    请 向我们发送另一个 SPI 图、并 包含 nSCS(芯片选择)信号。

    此致、

    -亚当

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

    尊敬的 Adam:

    我正在尝试读取寄存器  

    根据我引用 IC_STAT_1 的数据表、根据我在 SPI 上提到的 DRV 文档、这些位应为 RW=0(读取)、地址=0x00、数据=0x00(但无关紧要)。

    遗憾的是、目前获取 nSCS 信号并不容易、但我使用数字分析仪验证了 UC 实现、但没有 DRV、且信号在发送时钟之前下降、并在发送结束时返回。

    如果有任何其他文档或更新版本、请告诉我。

    祝你一切顺利、

    Pedro Oliveira  

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

    尊敬的 Adam:

    我正在尝试读取寄存器  

    根据我引用 IC_STAT_1 的数据表、根据我在 SPI 上提到的 DRV 文档、这些位应为 RW=0(读取)、地址=0x00、数据=0x00(但无关紧要)。

    遗憾的是、目前获取 nSCS 信号并不容易、但我使用数字分析仪验证了 UC 实现、但没有 DRV、且信号在发送时钟之前下降、并在发送结束时返回。

    如果有任何其他文档或更新版本、请告诉我。

    祝你一切顺利、

    Pedro Oliveira  

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

    Pedro,

    数据表提到 W0、读取/写入位、对于读取命令、必须为 1b;您当前正在将 0x00 写入寄存器 0x00、因为 W0 位为 0b、这是只读寄存器。

    此致、

    -亚当

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

    尊敬的 Adam:

    谢谢你的亮点,我被另一个文件误导.  

    我会检查一下、然后我会尽快回来。

    理解校正。

    祝你一切顺利、

    Pedro Oliveira  

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

    Pedro,

    您以前参考过哪个文档?

    此致、

    -亚当

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

    尊敬的 Adam:

    现在是 RW = 1(作为读取)、Address = 0x00 的正确消息。  

    我预计响应将是恒定的、因为中的数据是常量的、我只是读取寄存器、并且 DRV 输入端没有其他任何内容会被修改。  

    预期的产出(作为我对该文件的解释)是:

    • 状态和数据相同(如果我错了,请更正我)
    • 在数据上:0x80
      • SPI_OK = 1 => 1b1 =未检测到 SPI 故障
      • FAULT = 0 =>无故障
      • WARN = 0 =>无 WARN
      •  VDS = 0 =>无 VDS 故障
      •  VGS = 0 =>无 VGS 故障
      • UVOV = 0 =>无 UVOV 故障
      •  OTW = 0 =>无 OTW 故障
      • DRV_STAT = 0 => ENABLE_DRV = GND

    我无法理解状态和数据不同的含义。 如果数据不同、这意味着什么?  

    另外、在读取寄存器 SPI_TEST 时、为什么每次读取得到不同的结果?这意味着什么? 数据表对此不够清楚。  

     

    提前感谢您的 支持。

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    请查看如果您能提供 nSCS 信号、这对我们很有帮助。

    您能否确认未发送任何其他 SPI 信号?

    SPI_TEST 寄存器是一个空白寄存器、可满足您自己的测试需求、如果您写入此寄存器、然后读回、您是否获得正确的读数?

    此致、

    -亚当

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

    尊敬的 Adam:

    我将尝试 在当前设置(我们的定制电路板,带有 DRV)中获取 nSCS 信号。

    同时、当控制卡 F28P55x 上具有相同的代码时、我将在不与 DRV 连接的情况下共享信号。

    这些连接是 SPI-PICO 至 SDI、SPI-POCI 至 SDO、SPI-CLK 至 SCLK 以及 SPI-PTE 至 nSCS。

    我可以确认没有其他 SPI。

    结果:

    =>未与 DRV 连接以显示 nSCS 信号

    写入 SPI_TEST 0x29 0xAB

    和读数  

    读取寄存器 IC_STAT_1

    =>连接 DRV 时的相同代码

    写入 SPI_TEST 0x29 0xAB

    和读取 SPI_TEST 0x29

    读取寄存器 IC_STAT_1

    *注意: DRV 的操作没有改变,但寄存器中的数据改变了。

    提前感谢您的支持。

    祝你一切顺利、

    Pedro Oliveira

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

    更新:  

    我设法获得 nSCS 信号。 请查看请求和回复:

    =>连接 DRV 时的相同代码

    写入 SPI_TEST 0x29 0xAB

    和读取 SPI_TEST 0x29

    读取寄存器 IC_STAT_1

    提前感谢您的支持。

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    好像您的 nSCS 引脚在同时发生 SCLK 下降沿时变为高电平有点过早、您能否增加一些延迟、以便 nSCS 在 SPI 事务结束时的 SCLK 下降沿之后等待更长时间?

    此致、

    -亚当

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

    尊敬的 Adam:

    在代码中执行这些操作。 电机控制示例给我带来了灵感。   

    #define  writeSPI(tx_data)           SPI_writeDataBlockingNonFIFO(DRV_SPI_BASE, tx_data)
    #define  readSPI()                   SPI_readDataNonBlocking(DRV_SPI_BASE)
    
    void readRegDRV3255(uint16_t *reg)
    {
        uint16_t tx_data, cmd;
    
        tx_data = ((*reg) & DRV3255_ADDR_MASK) | (DRV3255_RW_MASK);
        writeSPI(tx_data);
    
        //
        // Wait until tx/rx ends to generate SPISTE rising edge - UCC5870 needs it
        //
        //
        // read SPI_RXBUF to clear INT flag
        //
    
        while(getStatus_RxDataTxEmpty() == 0U)  // wait until tx complete
        {
        }
        cmd = readSPI();
    
        (*reg) = (((*reg) & DRV3255_ADDR_MASK) + (cmd & DRV3255_DATA_MASK));
    }
    
    
    //
    // REGISTER BIT FIELD DEFINITIONS
    //
    // DRV3255 IC_STAT_1 Register bit definitions:
    //
    struct  DRV3255_ICSTAT1_REG_BITS
    {
        uint16_t  DRV_STAT       : 1;
        uint16_t  OTW            : 1;
        uint16_t  UVOV           : 1;
        uint16_t  VGS            : 1;
        uint16_t  VDS            : 1;
        uint16_t  WARN           : 1;
        uint16_t  FAULT          : 1;
        uint16_t  SPI_OK         : 1;
        uint16_t  ADDR           : 7;
        uint16_t  RW             : 1;
    };
    
    DRV3255_ADDRESS_ICSTAT_1   = (0x0),   //!< IC Status Register 1
    
    
    DRV3255Regs->ICSTAT1.bit.ADDR = DRV3255_ADDRESS_ICSTAT_1;
    
    
    
    readRegDRV3255((uint16_t *)&DRV3255Regs.ICSTAT1);

    您建议在“cmd = readSPI ();“之前创建一个延迟?

    请注意、我正在使用 driverlib API、因此 nSCS 的管理是在 API 中完成的。   

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    driverlib 代码来自哪里?

    此致、

    -亚当

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

    尊敬的 Adam:

    此代码源于 C2000Ware MotorControl SDK 5.04。

    我认为这与问题无关。

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    请为我们显示显示所有电路板和板间连接的设置图片。

    此致、

    -亚当

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

    尊敬的 Adam:

    恐怕我无法分享电路板的图片、但可以告诉我、引脚直接连接到 SPI。

    F28P559SJ9 SPI A 以及 DRV3255 SPI:

    F28P559SJ9 <=> DRV3255  

       SPIPOCI <=> SDO

       SPIPICO <= SDI

        SPICLK <= SCLK

        SPIPTE  <=> nSCS

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    您是否可以始终从任何 SPI 地址读取?

    您是在 SCLK 的上升沿还是下降沿捕获数据?

    此致、

    -亚当

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

    尊敬的 Adam:

    读取不同地址将返回相同的地址并且不一致。

    当提到采集数据时、您是指在逻辑分析仪还是代码中?

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    我对逻辑分析仪和代码的数据采集很好奇。

    此致、

    -亚当

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

    Pedro,

    您是否还有另一个  F28P559SJ9 电路板或 DRV3255 电路板可以尝试、我想知道您的设置中是否有一个或两个电路板出现问题。

    此致、

    -亚当

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

    我们测试了多个 F28P55xSJ9 和 DRV3255 电路板、并观察到了所有电路板上的相同问题。 现在、我想知道我们购买的许多 DRV3255 器件是否都来自较旧的器件版本、以及 DRV3255 的较新修订版本当前是否在市场上上市。

    我之所以问这个问题、是因为我们之前遇到了类似的 F28P55xSJ9 “修订问题“。 我们购买了两块开发板、示例项目运行不正常。 后来我们发现这些电路板基于较旧的器件版本、代码需要额外的“定义“才能在该版本上正常运行。 添加这些特定于修订版本的定义后、一切都正常工作。

    我们的 DRV3255 是否也可能来自旧版本、从而导致类似的行为?

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

    RAM、

    我不知道电路板或器件有任何修订变更。 您能否展示所用电路板及其连接的图像? 如果无法获得真实图像、请显示方框图或您使用的电路板。

    此致、

    -亚当

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

    尊敬的 Adam:

    是否 应启用/禁用 nSLEEP 或 DRVOFF 以使 SPI 通信正常工作?  

    祝你一切顺利、

    Pedro Oliveira

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

    Pedro,

    nSLEEP 需要为高电平、以便器件退出睡眠模式、对于 SPI 通信、DRVOFF 无关紧要。

    VDDIO、DHCP 和 PVDD 也应上电。

    此致、

    -亚当