2017-08-28 08:40 AM
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