PN7462 I2CM Configuration and EEPROM Communication Example Request

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

PN7462 I2CM Configuration and EEPROM Communication Example Request

106 次查看
uday_gowda
Contributor II

Hi Team,

I am trying to use the PN7462 I2C Master (I2CM) interface to communicate with an external EEPROM (24AA025UID / AT25M02).

My I2CM initialization is as follows:

phStatus_t I2C_Init(void)
{
    phStatus_t status;
    uint8_t bBaudRate;

    bBaudRate = (uint8_t)
        ((PH_EXHIF_HW_CRYSTAL_CLK / 100000UL) -
         PH_EXHIF_HW_CRYSTAL_CLK_MHZ);

    status = phhalI2CM_Init(
                PH_EXHIF_HW_I2CM_TX_FIFO_THRES,
                PH_EXHIF_HW_I2CM_RX_FIFO_THRES,
                PH_EXHIF_HW_I2CM_TIMEOUT,
                PH_EXHIF_HW_I2CM_RETRY_CNT);

    if(status != PH_ERR_SUCCESS)
    {
        return status;
    }

    status = phhalI2CM_Config(
                243,
                0x09,
                E_I2CM_7BIT_ADDR_MODE);

    phHal_Nvic_EnableInterrupt(PH_HAL_NVIC_I2C_MASK);

    return status;
}

I am using phhalI2CM_SlaveCheck(), phhalI2CM_Transmit(), and phhalI2CM_Receive() to access the EEPROM.

Could you please provide:

  1. I have initialized I2CM using phhalI2CM_Init() and phhalI2CM_Config(), and enabled the I2C interrupt. However, when I call phhalI2CM_SlaveCheck(), I get a HardFault.

    Could you please share:

    • Any I2CM EEPROM read/write example project for PN7462.
    • The recommended I2CM initialization sequence.
    • Any required PCR/PAD configuration.
    • Any OSAL/Event initialization required before using phhalI2CM_SlaveCheck(), phhalI2CM_Transmit(), and phhalI2CM_Receive().

Currently, transmit and slavecheck results in a HardFault, so I would like to verify that the I2CM initialization and usage sequence is correct.

Thanks,
Uday

0 项奖励
回复
2 回复数

80 次查看
EduardoZamora
NXP TechSupport
NXP TechSupport

Hello @uday_gowda

Unfortunately, there is no specific demo for I2C EEPROM read/write. I will recommend you referring to PN7462AU_ex_phExHif demo (from latest NFC Reader Library for PN7462) for I2CM initialization and operation.

For I2CM Tx tests, please comment the lines used for GPIO evaluation or sync:

- src/phExHif.c -> around lines 76, 84, 94, 108 (this line is used for reception)

- src/phExHif_Hw.c -> around lines 120, 126, 142 (hardcode bHifInterface), 210 (hardcode bCommChannel to 1)

Also, please consider changing Optimization level to None (-O0).

Regards,
Eduardo.

0 项奖励
回复

19 次查看
uday_gowda
Contributor II

Hello @EduardoZamora,

Thank you for your response.

I am using the following I2CM initialization and EEPROM read implementation, which works correctly in the PN7462AU_ex_phExHif demo project:

phStatus_t I2C_Init(void)
{
    phStatus_t status;
    uint8_t bBaudRate;

    bBaudRate = (uint8_t)
        ((PH_EXHIF_HW_CRYSTAL_CLK / 100000UL) -
         PH_EXHIF_HW_CRYSTAL_CLK_MHZ);

    status = phhalI2CM_Init(
                PH_EXHIF_HW_I2CM_TX_FIFO_THRES,
                PH_EXHIF_HW_I2CM_RX_FIFO_THRES,
                PH_EXHIF_HW_I2CM_TIMEOUT,
                PH_EXHIF_HW_I2CM_RETRY_CNT);

    if(status != PH_ERR_SUCCESS)
    {
        return status;
    }

    status = phhalI2CM_Config(
                0x40,
                0x09,
                E_I2CM_7BIT_ADDR_MODE);

    return status;
}

#define EEPROM_ADDR      (0x50U)

#define EEPROM_MFG_ADDR  (0xFAU)
#define EEPROM_DEV_ADDR  (0xFBU)
#define EEPROM_UID_ADDR  (0xFCU)

phStatus_t EEPROM_ReadUID(uint8_t uid[4])
{
    return EEPROM_Read(
                EEPROM_UID_ADDR,
                uid,
                4);
}

static phStatus_t EEPROM_Read(uint8_t memAddr,
                              uint8_t *pData,
                              uint16_t length)
{
    phStatus_t status;

    uint32_t txBuf[4];
    uint32_t rxBuf[64] = {0};

    txBuf[0] = memAddr;

    status = phhalI2CM_Transmit(
                EEPROM_ADDR,
                1,
                txBuf);

    if(status != PH_ERR_SUCCESS)
    {
        return status;
    }

    status = phhalI2CM_Receive(
                EEPROM_ADDR,
                length,
                rxBuf);

    if(status != PH_ERR_SUCCESS)
    {
        return status;
    }

    memcpy(pData, (uint8_t *)rxBuf, length);

    return PH_ERR_SUCCESS;
}

This exact code works in the PN7462AU_ex_phExHif demo. However, when integrated into my application and also phExMain example, it causes a HardFault.

Apart from commenting the GPIO evaluation/sync lines and changing the optimization level to -O0, is there any additional configuration required in phExMain and on my application for I2CM operation?

Regards,
Uday Gowda

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2375843%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EPN7462%20I2CM%20%E9%85%8D%E7%BD%AE%E5%92%8C%20EEPROM%20%E9%80%9A%E4%BF%A1%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2375843%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%97%A8%EF%BC%8C%E5%9B%A2%E9%98%9F%E3%80%81%3C%2FP%3E%3CP%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20PN7462%20I2C%20%E4%B8%BB%20(I2CM)%20%E6%8E%A5%E5%8F%A3%E4%B8%8E%E5%A4%96%E9%83%A8%20EEPROM%EF%BC%8824AA025UID%20%2F%20AT25M02%EF%BC%89%E9%80%9A%E4%BF%A1%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E7%9A%84%20I2CM%20%E5%88%9D%E5%A7%8B%E5%8C%96%E8%BF%87%E7%A8%8B%E5%A6%82%E4%B8%8B%EF%BC%9A%3C%2FP%3E%3CPRE%20translate%3D%22no%22%3EphStatus_t%20I2C_Init(void)%0A%7B%0A%20%20%20%20phStatus_t%20status%3B%0A%20%20%20%20uint8_t%20bBaudRate%3B%0A%0A%20%20%20%20bBaudRate%20%3D%20(uint8_t)%0A%20%20%20%20%20%20%20%20((PH_EXHIF_HW_CRYSTAL_CLK%20%2F%20100000UL)%20-%0A%20%20%20%20%20%20%20%20%20PH_EXHIF_HW_CRYSTAL_CLK_MHZ)%3B%0A%0A%20%20%20%20status%20%3D%20phhalI2CM_Init(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PH_EXHIF_HW_I2CM_TX_FIFO_THRES%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PH_EXHIF_HW_I2CM_RX_FIFO_THRES%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PH_EXHIF_HW_I2CM_TIMEOUT%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PH_EXHIF_HW_I2CM_RETRY_CNT)%3B%0A%0A%20%20%20%20if(status%20!%3D%20PH_ERR_SUCCESS)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20return%20status%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20status%20%3D%20phhalI2CM_Config(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20243%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200x09%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20E_I2CM_7BIT_ADDR_MODE)%3B%0A%0A%20%20%20%20phHal_Nvic_EnableInterrupt(PH_HAL_NVIC_I2C_MASK)%3B%0A%0A%20%20%20%20return%20status%3B%0A%7D%3C%2FPRE%3E%3CP%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%20phhalI2CM_SlaveCheck()%E3%80%81phhalI2CM_Transmit()%20%E5%92%8C%20phhalI2CM_Receive()%20%E8%AE%BF%E9%97%AE%20EEPROM%E3%80%82%3C%2FP%3E%3CP%3E%E8%AF%B7%E6%8F%90%E4%BE%9B%3C%2FP%3E%3COL%3E%3CLI%3E%3CP%3E%E6%88%91%E4%BD%BF%E7%94%A8%20phhalI2CM_Init()%20%E5%92%8C%20phhalI2CM_Config()%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BA%86%20I2CM%EF%BC%8C%E5%B9%B6%E5%90%AF%E7%94%A8%E4%BA%86%20I2C%20%E4%B8%AD%E6%96%AD%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E5%BD%93%E6%88%91%E8%B0%83%E7%94%A8%20phhalI2CM_SlaveCheck()%20%E6%97%B6%EF%BC%8C%E5%8D%B4%E5%87%BA%E7%8E%B0%E4%BA%86%20HardFault%E3%80%82%3C%2FP%3E%3CP%3E%E8%AF%B7%E6%82%A8%E5%88%86%E4%BA%AB%E4%B8%80%E4%B8%8B%EF%BC%9A%3C%2FP%3E%3CUL%3E%3CLI%3EPN7462%20%E7%9A%84%E4%BB%BB%E4%BD%95%20I2CM%20EEPROM%20%E8%AF%BB%2F%E5%86%99%E7%A4%BA%E4%BE%8B%E9%A1%B9%E7%9B%AE%E3%80%82%3C%2FLI%3E%3CLI%3E%E5%BB%BA%E8%AE%AE%E7%9A%84%20I2CM%20%E5%88%9D%E5%A7%8B%E5%8C%96%E9%A1%BA%E5%BA%8F%E3%80%82%3C%2FLI%3E%3CLI%3E%E4%BB%BB%E4%BD%95%E6%89%80%E9%9C%80%E7%9A%84%20PCR%2FPAD%20%E9%85%8D%E7%BD%AE%E3%80%82%3C%2FLI%3E%3CLI%3E%E4%BD%BF%E7%94%A8%20phhalI2CM_SlaveCheck()%E3%80%81phhalI2CM_Transmit()%20%E5%92%8C%20phhalI2CM_Receive()%20%E4%B9%8B%E5%89%8D%E9%9C%80%E8%A6%81%E8%BF%9B%E8%A1%8C%E7%9A%84%E4%BB%BB%E4%BD%95%20OSAL%2FEvent%20%E5%88%9D%E5%A7%8B%E5%8C%96%E3%80%82%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%E7%9B%AE%E5%89%8D%EF%BC%8C%E5%8F%91%E9%80%81%E5%92%8C%E4%BB%8E%E5%B1%9E%E6%A3%80%E6%9F%A5%E4%BC%9A%E5%AF%BC%E8%87%B4%20HardFault%EF%BC%8C%E5%9B%A0%E6%AD%A4%E6%88%91%E6%83%B3%E9%AA%8C%E8%AF%81%20I2CM%20%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E4%BD%BF%E7%94%A8%E9%A1%BA%E5%BA%8F%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E3%80%82%3C%2FP%3E%3CP%3E%E8%B0%A2%E8%B0%A2%EF%BC%8C%3CBR%20%2F%3EUday%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2376132%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20PN7462%20I2CM%20Configuration%20and%20EEPROM%20Communication%20Example%20Request%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2376132%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F261175%22%20target%3D%22_blank%22%3E%40uday_gowda%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E9%81%97%E6%86%BE%E7%9A%84%E6%98%AF%EF%BC%8C%E6%B2%A1%E6%9C%89%E4%B8%93%E9%97%A8%E7%9A%84%20I2C%20EEPROM%20%E8%AF%BB%2F%E5%86%99%E6%BC%94%E7%A4%BA%E3%80%82%E6%88%91%E5%BB%BA%E8%AE%AE%E4%BD%A0%E5%8F%82%E8%80%83%20pn7462au_ex_phexHIF%20%E6%BC%94%E7%A4%BA%EF%BC%88%E6%9D%A5%E8%87%AA%E6%9C%80%E6%96%B0%E7%9A%84%20PN7462%20%3CA%20href%3D%22https%3A%2F%2Fwww.nxp.com%2Fapplications%2Ftechnologies%2Fsecurity%2Findustrial-security%2Fnfc-reader-library-software-support-for-nfc-frontend-solutions%3ANFC-READER-LIBRARY%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3ENFC%E8%AF%BB%E5%8F%96%E5%99%A8%E5%BA%93%3C%2FA%3E%EF%BC%89%E8%BF%9B%E8%A1%8C%20I2CM%20%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E6%93%8D%E4%BD%9C%E3%80%82%3C%2FP%3E%0A%3CP%3E%E5%AF%B9%E4%BA%8E%20I2CM%20Tx%20%E6%B5%8B%E8%AF%95%EF%BC%8C%E8%AF%B7%E6%B3%A8%E9%87%8A%E7%94%A8%E4%BA%8E%20GPIO%20%E8%AF%84%E4%BC%B0%E6%88%96%E5%90%8C%E6%AD%A5%E7%9A%84%E7%BA%BF%E8%B7%AF%EF%BC%9A%3C%2FP%3E%0A%3CP%3E-%20src%2FphExHif.c-%26gt%3B%20%E7%AC%AC%2076%E3%80%8184%E3%80%8194%E3%80%81108%20%E8%A1%8C%E9%99%84%E8%BF%91%EF%BC%88%E8%AF%A5%E8%A1%8C%E7%94%A8%E4%BA%8E%E6%8E%A5%E6%94%B6%EF%BC%89%E3%80%82%3C%2FP%3E%0A%3CP%3E-%20src%2FphExHif_Hw.c-%26gt%3B%20%E7%AC%AC%20120%E3%80%81126%E3%80%81142%EF%BC%88%E5%B0%86%20bHifInterface%20%E7%A1%AC%E7%BC%96%E7%A0%81%EF%BC%89%E3%80%81210%EF%BC%88%E5%B0%86%20bCommChannel%20%E7%A1%AC%E7%BC%96%E7%A0%81%E4%B8%BA%201%EF%BC%89%E8%A1%8C%E5%91%A8%E5%9B%B4%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%AD%A4%E5%A4%96%EF%BC%8C%E8%AF%B7%E8%80%83%E8%99%91%E5%B0%86%E4%BC%98%E5%8C%96%E7%BA%A7%E5%88%AB%E6%9B%B4%E6%94%B9%E4%B8%BA%E6%97%A0%20(-O0)%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CBR%20%2F%3EEduardo%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E