【问题标题】:SPI with NXP CLRC663 : read only 0xFF带有 NXP CLRC663 的 SPI:只读 0xFF
【发布时间】:2021-09-22 11:11:43
【问题描述】:

我目前正在研究 NXP LPC55S06 处理器(来自 LPC55S06-EVK 演示板)和 NXP CLRC663 之间的 SPI 通信。

我集成了 NXP NFC 库来初始化 CLRC663,并在 .mex 文件中配置了 SPI 引脚。 我已经完成了接线,可以验证 SPI 命令的发送:

我的问题是 CLRC663 从不响应我发送的命令。

我已经检查了几次我的接线,我认为问题出在软件上。 由于问题既不能来自 NFC 库,也不能来自特定于 LPC55S06 处理器的 FSL 驱动程序,我怀疑它会来自此代码(由 NFC 库调用)完成的 SPI 配置:

#include "phDriver.h"
#include <board.h>
#include "BoardSelection.h"
#include "fsl_spi.h"
#define PHBAL_REG_LPCOPEN_SPI_ID               0x0DU       /**< ID for LPC Open SPI BAL component */


/**
* \brief Initialize the LPC Open SPI BAL layer.
*
* \return Status code
* \retval #PH_DRIVER_SUCCESS Operation successful.
* \retval #PH_ERR_INVALID_DATA_PARAMS Parameter structure size is invalid.
*/
phStatus_t phbalReg_Init(
                                      void * pDataParams,
                                      uint16_t wSizeOfDataParams
                                      )
{
    spi_master_config_t masterConfig = {0};
    if((pDataParams == NULL) || (sizeof(phbalReg_Type_t) != wSizeOfDataParams))
    {
        return (PH_DRIVER_ERROR | PH_COMP_DRIVER);
    }

    ((phbalReg_Type_t *)pDataParams)->wId      = PH_COMP_DRIVER | PHBAL_REG_LPCOPEN_SPI_ID;
    ((phbalReg_Type_t *)pDataParams)->bBalType = PHBAL_REG_TYPE_SPI;

    /* reset FLEXCOMM for SPI */
    RESET_PeripheralReset(LPC_SPI_NFC_RST);

    SPI_MasterGetDefaultConfig(&masterConfig);
    masterConfig.baudRate_Bps=7000000u; //7MHz
    SPI_MasterInit(LPC_SPI_NFC, &masterConfig,  LPC_SPI_NFC_CLOCKRATE);
    NVIC_SetPriority(LPC_SPI_NFC_IRQ,  7U);

    return PH_DRIVER_SUCCESS;
}

phStatus_t phbalReg_Exchange(
                                        void * pDataParams,
                                        uint16_t wOption,
                                        uint8_t * pTxBuffer,
                                        uint16_t wTxLength,
                                        uint16_t wRxBufSize,
                                        uint8_t * pRxBuffer,
                                        uint16_t * pRxLength
                                        )
{
        spi_transfer_t g_masterXfer;
        uint8_t * pRxBuf;
        status_t spiStatus;
        uint8_t g_dummyBuffer[260];

        memset(&g_masterXfer, 0, sizeof(spi_transfer_t));

        if(pRxBuffer == NULL)
        {
            pRxBuf = g_dummyBuffer;
        }
        else
        {
            pRxBuf = pRxBuffer;
        }

        /* Set up the transfer */
        g_masterXfer.txData = pTxBuffer;
        g_masterXfer.rxData = pRxBuf;
        g_masterXfer.dataSize = wTxLength;

        /* Start transfer */
        spiStatus =  SPI_MasterTransferBlocking(LPC_SPI_NFC,&g_masterXfer);

        if (spiStatus != kStatus_Success)
        {
            return (PH_DRIVER_FAILURE | PH_COMP_DRIVER);
        }

        if (pRxLength != NULL)
        {
            *pRxLength = wTxLength;
        }

        return PH_DRIVER_SUCCESS;
}

phStatus_t phbalReg_SetConfig(
                                         void * pDataParams,
                                         uint16_t wConfig,
                                         uint16_t wValue
                                         )
{
    return PH_DRIVER_SUCCESS;
}

phStatus_t phbalReg_GetConfig(
                                         void * pDataParams,
                                         uint16_t wConfig,
                                         uint16_t * pValue
                                         )
{
    return PH_DRIVER_SUCCESS;
}

知道与 CLRC663 的 SPI 通信是全双工的,您知道错误可能来自哪里吗?

【问题讨论】:

    标签: c nfc spi nxp-microcontroller


    【解决方案1】:

    我发现了我的问题所在。以下是我的重置是如何实现的:

    HIGH - 等待 20ms - LOW - 等待 20ms - HIGH

    this document 中提到:“通过 PDOWN 引脚上的高电平启用硬掉电。...要离开掉电模式,引脚 PDOWN 的电平应设置为低。"

    但是,我不得不做相反的事情,因为我将复位引脚保持在高电平,CLRC663 无法启动,所以它没有响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多