PN7462 I2CM Configuration and EEPROM Communication Example Request

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

PN7462 I2CM Configuration and EEPROM Communication Example Request

119件の閲覧回数
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 返答(返信)

93件の閲覧回数
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 件の賞賛
返信

32件の閲覧回数
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%E6%A7%8B%E6%88%90%E3%81%8A%E3%82%88%E3%81%B3EEPROM%E9%80%9A%E4%BF%A1%E4%BE%8B%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2375843%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%83%81%E3%83%BC%E3%83%A0%E3%81%AE%E7%9A%86%E3%81%95%E3%82%93%E3%80%81%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%82%3C%2FP%3E%3CP%3E%E7%A7%81%E3%81%AFPN7462%20I2C%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%EF%BC%88I2CM%EF%BC%89%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E5%A4%96%E9%83%A8EEPROM%EF%BC%8824AA025UID%20%2F%20AT25M02%EF%BC%89%E3%81%A8%E9%80%9A%E4%BF%A1%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E7%A7%81%E3%81%AEI2CM%E5%88%9D%E6%9C%9F%E5%8C%96%E6%89%8B%E9%A0%86%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%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%E7%A7%81%E3%81%AF%E3%80%81EEPROM%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABphhalI2CM_SlaveCheck()%E3%80%81phhalI2CM_Transmit()%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3phhalI2CM_Receive()%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E4%BB%A5%E4%B8%8B%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E3%81%94%E6%8F%90%E4%BE%9B%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%99%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%EF%BC%9F%3C%2FP%3E%3COL%3E%3CLI%3E%3CP%3EphhalI2CM_Init()%E3%81%A8phhalI2CM_Config()%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6I2CM%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%80%81I2C%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%97%E3%81%8B%E3%81%97%E3%80%81phhalI2CM_SlaveCheck()%20%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%81%A8%E3%80%81%E3%83%8F%E3%83%BC%E3%83%89%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%9C%E3%81%B2%E5%85%B1%E6%9C%89%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%EF%BC%9A%3C%2FP%3E%3CUL%3E%3CLI%3EPN7462%E7%94%A8%E3%81%AEI2CM%20EEPROM%E8%AA%AD%E3%81%BF%E6%9B%B8%E3%81%8D%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%80%82%3C%2FLI%3E%3CLI%3E%E6%8E%A8%E5%A5%A8%E3%81%95%E3%82%8C%E3%82%8BI2CM%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E3%80%82%3C%2FLI%3E%3CLI%3E%E5%BF%85%E8%A6%81%E3%81%AAPCR%2FPAD%E6%A7%8B%E6%88%90%E3%80%82%3C%2FLI%3E%3CLI%3EphhalI2CM_SlaveCheck()%E3%80%81phhalI2CM_Transmit()%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3phhalI2CM_Receive()%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AB%E3%80%81OSAL%2F%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E6%83%85%E5%A0%B1%20%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%3C%2FLI%3E%3C%2FUL%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%E7%8F%BE%E5%9C%A8%E3%80%81%E9%80%81%E4%BF%A1%E3%81%A8%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E8%A1%8C%E3%81%86%E3%81%A8%E3%83%8F%E3%83%BC%E3%83%89%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81I2CM%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%A8%E4%BD%BF%E7%94%A8%E6%89%8B%E9%A0%86%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E8%80%83%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%80%81%3CBR%20%2F%3E%E3%82%A6%E3%83%80%E3%82%A4%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F261175%22%20target%3D%22_blank%22%3E%40uday_gowda%20%E3%81%95%E3%82%93%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E6%AE%8B%E5%BF%B5%E3%81%AA%E3%81%8C%E3%82%89%E3%80%81I2C%20EEPROM%E3%81%AE%E8%AA%AD%E3%81%BF%E6%9B%B8%E3%81%8D%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E3%83%87%E3%83%A2%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82I2CM%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%A8%E5%8B%95%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%E3%80%81PN7462AU_ex_phExHif%E3%83%87%E3%83%A2%EF%BC%88PN7462%E7%94%A8%E6%9C%80%E6%96%B0%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%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%3C%2FA%3E%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E3%81%8A%E5%8B%A7%E3%82%81%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3EI2CM%20Tx%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81GPIO%E8%A9%95%E4%BE%A1%E3%81%BE%E3%81%9F%E3%81%AF%E5%90%8C%E6%9C%9F%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E8%A1%8C%E3%82%92%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CP%3E-%20src%2FphExHif.c%E2%86%92%2076%E3%80%8184%E3%80%8194%E3%80%81108%E7%95%AA%E7%B7%9A%E4%BB%98%E8%BF%91%EF%BC%88%E3%81%93%E3%81%AE%E7%B7%9A%E3%81%AF%E5%8F%97%E4%BF%A1%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%EF%BC%89%3C%2FP%3E%0A%3CP%3E-%20src%2FphExHif_Hw.c-%26gt%3B%20120%E8%A1%8C%E7%9B%AE%E3%80%81126%E8%A1%8C%E7%9B%AE%E3%80%81142%E8%A1%8C%E7%9B%AE%EF%BC%88bHifInterface%E3%82%92%E3%83%8F%E3%83%BC%E3%83%89%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%89%E3%80%81210%E8%A1%8C%E7%9B%AE%EF%BC%88bCommChannel%E3%82%921%E3%81%AB%E3%83%8F%E3%83%BC%E3%83%89%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%89%E4%BB%98%E8%BF%91%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%81%BE%E3%81%9F%E3%80%81%E6%9C%80%E9%81%A9%E5%8C%96%E3%83%AC%E3%83%99%E3%83%AB%E3%82%92%E3%80%8C%E3%81%AA%E3%81%97%E3%80%8D%EF%BC%88-O0%EF%BC%89%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E6%A4%9C%E8%A8%8E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E3%82%A8%E3%83%89%E3%82%A5%E3%82%A2%E3%83%AB%E3%83%89%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E