M24M02-DRMN6
CODE
I2C_HandleTypeDef I2cHandle;
void I2C_init( void )
{
I2cHandle.Instance = I2C3;
I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
I2cHandle.Init.ClockSpeed = 400000;
I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;
I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_16_9;
I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;
I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;
I2cHandle.Init.OwnAddress1 = 0xa0;
// I2cHandle.Init.OwnAddress2 = 0xFE;
__I2C3_CLK_ENABLE();
/* I2C SCL GPIO pin configuration */
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* I2C SDA GPIO pin configuration */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
HAL_I2C_Init(&I2cHandle);
}
unsigned char EEPROM_write_byte
(
uint32_t adr,
uint8_t data
)
{
uint8_t i2c_adr = 0xa0;
// set slave address for write
if ((adr&0x10000) != 0)
i2c_adr = 0xa2;
if ((adr&0x20000) != 0)
i2c_adr |= 0x04;
while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, &data, 1, 1000)!= HAL_OK);
return( 0 );
}
unsigned char EEPROM_write_page
(
uint32_t adr,
uint8_t * refdata
)
{
uint8_t i2c_adr = 0xa0;
// set slave address for write
if ((adr&0x10000) != 0)
i2c_adr = 0xa2;
if ((adr&0x20000) != 0)
i2c_adr |= 0x04;
while(HAL_I2C_Mem_Write(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 256, 1000) != HAL_OK);
HAL_Delay( 6 );
return( 0 );
}
unsigned char EEPROM_read_byte
(
uint32_t adr,
uint8_t * refdata
)
{
uint8_t i2c_adr = 0xa1;
// set slave address for read
if ((adr&0x10000) != 0)
i2c_adr = 0xa3;
if ((adr&0x20000) != 0)
i2c_adr |= 0x04;
while(HAL_I2C_Mem_Read(&I2cHandle, (uint16_t)i2c_adr, uint16_t(adr&0xffff), 2, refdata, 1, 1000)!= HAL_OK);
return( 0 );
}