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.

[参考译文] DRV8323:SPI 写入命令问题

Guru**** 2553450 points
Other Parts Discussed in Thread: TMS320F280049C

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/930549/drv8323-spi-write-command-issue

器件型号:DRV8323
主题中讨论的其他器件:TMS320F280049C

大家好  

我的客户对 DRV8323S 有以下问题、请进行评论和澄清。

此致

Ueli

--------------------------

我们目前在尝试通过 SPI 写入驱动程序寄存器时遇到问题。  

下面是我们遵循的过程。  请注意 、位于栅极驱动 HS 寄存器中的3«LOCK»位已配置、因此可以修改寄存器(011b)。

通道 C1 :芯片选择

通道 C2 :时钟(300kHz)

通道 C3 :MOSI

通道 C4 :MISO

 

  1. 读取栅极驱动 HS 寄存器(地址0x03) :我们在总线上发送0x9800

 

 

  1. 将 IDRIVEN_HS 值从2000mA (1111b,默认值)更改为1640mA (1110b) :我们在总线上发送0x1bfe

 

 

  1. 读取修改后的栅极驱动 HS 寄存器:我们在总线上再次发送0x9800 à 无变化 (驱动器应该发回0x03fe)

 

 

我们的行为是否有问题 ? 是否有其它要配置的锁定位 ?

 

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

    您好、Ueli、

    感谢您在 MD 论坛上发帖!

    在写入该寄存器时、您是否可以尝试屏蔽 LOCK 和 IDRIVEN_HS 设置、并一次尝试一次写入一次? 例如、您能否在一个 SPI 写入命令中解锁寄存器、然后在第二个写入命令中写入 IDRIVEN_HS 设置? 如果可以的话、请告诉我。 我将询问团队成员对此有何想法。  

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

    你好,Aaron

    感谢您的快速回复。 我已要求客户将他的意见也发布到论坛、以加快流程。

    此致

    Ueli

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

    您好、Barrera 先生、

    我只是进行了操纵、完全没有改变。 我可以读取寄存器、但不能写入其中的任何一个...

    但是、我在我的一侧进行了一些其他测试、并观察到时钟极性可能会导致这种奇怪的驱动器行为。

    通过更改此参数(空闲时时钟引脚电平为低电平),驱动程序似乎考虑了写入命令...但现在主器件发送的十六进制值与 SPI 总线上写入的值不对应(所有值都被1位移位):

    1)  空闲时钟极性高、初始情况下(读取驱动器寄存器正常但不写入)。

    主器件发送0x9800以读取0x03驱动程序寄存器。 总线上的值对应于主器件发送的值。

    2)  空闲时钟极性低(读取和写入正常)。

    主器件再次发送0x9800总线上的值与主器件发送的值不对应(一个位移位、似乎错过了第一个位)。

    因此 空闲时钟引脚电平低似乎是驱动器的正确时钟极性配置...您能确认吗?

    谢谢、

    此致

    Maxime Wey

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

    尊敬的 Maxime:

    是否可以再次使用屏幕截图重新发送帖子? 屏幕截图未在您之前的回复中显示。 请使用"插入文件"命令从您的计算机上载。  

    您使用哪个 MCU 来执行 SPI 命令和初始化? 您可以共享 SPI 初始化代码吗?

    通常、 您需要将时钟极性设置为低电平、以便 SCLK 为高电平有效(在下降沿发送数据、在上升沿接收数据)。

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

    您好、Barrera 先生、

    请在下面找到之前的屏幕截图:

    -空闲时,时钟极性高:

    -空闲时,时钟极性低:

    关于 MCU,我使用具有以下 SPI 配置的 STM32G4:

    -时钟阶段:第一个时钟转换是第一个数据捕获边沿

    - 时钟极性:空闲时 CK 为0

    -主设备选择:MCU 是主设备

    -波特率控制:fPCLK/256

    -帧格式:以 MSB 优先的方式发送/接收数据

    -全双工模式

    - 在主控模式下以及当 SPI 接口被启用时(芯片选择)、SS 输出被启用

    - NSS 脉冲:允许 SPI 在进行连续传输时在两个连续数据之间生成 NSS 脉冲。 在单次数据传输的情况下、它会在传输后强制将 NSS 引脚置于高电平状态

    - Motorola 模式

    -数据大小:16位

    谢谢、

    此致

    Maxime Wey

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

    尊敬的 Maxime:

    我不能代表 STM32G4 MCU 发言、因为它不是 TI 部件。 我可以与您分享用于使用 TMS320F280049C (TI C2000 MCU)与典型 DRV 器件通信的代码的 SPI 设置。  

    确保波特率足够快、数据在上升沿传输、在下降沿接收。  

    空 Config_EVM_SPI (空)

    //引脚配置
    EALLOW;
    // SPI_MOSI
    GPIO_SetupPinOptions (16、GPIO_INPUT、GPIO_异 步| GPIO_PULLUP);
    // SPI_MISO
    GPIO_SetupPinOptions (17、GPIO_INPUT、GPIO_异 步| GPIO_PULLUP);
    // SPI_CS
    GPIO_SetupPinOptions (56、GPIO_INPUT、GPIO_异 步| GPIO_PULLUP);
    // SPI_CLK
    GPIO_SetupPinOptions (57、GPIO_INPUT、GPIO_异 步| GPIO_PULLUP);

    GPIO_SetupPinMux (16、GPIO_MUX_CPU1、1);
    GPIO_SetupPinMux (17、GPIO_MUX_CPU1、1);
    GPIO_SetupPinMux (56、GPIO_MUX_CPU1、1);
    GPIO_SetupPinMux (57、GPIO_MUX_CPU1、1);
    EDIS;

    EALLOW;
    ClkCfgRegs.LOSPP.ALL = 0;
    EDIS;

    //初始化 SPI FIFO 寄存器
    SpiaRegs.SPIFFTX.All=0xE040;
    SpiaRegs.SPIFFRX.All=0x2044;
    SpiaRegs.SPIFFCT.All=0x0;

    //SPI 设置
    SpiaRegs.SPICCR.bit.SPISWRESET = 0;//SPI 复位打开
    SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//SCLK 高电平有效
    SpiaRegs.SPICCR.bit.SPICHAR = 0xF;//16位 SPI 字符
    SpiaRegs.SPICCR.bit.SPILBK = 0;

    SpiaRegs.SPICTL.bit.OVERRUNINTENA=0;//无溢出中断
    SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//PHASE 0
    SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//主模式
    SpiaRegs.SPICTL.bit.TALK = 1;//nSCS 被启用
    SpiaRegs.SPICTL.bit.SPIINTENA=0;//TX/RX 中断被禁用

    SpiaRegs.SPIBRR.bit.SPI_BIT_RATE =((25000000 / 1000000)- 1);//将波特率设置为1MHz
    SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰传输
    SpiaRegs.SPICCR.bit.SPISWRESET = 1;//退出 SPI 复位

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

    线程关闭脱机。