I2C does not work - no data on I2C pin
Hello, I have a problem to communicate with 24LC02B memory. If I look with the logic analyzer, no data on CLK and DATA pins. Here is my code. What is wrong?
Thank you
#define I2C1_DEVICE_ADDRESS 0x50
#define MEMORY_ADDRESS 0x08
uint8_t xBuffer[1];
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_AFIO_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pin = I2C_SDA_Pin;
HAL_GPIO_Init(I2C_SDA_Port, &GPIO_InitStruct);
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pin = I2C_SCL_Pin;
HAL_GPIO_Init(I2C_SCL_Port, &GPIO_InitStruct);
I2C_EEPROM.Instance = I2C1;
I2C_EEPROM.Init.ClockSpeed = 100000;
I2C_EEPROM.Init.DutyCycle = I2C_DUTYCYCLE_2;
I2C_EEPROM.Init.OwnAddress1 = 0x00;
I2C_EEPROM.Init.OwnAddress2 = 0x00;
I2C_EEPROM.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
I2C_EEPROM.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
I2C_EEPROM.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
I2C_EEPROM.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if(HAL_I2C_Init(&I2C_EEPROM) != HAL_OK)
{
Error_Handler();
}
__HAL_RCC_I2C1_CLK_ENABLE();
...............
bool EEPROM24XX_IsConnected(void) {
if(HAL_I2C_IsDeviceReady(&I2C_EEPROM,(uint16_t) I2C1_DEVICE_ADDRESS<<1,1,100)==HAL_OK)
return true;
else
return false;
}
bool EEPROM24XX_Save(void) {
xBuffer[0] = 55; // for test only
if(HAL_I2C_Mem_Write(&I2C_EEPROM,(uint16_t) I2C1_DEVICE_ADDRESS<<1,MEMORY_ADDRESS,1,xBuffer,1,100) == HAL_OK) {
HAL_Delay(10);
return true;
}
else return false;
}
bool EEPROM24XX_Load(void) { // should read 55
if(HAL_I2C_Mem_Read(&I2C_EEPROM,(uint16_t) I2C1_DEVICE_ADDRESS<<1,MEMORY_ADDRESS,1,xBuffer,1,100) == HAL_OK) {
return true;
} else return false;
}response of EEPROM24XX_IsConnected os always false, and the same also WRITE function,
