cancel
Showing results for 
Search instead for 
Did you mean: 

I2C read & write operation for LTC4015

ssena.1514
Associate III

 

Hi,

Currently I am working on a stm32 & LTC4015 based smart charger project.

 

When I followed the data sheet the smbus or i2c read & write operation is given as below:-

SMBus WRITE WORD PROTOCOL:-
S SLAVE ADDRESS Wr A COMMAND CODE A DATA BYTE LOW A DATA BYTE HIGH A P
SMBus WRITE WORD WITH PEC PROTOCOL
S SLAVE ADDRESS Wr A COMMAND CODE A DATA BYTE LOW A DATA BYTE HIGH A PEC* A P


SMBus READ WORD PROTOCOL:-
S SLAVE ADDRESS Wr A COMMAND CODE A Sr SLAVE ADDRESS Rd A DATA BYTE LOW A DATA BYTE HIGH N P
SMBus READ WORD WITH PEC PROTOCOL
S SLAVE ADDRESS Wr A COMMAND CODE A Sr SLAVE ADDRESS Rd A DATA BYTE LOW A DATA BYTE HIGH A PEC* N P
SMBus ALERT RESPONSE ADDRESS PROTOCOL
S ALERT RESPONSE ADDRESS Rd A DEVICE ADDRESS Rd N P
SMBus ALERT RESPONSE ADDRESS PROTOCOL WITH PEC
S ALERT RESPONSE ADDRESS Rd A DEVICE ADDRESS Rd A PEC* N

 

And I am reading from ltc4015 registers like this :-

ret = HAL_I2C_Mem_Read(&hi2c1,LTC4015_DEVICE_ADDRESS_READ,0x03,I2C_MEMADD_SIZE_8BIT,(uint16_t*)(&register_value2), 2, HAL_MAX_DELAY);

if (ret != HAL_OK)

{

Error_Handler();

}

 

and for writing:-

//Enable limit alerts

uint8_t dataBuffer0[2] = {0xBF,0xF0};

ret = HAL_I2C_Mem_Write(&hi2c1, LTC4015_DEVICE_ADDRESS_WRITE, 0x0D, I2C_MEMADD_SIZE_16BIT, dataBuffer0, 2, HAL_MAX_DELAY);

if (ret != HAL_OK)

{

Error_Handler();

}

 

 Am I doing anything wrong?

 

So my question is how to use the read & write functions for successful r/w operation.

 

Kindly explain me if you are available.

 

Device - stm32l0

 

 

Thanks & Regards

Satyabrata Senapati(Firmware Developer) 

Vasmed health sciences pvt ltd.

 

1 ACCEPTED SOLUTION

Accepted Solutions
TDK
Guru

The limited code that you showed looks okay to me.

Make sure the address is correct.

Prior to any I2C transfer, ensure HAL_I2C_IsDeviceReady returns HAL_OK. If it does not, you are not using the appropriate address, or something else is wrong.

If you feel a post has answered your question, please click "Accept as Solution".

View solution in original post

1 REPLY 1
TDK
Guru

The limited code that you showed looks okay to me.

Make sure the address is correct.

Prior to any I2C transfer, ensure HAL_I2C_IsDeviceReady returns HAL_OK. If it does not, you are not using the appropriate address, or something else is wrong.

If you feel a post has answered your question, please click "Accept as Solution".