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