ตัวอย่างสมบูรณ์ — สามท่าใน 12_i2c_transaction.c
ท่าที่ 1 address_byte() เลื่อน address 7 บิตแล้วใส่บิต R/W
ท่าที่ 2 probe() จำลองการสแกนสี่ address รอบ 0x68 ตัวที่มีอุปกรณ์ตอบ ACK ที่เหลือ NACK
ท่าที่ 3 read_register() พิมพ์การอ่าน chip id หนึ่งไบต์ และการอ่านความเร่งหกไบต์ในธุรกรรมเดียว (burst read)
static uint8_t address_byte(uint8_t addr7, int read) {
return (uint8_t)((addr7 << 1) | (read ? 1u : 0u));
}
ลองแก้แล้วทายก่อนรัน: ถ้าแยกการอ่านหกไบต์เป็นหกธุรกรรม จำนวนไบต์บนสายเพิ่มเป็นเท่าไร และทำไมตัวอย่างบอกว่าแบบ burst "both faster and ATOMIC"