cancel
Showing results for 
Search instead for 
Did you mean: 

Sequential receive/transmit

Luca R
Associate II
Posted on August 28, 2017 at 17:40

I want to implement a slave I2C interface with STM32F411.

I can't know in advance how many bytes are going to be written from the master, or how many bytes are going to be read.

I followed this approach:

check in HAL_I2C_AddrCallback if it has been asked a Read or a Write operation;

if the master wants to read something, then use the HAL_I2C_Slave_Sequential_Transmit_IT to transmit the first byte. When this first byte is correctly sent and acknowledged, the HAL_I2C_SlaveTxCpltCallback is called: there I want to be able to understand if the master wants to receive more bytes or not...but I couldn't find the correct trigger.

I2C bus state is always 'STATE_LISTEN', both if it has been requested 1 byte, and if the master wants to read many bytes.

Of course I have the same problem if the master wants to write something: I thought to call the HAL_I2C_Slave_Sequential_Receive_IT to receive 1 byte, and call it again and again until there are data to be written.

In all the I2C examples that can be found under 

STM32Cube_FW_F4_V1.16.0\Projects\STM32F411E-Discovery\Examples\I2C

 the size of Rx and Tx buffer are fixed and predefined , and I couldn't find any useful clue to proceed.

How can I check , being an I2C slave, if the Master sent a STOP condition to end its transaction?

Regards,

Luca

0 REPLIES 0