cancel
Showing results for 
Search instead for 
Did you mean: 

What is the LL equivalent of HAL_I2C_Mem_Read?

Loch
Associate II

Hi,

I found a tutorial for using a BME280 sensor with I2C in HAL (https://controllerstech.com/bme280-with-stm32/).

However, I need to use LL for it to fit into the rest of the program.

The main part I'm having an issue with is below as I can't find a command within LL that would easily replace it.

HAL_I2C_Mem_Read(BME280_I2C, BME280_ADDRESS, 0x88, 1, trimdata, 25, HAL_MAX_DELAY);

Any help or links to good I2C LL tutorials would be greatly apprecaited.

4 REPLIES 4
Danish1
Lead II

One reason is that it doesn't map to a single LL call.

Take a look at the source-code for HAL_I2C_Mem_Read.

An I2C "memory-read" translates into an I2C write of the memory-location-to-read, followed by an I2C read of the data. And between them, in order to ensure that no other I2C controllers get a look-in and potentially change that memory-location-to-read, the I2C controller issues a "repeated-start" (i.e. i2c start without being preceded by an I2C stop).

Philips (now NXP) were the originators of the I2C protocol - see e.g. the Wikipedia entry for more information.

As to the LL commands, I've had a quick look and they seem to provide function-calls to access the stm32 peripheral registers for I2C. The registers are described in the Reference Manual, including sample code.

If you wish to go deeper than HAL I suggest you start with the section on I2C/SPI in the Reference Manual for your STM32.

Hope this helps,

Danish

Imen.D
ST Employee

Hello @Loch​ and welcome to the STM32 Community 🙂

You may start from the LL template project in the STM32CubeXX package and check the ready-to-use I2C example related to your device.

I advise you to look at the User Manual "Description of STM32XX HAL and low-layer drivers", it may help you to have more idea about the use of LL functions.

Check this FAQ, which describes few tips related to I2C peripheral on STM32 devices: STM32 I2C does not work, this may help you on your project.

When your question is answered, please close this topic by choosing Select as Best.

Imen

When your question is answered, please close this topic by clicking "Accept as Solution".
Thanks
Imen

Ohh of course the example package. I knew I had seen something somewhere.

Thanks for the other advice too, I'll check it out

Thanks for the other advice. I'll have to take a deeper look into how that function actually works.

If only there was a google translate for code.