RM0091
23.4.7
Data transfer
The data transfer is managed through transmit and receive data registers and a shift
register.
Reception
The SDA input fills the shift register. After the 8th SCL pulse (when the complete data byte is
received), the shift register is copied into I2Cx_RXDR register if it is empty (RXNE=0). If
RXNE=1, meaning that the previous received data byte has not yet been read, the SCL line
is stretched low until I2Cx_RXDR is read. The stretch is inserted between the 8th and 9th
SCL pulse (before the Acknowledge pulse).
Figure 200. Data reception
SCL
Shift register
RXNE
I2C_RXDR
Transmission
If the I2Cx_TXDR register is not empty (TXE=0), its content is copied into the shift register
after the 9th SCL pulse (the Acknowledge pulse). Then the shift register content is shifted
out on SDA line. If TXE=1, meaning that no data is written yet in I2Cx_TXDR, SCL line is
stretched low until I2Cx_TXDR is written. The stretch is done after the 9th SCL pulse.
xx
data1
data0
Doc ID 018940 Rev 1
Inter-integrated circuit (I
ACK pulse
ACK pulse
xx
data2
rd data0
rd data1
data1
2
C) interface
legend:
SCL
stretch
xx
data2
MS19848V1
477/742
Need help?
Do you have a question about the STM32F05 series and is the answer not in the manual?