Khi master cần đọc dữl liệu từ slaver, nó gửi đi dữ liệu (địa chỉ + R/W…) vào mạng I2C. Thiết bị nào phù hợp sẽ chuyển sang chế độ gửi dữ liệu, master sẽ chuyển sang chế độ nhận dữ liệu.
Ở chế độ nhận dữ liệu, master set SDA sang chế độ input (set SDA=1 với 8051) để có thể nhận dữ liệu truyền về từ slaver.
Tiếp đó master phát 8 xung liên tiếp lên SCL. Sau mỗi xung, slaver gửi 1 bit lên SDA và master sẽ đọc SDA sau mỗi xung để lấy từng bit dữ liệu.
Kết thúc 8 xung, master nhận đủ 1 byte dữ liệu (8bit).
Lúc này nếu slaver yêu cầu ACK thì slaver chuyển sang chế độ chờ ACK. Master khi này phải xuất mức 1 ra SDA và xuất thêm xung thứ 9 trên SCL đến slaver. Quá trình nhận 1 byte hoàn tất.
Byte tiếp theo lặp lại tương tự.
Nếu dữ liệu nhận về là 11111111 tức là đã không có biến đổi gì trên SDA khi master xuất xung trên SCL.
Có thể do lỗi kết nối, lỗi đường truyền, không có slaver phù hợp hoặc slaver đang không hoạt động.