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.

TMS570LS3137: Td(scsl-senal)s exceeds DS max value

Part Number: TMS570LS3137


Hi experts,

My customer is testing the time of the SPI Slave Td(scsl-senal)s.

The time of Td(scsl-senal)s is as follows of DS.(CSHOLD = 0, CLOCK PHASE = 0, clock polarity = 0)

The formula for calculating the MAX value is as follows.

tc(vclk)+Tf(enan)s[ena]+27

The customer parameters are as follows.

Parameter Item Parameter unit
f(vclk) 90 MHz
tc(vclk) 11.11111111 ns
Tc(spc)m
[clock]
66.592 ns
Tr(spc)m[clock] 2.5 ns
Tf(spc)m[clock] 2.5 ns
Tr(spics)m[cs] 2.5 ns
Tf(spics)m[cs] 2.5 ns
Tr(miso)m[miso] 2.5 ns
Tr(enan)s[ena] 17.40 ns
Tf(enan)s[ena] 3.72 ns
C2Tdelay 8 -
T2Cdelay 8 -

Calculating Td(scsl-senal)s using this parameter the following:

=tc(vclk)+Tf(enan)s[ena]+27

=11.11  + 3.72 + 27

= 41.83ns

However, when the customer measures this waveform on the customer's original board, this value is 87.56ns.

In other words, it exceeds the maximum value of DS.

Do you know why this value exceeds the maximum value for DS?

Other than this parameter, it is within the range of the maximum value, so the waveform is correct except for this parameter.

The customers use two TMS570LS3137 boards, one for the SPI master and the other for the SPI slave for communication.

Best regards,
Sasaki

  • Hi Sasaki,

    I did not measure this delay time before. Does the SPI slave write the data to SPIDAT1 register before the SPI master drives the clock and CS signals?

  • Hi Wang-san,

    Thank you for your reply.

    I did not measure this delay time before. Does the SPI slave write the data to SPIDAT1 register before the SPI master drives the clock and CS signals?

    Yes. The SPI slave writes data to the SPIDAT1 register before the SPI master drives the clock and CS signals.

    /** @file sys_main.c 
    *   @brief Application main file
    *   @date 11-Dec-2018
    *   @version 04.07.01
    *
    *   This file contains an empty main function,
    *   which can be used for the application.
    */
    
    /* 
    * Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com 
    * 
    * 
    *  Redistribution and use in source and binary forms, with or without 
    *  modification, are permitted provided that the following conditions 
    *  are met:
    *
    *    Redistributions of source code must retain the above copyright 
    *    notice, this list of conditions and the following disclaimer.
    *
    *    Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in the 
    *    documentation and/or other materials provided with the   
    *    distribution.
    *
    *    Neither the name of Texas Instruments Incorporated nor the names of
    *    its contributors may be used to endorse or promote products derived
    *    from this software without specific prior written permission.
    *
    *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    */
    
    
    /* USER CODE BEGIN (0) */
    /* USER CODE END */
    
    /* Include Files */
    
    #include "sys_common.h"
    
    /* USER CODE BEGIN (1) */
    #include "mibspi.h"
    /* USER CODE END */
    
    /** @fn void main(void)
    *   @brief Application main function
    *   @note This function is empty by default.
    *
    *   This function is called after startup.
    *   The user can use this function to implement the application.
    */
    
    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    
    int main(void)
    {
    /* USER CODE BEGIN (3) */
        uint16 TX1_data[8] = {0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888};
        uint16 RX1_data[8] = {0};
    
        uint16 TX3_data[8] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8};
        uint16 RX3_data[8] = {0};
    
        mibspiInit();
    
        while(1)
        {
            mibspiSetData(mibspiREG1, 0, &TX1_data[0]);
            mibspiSetData(mibspiREG3, 0, &TX3_data[0]);
    
            mibspiTransfer(mibspiREG3, 0);
            mibspiTransfer(mibspiREG1, 0);
    
            while(mibspiIsTransferComplete(mibspiREG1, 0) == FALSE);
            while(mibspiIsTransferComplete(mibspiREG3, 0) == FALSE);
            mibspiGetData(mibspiREG3, 0, &RX3_data[0]);
            mibspiGetData(mibspiREG1, 0, &RX1_data[0]);
    
        }
    
    
    
    /* USER CODE END */
    
        return 0;
    }
    
    
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    
    MIBSPI1Master_MIBSPI3Slave.zip

    Best regards,
    Sasaki