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.

[参考译文] TMS320F28379D:SPI 时序问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1135838/tms320f28379d-spi-timing-issues

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

大家好、

以下是客户可能需要您帮助的一些问题:

我使用示波器测试 SPI 通信时序。 SPIA 自接收和自发送、SPIA 主器件和 SPIB 从器件分别经过测试。

CCS 调试接口在 SPIA 自接收和自检期间正常显示。 示波器测量 SCLK、如下图所示、8个脉冲在一组中、单个脉冲的宽度为12.4us (高电平和低电平时间均为6.2us)、但每组脉冲之间将有31.4us 的时间间隔。 这是正常的吗?

测量了 SIMO 引脚、发现它将继续发送相同的数据。 测量时间约为32.3ms、数据重复约243次。 如何解决此问题?

以下是 SPIA 自接收和自发送的程序:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* SPI self-receive and self-transmit
*
*/
#include "F28x_Project.h"
typedef unsigned char Uint8;
//statement
void gpio_init(); //Configure all GPIO ports connected to the PCB board (including 3-wire SPI)
void spia_init();
void spia_xmit(Uint8 a);
//global variable
char sdata;
char rdata;
void main()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

用于 SPIA 主器件 SPIB 从器件测试的连接:

SPIA CLK-SPIB CLK

SPIA SIMO-SPIB SOMI

SPIA SOMI-SPIB SIMO

SCLK 波形与 SPIA 波形相同、但在正常运行一段时间后、调试接口显示 RDATA 始终为 FFFF、SpiaRegs.spits 位.INT_flag 始终为1、而 while 环路不能跳出。 这应该如何解决?

针对 SPIA 主器件和 SPIB 从器件的程序:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
*
*
*/
#include "F28x_Project.h"
typedef unsigned char Uint8;
void gpio_init();
void spia_init();
void spia_xmit(Uint8 a);
void spib_init();
void spib_xmit(Uint8 a);
char sdata;
char rdata;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

谢谢、此致

耶鲁李

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

    您好、Yale、

    [引用 userid="514648" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1135838/tms320f28379d-spi-timing-issues ]SPIA 自接收和自检期间 CCS 调试接口正常显示。 示波器测量 SCLK、如下图所示、8个脉冲在一组中、单个脉冲的宽度为12.4us (高电平和低电平时间均为6.2us)、但每组脉冲之间将有31.4us 的时间间隔。 这是否正常?

    时间对我来说似乎是正确的。 您的 SPICLK 看起来以80.6kHz 的频率运行。 由于 LSPCLK 设置为/10并且 BRR 设置为124、这意味着您的 MCU SYSCLK 以80.6kHz *(124+1)*(10)= 100MHz 的频率运行。 根据您的期望、这听起来是否正确?

    "分组"也是正常的、因为您在 SPI 配置中未使用 FIFO 模式。  如果需要连续数据、则必须启用 FIFO 模式。 C2000ware 中提供了几个示例、可为您展示如何执行该操作。

    [引用 userid="514648" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1135838/tms320f28379d-spi-timing-issues ]*测量了 SIMO 引脚、发现它将继续发送相同的数据。 测量时间约为32.3ms、数据重复约243次。 如何解决此问题?[/quot]

    在 SPIA_xmit 代码中、您要向 uint16寄存器写入 uint8值。 我认为编译器应该已经标记了有关这一点的警告。 由于 SPI 配置为8位、并且 SPITXBUF 的 MSB 始终首先移出、因此您还需要将数据移动<< 8 (有关更多信息、请参阅 TRM)。 下面是我认为您的代码应该是什么样的:

    Fullscreen
    1
    2
    3
    4
    5
    void spia_xmit(Uint8 a)
    {
    SpiaRegs.SPITXBUF = (Uint16)(a<<8);//Pass 8-bit data to serial transmit buffer
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    [引用 userid="514648" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1135838/tms320f28379d-spi-timing-issues ]SCLK 波形与 SPIA 波形相同、但在正常运行一段时间后、调试接口会显示 RDATA 始终为 FFFF、SpiaRegs.spit.bit.INT_flag 始终为1、并且无法跳出 while 环路。 如何解决此问题?[/报价]

    我没有看到您的 spib_xmit()代码,因此不太确定问题可能是什么。 但假设您使用的代码与 SPIA_xmit()类似,则需要进行与上述相同的更改。  

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

    您好、Gus、

    感谢您的回复。

    我的客户如您所说修改了 SPIA_xmit ()和 spib_xmit ()、并在 main 函数中添加了将数据从 spib 发送到 SPIA 的代码。  但是、调试接口显示 SPIA 可以正常接收 spib 的数据、而 spib 的 RXBUF 仍然始终为 FF。

    以下是修改后的程序:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*
    *
    *
    */
    #include "F28x_Project.h"
    typedef unsigned char Uint8;
    void gpio_init();
    void spia_init();
    void spia_xmit(Uint8 a);
    void spib_init();
    void spib_xmit(Uint8 a);
    char sdata;
    char rdata;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    这种情况的原因是什么?

    谢谢、此致

    耶鲁李

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

    耶鲁大学

    客户在 SPIA 和 spib 中都启用了环回模式。 应为两个接口禁用 Looback 模式。

    SpibRegs.SPICCR.bit.SPILBK = 1;

    SpiaRegs.SPICCR.bit.SPILBK = 1;

    来自 TRM:

    环回模式允许在器件测试期间进行模块验证。 此模式仅在 SPI 的主模式下有效。

    • 复位类型:SYSRSn
    • 0h (R/W)=禁用 SPI 环回模式。 这是复位后的默认值。
    • 1h (R/W)=启用 SPI 回路模式、SIMO/SOMI 线路在内部连接。 用于模块自检。