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.

TMS320F280039C: FSI Communication Error Occur When Two Devices Communicate With Each Other With External Wiring

Part Number: TMS320F280039C
Other Parts Discussed in Thread: C2000WARE

Tool/software:

      I recently used FSI communication for high-speed communication between two devices(without FSI interrupts enabled).I used the SysCfg tool to configure the FSI module. The specific configuration is shown in the following figure.


       Both devices have enabled FSI sending and receiving functions to achieve full duplex.Within the 1ms timer interrupt set, two devices send data frames containing 16 pieces of data to each other. In the while(1) loop, both devices repeatedly call the receive function for data processing.
       However, after observation, the receiving devices often experience receiving errors.The following are code snippets for Transmitting and receiving processing and the status of the FSI_RX Resigster.

void ComFSI_TxLoop()	// In the 1ms Timer Interrupt
{
    FSI_setTxSoftwareFrameSize(dFSI_TxBase, 16);
    FSI_setTxFrameTag(dFSI_TxBase, FSI_FRAME_TAG0);
    FSI_setTxFrameType(dFSI_TxBase, FSI_FRAME_TYPE_NWORD_DATA);

    ComFSI.TxEventStatus = FSI_getTxEventStatus(dFSI_TxBase);
    if(ComFSI.TxEventStatus & (FSI_TX_EVT_BUF_UNDERRUN | FSI_TX_EVT_BUF_OVERRUN))
    {
        FSI_resetTxModule (dFSI_TxBase, FSI_TX_MAIN_CORE_RESET);
    }
    FSI_clearTxEvents(dFSI_RxBase,ComFSI.TxEventStatus);
    ComFSI.TxEventStatus = 0;

    FSI_setTxUserDefinedData(dFSI_TxBase, ComFSI.TxUserData.all);

    FSI_writeTxBuffer(dFSI_TxBase, ComFSI.TxData.Array, dFSI_TxWords, 0U);

    FSI_startTxTransmit(dFSI_TxBase);    // Start Transfer

}

void ComFSI_RxLoop()	// In the While(1) Loop
{
    ComFSI.RxEventStatus = FSI_getRxEventStatus(dFSI_RxBase);

    if( ComFSI.RxEventStatus & (FSI_RX_EVT_FRAME_DONE | FSI_RX_EVT_DATA_FRAME) )
    {
        ComFSI.RecvDataFrameFlg = 1;
        ComFSI.RxUserData.all = FSI_getRxUserDefinedData(dFSI_RxBase);
        FSI_readRxBuffer(dFSI_RxBase, ComFSI.RxData.Array, dFSI_RxWords, 0);
    }
    else if( ComFSI.RxEventStatus & (FSI_RX_EVT_CRC_ERR | FSI_RX_EVT_TYPE_ERR | FSI_RX_EVT_EOF_ERR | FSI_RX_EVT_ERR_FRAME
            | FSI_RX_EVT_OVERRUN | FSI_RX_EVT_UNDERRUN | FSI_RX_EVT_FRAME_OVERRUN) )
    {
        RxErrCnt ++;
        FSIRX_init();
        ComFSI_Init();
        FSI_executeTxFlushSequence(dFSI_TxBase, dFSI_TxCLK_Prescalar);
    }

    FSI_clearRxEvents(dFSI_RxBase,ComFSI.RxEventStatus);
    ComFSI.RxEventStatus = 0;
}

     It is worth mentioning that this type of receiving error does not occur for a period of time after starting communication,but it will be triggered after a period of communication and needs to be restored by resetting the FSI module.

      In addition, when I used two other devices (F280025) with the same configuration and code for FSI communication, this phenomenon did not occur.When I used one F280025 and one F280039, the latter still had reception issues.So I guess the problem lies with F280039C, but I'm not sure what the specific problem is although I have consulted relevant information about FSI
I hope anyone can help.