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:SPI 读取工作、但无法写入。 在写入时获取默认值、同时读回该值。

Guru**** 2813875 points

Other Parts Discussed in Thread: DRV8462

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1607816/drv8462-spi-read-working-but-unable-to-write-after-writing-getting-default-values-while-reading-it-back

器件型号: DRV8462

我的基本代码:

unsigned char tx_buff[2]={};

unsigned char rx_buff[2]={};

// SPI 写入使 EN_OUT = 1

TX_BUFF[0]= 0x04;

tx_buff[1]= 0x8F;

 

drv8462_GPIO_WritePin (MTR1_CS_GPIO_Port、MTR1_CS_Pin、GPIO_PIN_RESET);

HAL_SPI_TransmitReceive (&hspi1、tx_buff、rx_buff、21000);

drv8462_GPIO_WritePin (MTR1_CS_GPIO_Port、MTR1_CS_Pin、GPIO_PIN_SET);

 

//读取 REG CTRL1

tx_buff[0]= 0x44;

// tx_buff[1]= 0x00;

 

drv8462_GPIO_WritePin (MTR1_CS_GPIO_Port、MTR1_CS_Pin、GPIO_PIN_RESET);

HAL_SPI_TransmitReceive (&hspi1、tx_buff、rx_buff、21000);

drv8462_GPIO_WritePin (MTR1_CS_GPIO_Port、MTR1_CS_Pin、GPIO_PIN_SET);

输出 I get:0xC0F;

 

这是我使用 SPI 在 drv8462 中编写 rereg 的代码。 我可以读取所有寄存器并获得默认值、但当我写入 CTRL1 并使 EN_OUT=1 时、仍会获得默认值且 EN_OUT=0;您能帮我解决吗?

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

    您好、

    感谢您的提问。 星期一是美国的国庆节。 我们会在一天或两天内向您提供反馈

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

    尊敬的 Rohan:

    您提到、“在写入时获取默认值、同时读回该值。“。 写入事务期间返回的值将是寄存器之前的内容、可能是上电或从睡眠状态唤醒后的默认值。 第二次读取应显示正确的写入值。 如果情况并非如此、请参阅以下调试问题。  

    您能否确认芯片选择引脚 nSCS 在没有 SPI 事务时通常为高电平、并在 SPI 事务开始之前变为低电平、并在一个事务完成后再次变为高电平? 请参阅数据表的下图。 一个事务包括一个 8 位地址字节和一个 8 位数据字节、共 16 位。 对于每 16 位、nSCS 必须变为低电平、然后变为高电平。 在写入事务之后、写入值将在 nSCS 的上升沿锁存到寄存器中。   

    请参阅下面的从一个事务进行 SPI 捕获的示例。 您能否分享 同一寄存器一次写入、后跟一次读取事务的捕获结果以进行调试?

    此致、Murugavel  

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

    Murugavel4637 感谢您的答复。 我将从一个事务中为您捕获 SPI

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

    Murugavel4637 、我已经捕获了下面的波形。 请检查一下。 一个用于读取、另一个用于写入。  

    绿色 Ch:SPI_CLK

    红色 Ch:SPI_MOSI

    蓝色通道:SPI _MISO

    Yello Ch:芯片选择。

    这用于读取

    用于写入:

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

    尊敬的 Rohan:

    感谢您分享 SPI 读写捕获。 根据这些波形、SPI 事务存在一些问题、必须由控制器解决。

    读取操作

    1. nSCS 变为低电平后、SCLK 有一个下降沿、该下降沿已被视为驱动器的第一个时钟输入。 这意味着驱动器会看到 17 个时钟与 16 个时钟、即使读取的值可能正确、该事务也会触发 SPI 错误。 这必须是固定的 — 参见下一点。
    2. 根据驱动器的有效帧定义、当 nSCS 变为低电平时、SCLK 必须为低电平。 请参阅下面的。 根据捕获的共享项、这违反了。 SCLK 在 nSCS 的下降沿处于高电平。 解决此问题也可以解决#1 中提到的问题。  
    3. 为什么 SDI 上的低逻辑电平在事务处理过程中从 0V 变为+非零值? 这是由于示波器探头设置问题交流与直流造成的、还是 SDI 输入本身存在问题? 必须验证并修复此问题。 如果这不是与探测设置相关的问题、则 VIL 电平看起来会违反。 这些问题是不寻常的,我认为这可能是探头设置。  
    4. 解决这些问题后、请再次捕获并与我分享。 还提及通过 SDI 发送的值、即 2 个字节。 请参阅捕获的 I shared 显示了解码字节值。  

    写入操作:  

    1. 我看到了我提到的读取操作相同的问题。 在这种情况下、17SCLK 不仅会报告 SPI_ERROR、还会拒绝写入操作、因为这一违例与读取操作相比、响应不同。 这必须是固定的。
    2. 与读取操作相同的问题。 这必须是固定的。
    3. 与读取操作相同的注释。 请验证并重新捕获。
    4. 解决这些问题后、请再次捕获并与我分享。 还提及通过 SDI 发送的值、即 2 个字节。 请参阅捕获的 I shared 显示了解码字节值。  

    此致、Murugavel  

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

    第 4637 章 

    默认情况下、SPI 时钟保持不变 高电平 、因此驱动程序正在检测到 一个额外的时钟脉冲 并报告协议故障。 在拉取时钟线之后 驱动至低电平 (当 nSCS 变为低电平时、确保 SCLK 为低电平)、不再发生故障、现在可以这样做 成功读取和写入 通信。

    感谢您提供该解决方案。 我在下面附上了更新后的捕获图像以供您参考。

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

    尊敬的 Rohan:

    很高兴问题得到解决。 感谢您的更新。

    此致、Murugavel