MCUBOOT / Application - problem with SPI interface

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

MCUBOOT / Application - problem with SPI interface

781 次查看
gorakk
Contributor IV

I have system that is using a K22FN512 as a SPI slave to a K61 master.

The K61 is meant to communicate to the K22 through SPI - for normal operation and also for loading new application firmware into the K22. 

What I am seeing is that if the application is loaded normally, without a bootloader, the K61 and K22 can communicate.

If the K22 application is loaded by the bootloader - the application call to:

DSPI_FlushFifo ( base, true, true )

within the DSPI_SlaveTransferNonBlocking() function will crash.

If I change DSPI_SlaveTransferNonBlocking() to use:

DSPI_FlushFifo ( base, false, true )  // don't flush the TX FIFO‍

the K22 application will not crash - but it also doesn't respond to the master. 

In this state the K22 is still able to receive data from the K61 but I don't see anything coming from the K22 (verified with an oscilloscope).

The DSPI_FlushFifo() function just sets a couple of bits in the MCR register:

/*!
 * @brief Flushes the DSPI FIFOs.
 *
 * @param base DSPI peripheral address.
 * @param flushTxFifo Flushes (true) the Tx FIFO; Otherwise, does not flush (false) the Tx FIFO
 * @param flushRxFifo Flushes (true) the Rx FIFO; Otherwise, does not flush (false) the Rx FIFO
 */
static inline void DSPI_FlushFifo(SPI_Type *base, bool flushTxFifo, bool flushRxFifo)
{
 base->MCR = (base->MCR & (~(SPI_MCR_CLR_TXF_MASK | SPI_MCR_CLR_RXF_MASK))) |
 SPI_MCR_CLR_TXF((true == flushTxFifo ? 1U : 0U)) | SPI_MCR_CLR_RXF((true == flushRxFifo ? 1U : 0U));
}‍‍‍‍‍‍‍‍‍‍‍‍

1) Under what conditions could setting the CLR_TXF bit in the MCR register cause a problem?

2) Could the MCU bootloader be leaving the SPI peripheral in a state that DSPI_SlaveTransferNonBlocking() isn't expecting?

MCUXpresso IDE v11.0.0

SDK 2.6.0

MCUBOOT 2.7.0

0 项奖励
回复
1 回复

681 次查看
jingpan
NXP TechSupport
NXP TechSupport

Hi Allen,

1. What do you mean of crash, hardfault? The only situation I can image is the SPI peripheral clock isn't set.

2. No, it couldn't. These application is base on the driver. If the SPI is initialized well, is won't cause crash.

Regards,

Jing 

0 项奖励
回复