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.

[参考译文] CCS:DRV8301-HC-EVM 版本 D (CC2803X IDO DIM 修订版1.3)

Guru**** 2538930 points
Other Parts Discussed in Thread: DRV8301, CONTROLSUITE, DRV8302, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/952532/ccs-drv8301-hc-evm-revision-d-cc2803x-ido-dim-rev-1-3

主题中讨论的其他器件:DRV8301controlSUITEDRV8302C2000WARE

工具/软件:Code Composer Studio

您好 TI
MCU (F2803)和 DRV8301 已在 instaspin_BLDC.CCS 项目中使用 SPI 通信。

我们希望使用隔离式 SPI 接口(GPIO 16、17、18和19)在 MCU 和 Arduino 之间进行 SPI 通信。

由于您没有任何示例、我们添加了 Arduino SPI.c 和 Arduino_SPI.h、它们使用与 DRV8301_SPI.c 和 DRV8301_SPI.h 相同的语法/结构

已在 BLDC_Int-DevInit_F2803x.c 中为 SPI 通信启用 GPIO 16、17、18和19

Arduino_SPI_Init (&SpiaRegs)函数有效(添加在 BLDC_int.c 第217行中)
但在340行中使用 Arduino SPI_Read 或在493行中使用 Arduino SPI_Write 更改为 BLDC_int.c 不起作用、并禁用电机可控性(在连接到 MCU (F2803)的 PC 上使用 CCS 中的观察窗口)。

因此、MCU (F2803)和 Arduino 之间实现的 SPI 通信代码会使 MCU (F2803)和 DRV8301之间的 SPI 通信混乱

您能帮我们解决这个问题吗? 感谢您的任何帮助。 您是否需要我们提供的更多信息/文件?

扩展的 CCS 工程附加到该 message.InstaSPIN_BLDC.zip

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

    F2803x 上有两个 SPI、您可以使用另一个 SPI、SPIB 进行通信。

    或2. 不要将 GPIO19用作电路板的 SCS、请将 GPIO 用作 SCS 引脚。 如果您想为电路板使用 SPIA、请禁用针对 DRV 的 SCS。

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

    尊敬 的罗燕明、感谢您的快速回答。

    请帮我回答以下问题:

    问题与 instaSPIN_BLDC CCS 工程中的 SPI 通信有关(将 F2803x_DRV8301_RAM 作为目标) MCU F2803x 使用 SPI-B 模块与 DRV8301进行通信。 F2803x 被配置为主器件。 在 F2803x 上使用 SPI-A 模块是否可行、F2803x 被配置为从器件、而 F2803x 被配置为 SPI-B 模块中的主器件。  

    谢谢  

    -Mads

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

    是的。 根据您的系统、您可以使用 SPI_A 和 SPI_B 作为主器件或从器件。 您可以在用于 F2803x SPI 的 controlSUITE 中找到相关示例。

    设计自己的电路板。 您可能会使用不需要 SPI 进行控制的 DRV8302、只需使用更简单的 GPIO。

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

    嗯、好的、我们希望通过 Arduino 作为主(或从)进行 SPI 通信

    这些代码应使用 SPI-A 模块实现通信。 但我们无法使用 示波器在 GPIO 16、17、18和19上记录任何 SPI 通信。 您能不能看一下相应的代码、看看我们为什么在电路板引脚上看不到任何信号而可能出错了吗?   

    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //
    //文件:Arduino_spi.c
    //
    //标题:Arduino SPI 通信函数
    //
    版本:1.0
    //
    //日期:2011年5月24日
    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    #include "PeripheralHeaderIninclude.h"
    #include "Arduino SPI.h"
    
    /********* //
    初始化 SPI 外设
    /************* /
    void Arduino SPI_Init (volatile struct spi_regs * s)
    {
    S->SPICCR.bit.SPISWRESET = 0; //将 SPI 置于复位状态
    S->SPICCR.bit.SPICHAR = 0xF; // 16位字符
    S->SPICCR.bit.SPILBK = 0; //环回关闭
    S->SPICCR.bit.CLKPOLARITY = 0; //上升沿无延迟
    
    S->SPICTL.bit.SPIINTENA=0; //禁用 SPI 中断
    S->SPICTL.bit.TALK = 1; //启用传输
    S->SPICTL.bit.MASTER_SLAVE = 1; //
    S->SPICTL.bit.CLK_PHASE = 0; //上升沿无延迟
    S->SPICTL.bit.OVERRUNINTENA=0;//禁用接收器溢出中断
    
    S->SPIBRR = 0; // SPICLK = LSPCLK /4 (最大 SPICLK)
    
    S->SPICCR.bit.SPISWRESET=1; //启用 SPI
    }
    
    /************* //
    从 Arduino 寄存器读取
    /********* /
    uint16 Arduino_spi_read (volatile struct spi_regs * s、uint16地址)
    {
    UNION Arduino SPI_WRITE_WORD_REG w;
    易失性 uint16 dummy1;
    
    w.bit.R_W = 1; //我们正在启动读取
    w.bit.address =地址; //加载地址
    w.bit.data = 0; //虚拟数据;
    
    S->SPITXBUF = w.all; //send out the data
    
    while (s->SPISTS.bit.INT_flag =0); //等待数据包完成
    
    dummy1 = s->SPIRXBUF; //虚拟读取以清除 INT_FLAG 位
    
    w.bit.R_W = 1; //我们正在启动读取
    w.bit.address =地址; //加载地址
    w.bit.data = 0; //虚拟数据;
    
    S->SPITXBUF = w.all; //发送数据
    
    while (s->SPISTS.bit.INT_flag = 0); //等待数据包完成
    
    dummy1 = s->SPIRXBUF; //虚拟读取以清除 INT_FLAG 位
    
    return (dummy1);
    
    }
    
    /************* //
    写入 Arduino 寄存器
    // SPI 写入始终时钟输出状态寄存器1中的数据。
    //由于可用,我们将返回此函数的状态
    /
    uint16 Arduino _SPI_Write (volatile struct spi_regs * s、uint16地址、uint16数据)
    {
    UNION Arduino SPI_WRITE_WORD_REG w;
    易失性 uint16 Arduino_stat_reg1;
    
    w.bit.R_W = 0; //我们正在启动写入
    w.bit.address =地址; //加载地址
    w.bit.data =数据; //要写入的数据;
    
    S->SPITXBUF = w.all; //发送数据
    
    while (s->SPISTS.bit.INT_flag = 0); //等待数据包完成
    
    Arduino_stat_reg1 = s->SPIRXBUF; //读取状态寄存器1的返回值并清除 INT_FLAG 位
    
    return (Arduino_stat_reg1);
    
    } 

    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    ////
    文件:Arduino_SPI.h
    //
    //标题:Arduino SPI 通信函数的头文件
    //
    版本:1.0
    //
    //日期:27-10-2020
    //
    //===========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    
    // Arduino SPI 输入数据位定义:
    struct Arduino_spi_write_word_bits{ //位 说明
    uint16数据:11; // 10:0 FIFO 复位
    UINT16地址:4; // 14:11增强启用
    uint16 R_W:1; //15. R/W
    };
    
    UNION Arduino_SPI_WRITE_WORD_REG{
    uint16 全部;
    struct Arduino_spi_write_word_bits bit;
    };
    
    // Arduino SPI 状态寄存器1位定义:
    struct Arduino_status_REG_1_bits{ //位 说明
    UINT16 EnableFlagArduino:1; // 0 (电机启动)
    UINT16 CurrentLimitArduino:1; // 1. 在 Eco-mode
    UINT16 SpeedRefArduino:9中打开电流限制; //2-10. modtag speedref FRA Arduino
    UINT16保留:5; // 15:11
    };
    
    UNION Arduino_status_REG_1{
    uint16 ALL;
    struct Arduino_status_REG_1_bits bit;
    };
    
    // Arduino SPI 控制寄存器1位定义:
    struct Arduino_control_REG_1_bits{// bit 说明
    UINT16 motorRPM:11;// 10:0发送紧密到 Arduino
    UINT16保留:5; // 15:11
    };
    
    UNION Arduino_control_REG_1{
    uint16 ALL;
    struct Arduino_control_REG_1_BITS;
    };
    
    /********* //define
    
    /************* ///Arduino
    寄存器地址
    #define Arduino_STAT_REG_1_ADDR 0x04
    //#define Arduino STAT_REG_2_ADDR 0x05
    #define Arduino_CNTRL_REG_1_ADDR 0x05
    //#define Arduino_CNTRL_REG_2_ADDR 0x07
    
    /(定义 Arduino_CNTRL_REG_2_ADDR 0x07 / //
    函数原型
    /********* /
    void Arduino_SPI_Init (volatile struct spi_regs * s);
    uint16 Arduino_spi_read (volatile struct spi_regs *、uint16地址);
    uint16 Arduino_spi_Write (volatile struct spi_regs *、uint16地址、uint16数据);
    
    

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

    这些是主文件中的相关行。

    如果你能帮助我们,Yanming 先生,那就太棒了。谢谢

    DRV8301_SPI.h
    
    #include "Arduino _SPI.h"
    
    
    
    BLDC.Int.c
    
    #include "BLDC_Int.h"
    
    //包括主函数
    联合使用的头文件 Arduino _STATUS_1 Arduino_stat_reg1;
    Union Arduino_control_REG_1 Arduino_CnSpitrl_reg1;
    
    void main (v_deft)
    {
    #ifdef DRV8301
    // Arduino _stat_reg1;tintran_intran_reg1;tv8spi_inci_intran1 (ve_di_intran1);tintran_intran1) C v8spi_inci_inci_inci_inctrl_r1 (v8301 + t_di_intran_intran1
    
    
    
    
    
    
    
    
    

     

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

    大家好、

    您的 SPI 配置看起来正常。 您可能需要检查以下几项:

    - GPIO 配置(我在您发布的代码中没有看到)

    -通过 PCLKCR0.SPIBENCLK 启用 SPI 外设时钟

    根据 您使用的软件包、您可以参考以下几个示例:

    C:\ti\c2000Ware_3_02_00_00\device_support\f2803x\examples\c28\spi_loopback

    C:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\SPI_loopback