SPI Timeout Delay Calculation on MPC5674F

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

SPI Timeout Delay Calculation on MPC5674F

跳至解决方案
1,694 次查看
CNarendra
Contributor III

Hello,

I am working on an SPI driver for the MPC5674F microcontroller, which runs at 264 MHz, and I need to calculate the timeout delay for a polling-based SPI transaction. The SPI transfer completion is monitored using the Transfer Complete Flag (TCF), with a timeout based on iteration count. 

System Clock Details:

  • MCU Frequency = 264 MHz
  • Clock Period = 1/264MHz = 3.78787879 ns (approx. 3.79 ns per cycle)

Code Snippet:

 

#define SPI_MAX_WAIT_ITERATIONS 100

// Wait until the transfer is complete.
// The TCF bit indicates that all bits in a frame have been shifted out.
while (p_spi_config->port->SR.B.TCF == 0)
{
    if (iteration_counter++ > SPI_MAX_WAIT_ITERATIONS)
    {
        // If this point is reached, the SPI transfer did not complete
        // within the expected iterations.
        spi_status = eSPI_TIMEOUT;
        iteration_exceeded = true; // Set flag to break `for` loop
        break;                     // exit from while loop
    }
}

 

 

Delay Calculation:

Assuming iteration consists of:

  1. Reading the TCF bit (p_spi_config->port->SR.B.TCF == 0) → 2 cycles
  2. Incrementing iteration_counter → 1 cycle
  3. Comparing iteration_counter > SPI_MAX_WAIT_ITERATIONS → 1 cycle
  4. Branching back to loop start → 1 cycle

Total per iteration ≈ 5 clock cycles

IF SPI_MAX_WAIT_ITERATIONS = 100, total cycles before timeout:

Total Cycles =   100×5  =  500
Total Time    =  500×3.79 ns  =  1.89 microseconds

Questions:

  1. Is this delay calculation correct for the MPC5674F?
  2. Is 100 iterations a reasonable timeout, or should it be adjusted?
  3.  MPC5674F SPI module doesn't have any flags to detect errors like overrun ,frame errors etc as per status register . is there any way to detect errors ?

Any insights from the community would be greatly appreciated!

Thanks in advance!

Narendra C

MPC5674F , #POWERPC ARCHITECTURE

 

 

 

标记 (2)
0 项奖励
回复
1 解答
1,673 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

1) it will be more and not such straightforward you outlined. You should rather see how code is compiled and based on assembler code you can guess more, with help of instruction set  states in Core manual. However another setting on MCU, like I/D caches, memory wait states, crossbar setting/latency, comes into role.
But you can use some internal timer or simply toggle some pin to measure specific code execution time.
2) Depends on actual SPI transfer/bitrate setting
3) there is TXFIFO underflow and RXFIFO overflow indication. As transfer attributes are set prior to communication, must be same on Master/Slave, and SPI is synchronous communication with serial clock no such errors are expected.

BR, Petr

在原帖中查看解决方案

0 项奖励
回复
1 回复
1,674 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

1) it will be more and not such straightforward you outlined. You should rather see how code is compiled and based on assembler code you can guess more, with help of instruction set  states in Core manual. However another setting on MCU, like I/D caches, memory wait states, crossbar setting/latency, comes into role.
But you can use some internal timer or simply toggle some pin to measure specific code execution time.
2) Depends on actual SPI transfer/bitrate setting
3) there is TXFIFO underflow and RXFIFO overflow indication. As transfer attributes are set prior to communication, must be same on Master/Slave, and SPI is synchronous communication with serial clock no such errors are expected.

BR, Petr

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2040475%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMPC5674F%20%E4%B8%8A%E7%9A%84%20SPI%20%E8%B6%85%E6%97%B6%E5%BB%B6%E8%BF%9F%E8%AE%A1%E7%AE%97%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2040475%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E4%B8%BA%E8%BF%90%E8%A1%8C%E9%A2%91%E7%8E%87%E4%B8%BA%20264%20MHz%20%E7%9A%84%20MPC5674F%20%E5%BE%AE%E6%8E%A7%E5%88%B6%E5%99%A8%E5%BC%80%E5%8F%91%20SPI%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%8C%E6%88%91%E9%9C%80%E8%A6%81%E8%AE%A1%E7%AE%97%E5%9F%BA%E4%BA%8E%E8%BD%AE%E8%AF%A2%E7%9A%84%20SPI%20%E4%BA%8B%E5%8A%A1%E7%9A%84%E8%B6%85%E6%97%B6%E5%BB%B6%E8%BF%9F%E3%80%82%E4%BD%BF%E7%94%A8%E4%BC%A0%E8%BE%93%E5%AE%8C%E6%88%90%E6%A0%87%E5%BF%97%20(TCF)%20%E7%9B%91%E6%8E%A7%20SPI%20%E4%BC%A0%E8%BE%93%E5%AE%8C%E6%88%90%E6%83%85%E5%86%B5%EF%BC%8C%E5%B9%B6%E6%A0%B9%E6%8D%AE%E8%BF%AD%E4%BB%A3%E8%AE%A1%E6%95%B0%E8%AE%BE%E5%AE%9A%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4%E3%80%82%3C%2FP%3E%3CH3%20id%3D%22toc-hId-1944122233%22%20id%3D%22toc-hId-2004184577%22%3E%3CSTRONG%3E%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%EF%BC%9A%3C%2FSTRONG%3E%3C%2FH3%3E%3CUL%3E%3CLI%3E%3CSTRONG%3EMCU%E9%A2%91%E7%8E%87%3C%2FSTRONG%3E%3D%20%3CSTRONG%3E264MHz%3C%2FSTRONG%3E%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E6%97%B6%E9%92%9F%E5%91%A8%E6%9C%9F%20%3D%201%2F264MHz%20%3D%20%3CSPAN%20class%3D%22%22%3E3.78787879%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3Ens%EF%BC%88%E6%AF%8F%E5%91%A8%E6%9C%9F%E7%BA%A6%203.79%20ns%EF%BC%89%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSTRONG%3E%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5%EF%BC%9A%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSTRONG%3E%3C%2FP%3E%3CBR%20%2F%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23define%20SPI_MAX_WAIT_ITERATIONS%20100%0A%0A%2F%2F%20Wait%20until%20the%20transfer%20is%20complete.%0A%2F%2F%20The%20TCF%20bit%20indicates%20that%20all%20bits%20in%20a%20frame%20have%20been%20shifted%20out.%0Awhile%20(p_spi_config-%26gt%3Bport-%26gt%3BSR.B.TCF%20%3D%3D%200)%0A%7B%0A%20%20%20%20if%20(iteration_counter%2B%2B%20%26gt%3B%20SPI_MAX_WAIT_ITERATIONS)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20If%20this%20point%20is%20reached%2C%20the%20SPI%20transfer%20did%20not%20complete%0A%20%20%20%20%20%20%20%20%2F%2F%20within%20the%20expected%20iterations.%0A%20%20%20%20%20%20%20%20spi_status%20%3D%20eSPI_TIMEOUT%3B%0A%20%20%20%20%20%20%20%20iteration_exceeded%20%3D%20true%3B%20%2F%2F%20Set%20flag%20to%20break%20%60for%60%20loop%0A%20%20%20%20%20%20%20%20break%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20exit%20from%20while%20loop%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CH3%20id%3D%22toc-hId-136667770%22%20id%3D%22toc-hId-196730114%22%3E%3CSTRONG%3E%E5%BB%B6%E8%BF%9F%E8%AE%A1%E7%AE%97%EF%BC%9A%3C%2FSTRONG%3E%3C%2FH3%3E%3CP%3E%E5%81%87%E8%AE%BE%E8%BF%AD%E4%BB%A3%E5%8C%85%E6%8B%AC%EF%BC%9A%3C%2FP%3E%3COL%3E%3CLI%3E%E8%AF%BB%E5%8F%96%20TCF%20%E4%BD%8D%20(p_spi_config-%26gt%3Bport-%26gt%3BSR.B.TCF%20%3D%3D%200)%20%E2%86%92%202%20%E4%B8%AA%E5%91%A8%E6%9C%9F%3C%2FLI%3E%3CLI%3E%E5%A2%9E%E5%8A%A0%20iteration_counter%20%E2%86%92%201%20%E4%B8%AA%E5%91%A8%E6%9C%9F%3C%2FLI%3E%3CLI%3E%E6%AF%94%E8%BE%83%20iteration_counter%20%26gt%3B%20SPI_MAX_WAIT_ITERATIONS%20%E2%86%92%201%20%E4%B8%AA%E5%91%A8%E6%9C%9F%3C%2FLI%3E%3CLI%3E%E5%88%86%E6%94%AF%E5%9B%9E%E5%88%B0%E5%BE%AA%E7%8E%AF%E5%BC%80%E5%A7%8B%20%E2%86%92%201%20%E4%B8%AA%E5%BE%AA%E7%8E%AF%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%E6%AF%8F%E6%AC%A1%E8%BF%AD%E4%BB%A3%E6%80%BB%E8%AE%A1%20%E2%89%88%205%20%E4%B8%AA%E6%97%B6%E9%92%9F%E5%91%A8%E6%9C%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%E5%A6%82%E6%9E%9C%20SPI_MAX_WAIT_ITERATIONS%20%3D%20100%EF%BC%8C%E5%88%99%E8%B6%85%E6%97%B6%E5%89%8D%E7%9A%84%E6%80%BB%E5%91%A8%E6%9C%9F%E6%95%B0%EF%BC%9A%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E%E6%80%BB%E5%BE%AA%E7%8E%AF%E6%AC%A1%E6%95%B0%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E100%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%C3%97%3C%2FSPAN%3E%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E5%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%3D%3C%2FSPAN%3E%3C%2FSPAN%3E%20%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E500%3CBR%20%2F%3E%3CSPAN%20class%3D%22%22%3E%E6%80%BB%E6%97%B6%E9%97%B4%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3E%3D%3C%2FSPAN%3E%20500%20%3CSPAN%20class%3D%22%22%3E%C3%97%3C%2FSPAN%3E%203.79%3CSPAN%20class%3D%22%22%3E%E7%BA%B3%E7%A7%92%3C%2FSPAN%3E%3CSPAN%20class%3D%22%22%3E%3D%3C%2FSPAN%3E%201.89%3CSPAN%20class%3D%22%22%3E%E5%BE%AE%E7%A7%92%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CH3%20id%3D%22toc-hId--1670786693%22%20id%3D%22toc-hId--1610724349%22%3E%3CSTRONG%3E%E9%97%AE%E9%A2%98%EF%BC%9A%3C%2FSTRONG%3E%3C%2FH3%3E%3COL%3E%3CLI%3E%3CSTRONG%3E%E5%AF%B9%E4%BA%8E%20MPC5674F%20%E6%9D%A5%E8%AF%B4%EF%BC%8C%E8%BF%99%E4%B8%AA%E5%BB%B6%E8%BF%9F%E8%AE%A1%E7%AE%97%E6%AD%A3%E7%A1%AE%E5%90%97%EF%BC%9F%3C%2FSTRONG%3E%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E100%20%E6%AC%A1%E8%BF%AD%E4%BB%A3%E6%98%AF%E5%90%A6%E6%98%AF%E5%90%88%E7%90%86%E7%9A%84%E8%B6%85%E6%97%B6%EF%BC%8C%E8%BF%98%E6%98%AF%E5%BA%94%E8%AF%A5%E8%BF%9B%E8%A1%8C%E8%B0%83%E6%95%B4%EF%BC%9F%3C%2FSTRONG%3E%3C%2FLI%3E%3CLI%3E%3CSTRONG%3EMPC5674F%20SPI%20%E6%A8%A1%E5%9D%97%E6%B2%A1%E6%9C%89%E4%BB%BB%E4%BD%95%E6%A0%87%E5%BF%97%E6%9D%A5%E6%A0%B9%E6%8D%AE%E7%8A%B6%E6%80%81%E5%AF%84%E5%AD%98%E5%99%A8%E6%A3%80%E6%B5%8B%E6%BA%A2%E5%87%BA%E3%80%81%E5%B8%A7%E9%94%99%E8%AF%AF%E7%AD%89%E9%94%99%E8%AF%AF%E3%80%82%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E6%A3%80%E6%B5%8B%E9%94%99%E8%AF%AF%E5%90%97%EF%BC%9F%3C%2FSTRONG%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%E9%9D%9E%E5%B8%B8%E6%84%9F%E8%B0%A2%E7%A4%BE%E5%8C%BA%E7%9A%84%E4%BB%BB%E4%BD%95%E8%A7%81%E8%A7%A3%EF%BC%81%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E6%8F%90%E5%89%8D%E6%84%9F%E8%B0%A2%EF%BC%81%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3E%3CSTRONG%3E%E7%BA%B3%E4%BC%A6%E5%BE%B7%E6%8B%89%C2%B7C%3CBR%20%2F%3E%3CBR%20%2F%3E%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fc-pwmxy87654%2FMPC5674F%2Fpd-p%2FMPC5674F%22%20class%3D%22lia-product-mention%22%20data-product%3D%221071-1%22%20target%3D%22_blank%22%3EMPC5674F%3C%2FA%3E%20%EF%BC%8C%23POWERPC%E6%9E%B6%E6%9E%84%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22%22%3E%3CSPAN%20class%3D%22%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2040811%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9AMPC5674F%20SPI%20%E8%B6%85%E6%97%B6%E5%BB%B6%E8%BF%9F%E8%AE%A1%E7%AE%97%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2040811%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%2C%3C%2FP%3E%0A%3CP%3E1)%20%E5%AE%83%E5%B0%86%E6%9B%B4%E5%8A%A0%E7%AE%80%E5%8D%95%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E6%82%A8%E6%A6%82%E8%BF%B0%E7%9A%84%E9%82%A3%E4%B9%88%E7%AE%80%E5%8D%95%E3%80%82%E6%82%A8%E5%BA%94%E8%AF%A5%E4%BA%86%E8%A7%A3%E4%BB%A3%E7%A0%81%E6%98%AF%E5%A6%82%E4%BD%95%E7%BC%96%E8%AF%91%E7%9A%84%EF%BC%8C%E5%B9%B6%E4%B8%94%E6%82%A8%E5%8F%AF%E4%BB%A5%E6%A0%B9%E6%8D%AE%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81%E7%8C%9C%E6%B5%8B%E6%9B%B4%E5%A4%9A%E5%86%85%E5%AE%B9%EF%BC%8C%E5%B9%B6%E5%80%9F%E5%8A%A9%E6%A0%B8%E5%BF%83%E6%89%8B%E5%86%8C%E4%B8%AD%E7%9A%84%E6%8C%87%E4%BB%A4%E9%9B%86%E7%8A%B6%E6%80%81%E3%80%82%E7%84%B6%E8%80%8C%EF%BC%8CMCU%20%E4%B8%8A%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%AE%BE%E7%BD%AE%EF%BC%88%E5%A6%82%20I%2FD%20%E7%BC%93%E5%AD%98%E3%80%81%E5%86%85%E5%AD%98%E7%AD%89%E5%BE%85%E7%8A%B6%E6%80%81%E3%80%81%E4%BA%A4%E5%8F%89%E5%BC%80%E5%85%B3%E8%AE%BE%E7%BD%AE%2F%E5%BB%B6%E8%BF%9F%EF%BC%89%E5%BC%80%E5%A7%8B%E5%8F%91%E6%8C%A5%E4%BD%9C%E7%94%A8%E3%80%82%3CBR%20%2F%3E%E4%BD%86%E6%98%AF%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E4%B8%80%E4%BA%9B%E5%86%85%E9%83%A8%E8%AE%A1%E6%97%B6%E5%99%A8%E6%88%96%E7%AE%80%E5%8D%95%E5%9C%B0%E5%88%87%E6%8D%A2%E4%B8%80%E4%BA%9B%E5%BC%95%E8%84%9A%E6%9D%A5%E6%B5%8B%E9%87%8F%E7%89%B9%E5%AE%9A%E7%9A%84%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E3%80%82%3CBR%20%2F%3E2)%20%E5%8F%96%E5%86%B3%E4%BA%8E%E5%AE%9E%E9%99%85%20SPI%20%E4%BC%A0%E8%BE%93%2F%E6%AF%94%E7%89%B9%E7%8E%87%E8%AE%BE%E7%BD%AE%3CBR%20%2F%3E3%EF%BC%89%E6%9C%89TXFIFO%E4%B8%8B%E6%BA%A2%E5%92%8CRXFIFO%E6%BA%A2%E5%87%BA%E6%8C%87%E7%A4%BA%E3%80%82%E7%94%B1%E4%BA%8E%E4%BC%A0%E8%BE%93%E5%B1%9E%E6%80%A7%E6%98%AF%E5%9C%A8%E9%80%9A%E4%BF%A1%E4%B9%8B%E5%89%8D%E8%AE%BE%E7%BD%AE%E7%9A%84%EF%BC%8C%E5%9B%A0%E6%AD%A4%E4%B8%BB%2F%E4%BB%8E%E8%AE%BE%E5%A4%87%E4%B8%8A%E5%BF%85%E9%A1%BB%E7%9B%B8%E5%90%8C%EF%BC%8C%E5%B9%B6%E4%B8%94%20SPI%20%E6%98%AF%E4%B8%8E%E4%B8%B2%E8%A1%8C%E6%97%B6%E9%92%9F%E5%90%8C%E6%AD%A5%E7%9A%84%E9%80%9A%E4%BF%A1%EF%BC%8C%E5%9B%A0%E6%AD%A4%E4%B8%8D%E4%BC%9A%E5%87%BA%E7%8E%B0%E6%AD%A4%E7%B1%BB%E9%94%99%E8%AF%AF%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%2C%20Petr%3C%2FP%3E%3C%2FLINGO-BODY%3E