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.

[参考译文] TMS320F280049C:FSI 测试问题

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/862486/tms320f280049c-fsi-test-issue

器件型号:TMS320F280049C

您好、专家:

我的客户希望使用 FSI 在两个 C2000板之间进行通信。 我建议他们从 以下网址开始:http://www.ti.com/lit/an/spracm3/spracm3.pdf

首先、他们使用两个 LaunchPad、将代码下载到闪存中、但没有发生任何情况、两个 GPIO16都是低电平。 CLK 和 Data0中没有信号。

然后、他们尝试使用1个控制卡和1个 Launchpad。 我将_LAUNCHXL_F280049C 添加到预定义符号中以更改 GPIO。 使用 CCS、仿真模式连接两个电路板。 RAM 代码。 这一次、两个 GPIO16都是高电平。 但是、主控代码滞留在 ESTOP0 (FSI_ex16_DAISY_WASE_LEASE_LEAD.c);因为这是错误。

while (1){

#if FSI_DMA_ENABLE=0

//现在开始传输数据帧

//用新数据填充 TX 阵列
prepareTxBufData();

//将数据写入 Tx 缓冲区
//开始第一个传输
FSI_writeTxBuffer (FSITXA_base、txBufData、nWords、0U);
FSI_startTxTransmit (FSITXA_base);

//
//等待 TX 帧完成事件
//
while (fsitxInt1Receiven!= 1U);

//将 FSI TX 循环缓冲区指针设置回开头
FSI_setTxBufferPtr (FSITXA_base、0U);

//
//等待接收到的 RX 数据帧事件
//
while (fsiRxInt1Receivt!= 1U);

//将 FSI RX 循环缓冲区指针设置回开头
FSI_setRxBufferPtr (FSIRXA_base、0U);

if (错误=0)
{
fsitxInt1接收器= 0U;
fsirxInt1接收器= 0U;
}

其他
{
//通信过程中发生错误
ESTOP0;
}

我还更改了较低的 CLK、但没有任何变化。

#define 预分频器_VAL  FSI_PRESALE_10MHz

#define 预分频器_VAL  FSI_PRESALE_5MHZ

除此之外、我没有更改代码。  

您能告诉我哪里出了问题吗?

BR  

Emma

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

    尊敬的 Emma:

     在每个项目中、主控/节点中将 FSI_DMA_ENABLE 设置为什么? 这两个项目应相同。

    仅当使用 DMA 控制时、GPIO 16才会切换、即在节点和主控项目中将 FSI_DMA_ENABLE 设置为1。 然后、GPIO 16应在 FSI TX 传输开始时变为高电平、并在接收到完整的 FSI 数据帧时变为低电平。

    您在上面的代码片段中看到主控器件停止在第40行吗? 如果是这样、握手序列应该已经成功、但在数据帧数据包部分期间、您遇到帧类型/标签、User_Data 或数据错误。

    其他
    {
    //通信过程中发生错误
    ESTOP0;
    } 

    当您单击此 Estop 时、您能否比较下面的 FSI TX 和 RX 寄存器/缓冲区。 理想情况下、它们应是等效的、即传输的信息应等于接收到的信息。 您可以使用 CCS 寄存器窗口或存储器浏览器来检查这些寄存器。

    • FRAME_INFO
    • FRAME_TAG_UDATA
    • BUF_BASE

    最棒的

    Kevin

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

    大家好、Kevin,

    感谢您的建议。

    首先、 在节点和引线中将 FSI_DMA_ENABLE 设置为0。

    其次、这里是主控和节点的 TX/RX 寄存器信息,我认为它们 是等效的。

    对于铅、

    对于节点、

    请您为我指出一些错误?

    BR

    Emma

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

    尊敬的 Emma:

    很抱歉耽误你的时间。 我将在明天花更多的时间来看看这个问题。

    简单看一下您提供的寄存器、看起来可能存在 CRC 错误。 主控器件的 RX_CRC_INFO 寄存器与从器件的寄存器不匹配。 当存在某种形式的数据错误时、会生成 CRC 错误。

    这应该会标记 RX_EVT_STS.CRC_ERR 寄存器位、但它可能已在点击 Estop 之前被软件清除。

    最棒的

    Kevin

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

    尊敬的 Emma:

    您是否在解决此问题方面取得了任何进展?

    要检查通信期间是否存在数据错误、您可以使用 CCS 中的存储器浏览器检查每个器件的 TX 缓冲区(0x6640)和 RX 缓冲区(0x66C0)的内容。 您可以检查接收到的某个字是否与传输的字不匹配。

    请告诉我、您是否需要有关此方面的任何其他支持。

    最棒的

    Kevin