STM32 HAL I2C库读指定寄存器的数据

Support for "repeated start" in STM32 HAL I2C library

Q:
I am working with a slave I2C device (Kionix KX022 acccelerometer)  which uses a "repeated start" mechanism to send data requested by the master (STM32F405), e.g. to read two bytes of data (from register N and register N+1) the following sequence

Master                   Slave
---------------------    ------------------------
START
Slave Address + Write
                         ACK
N (starting register)
                         ACK
START (repeat)
Slave Address + Read
                         ACK
                         Data
ACK
                         Data
NACK
STOP


It appears the STM32F4xx HAL I2C library does not support this directly, since HAL_I2C_Master_Transmit() sends STOP after the data.

I just want to confirm this before writing some code (i.e. gluing together the HAL_I2C_Master_Transmit() and HAL_I2C_Master_Recieve() functions and removing the intervening STOP).

Thanks in advance,
Mike


A:

Hi Mike,

Regarding your needs, it seems that your I2C slave device have a comportment like a EEPROM memory. For this prefer to use HAL_I2C_Mem_Write or HAL_I2C_Mem_Read interface.

To give you more explanation about functionality of this interface :
1- First step of this interface is to send this sequence => START + Slave addr + R/W bit + ACK + Regvalue to write or read + ACK
2- Second step of this interface is to send this sequence => Repeated Start + Slave addr + R/W bit + ACK + DataValue to write or read on RegValue + ACK ….+ STOP

Hope that help,

Best regards,
Heisenberg.

注:
HAL_I2C_Mem_Read和HAL_I2C_Mem_Write 操作真的很方便。

应用如:
SD3088 读数据方法 1 示例(7H~9H 地址读取数据):
STM32 HAL I2C库读指定寄存器的数据_第1张图片

模拟读写I2C,再见。

你可能感兴趣的:(STM32)