Skip to main content
Loch
Associate
April 4, 2022
Question

What is the LL equivalent of HAL_I2C_Mem_Read?

  • April 4, 2022
  • 2 replies
  • 4200 views

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.

This topic has been closed for replies.

2 replies

Danish1
Lead III
April 4, 2022

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

Loch
LochAuthor
Associate
April 4, 2022

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.

Technical Moderator
April 4, 2022

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

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question. Thanks
Loch
LochAuthor
Associate
April 4, 2022

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

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