Chuyển tới nội dung chính

I²C

Bus đồng bộ 2 dây — SDA (dữ liệu) và SCL (clock) — nơi một master nói chuyện với nhiều thiết bị có địa chỉ. Cả hai đường đều open-drain, nên cần điện trở kéo lên (pull-up).

Ưu & nhược

ƯuNhược
Chỉ 2 chân cho nhiều thiết bịKhoảng cách ngắn (giới hạn bởi điện dung bus)
địa chỉ sẵn (7/10-bit)Open-drain → cần pull-up, tốc độ vừa phải
Chuẩn cho cảm biếnMột thiết bị kẹt có thể treo cả bus
Đa thiết bị, đa masterTrùng địa chỉ giữa các linh kiện giống nhau

Use case

  • Cảm biến trên bo (IMU, nhiệt độ, áp suất), EEPROM/RTC, port expander, OLED nhỏ, cấu hình PMIC.

Yêu cầu phần cứng

  • Điện trở pull-up trên SDA và SCL về điện áp bus — ~4.7 kΩ (100 kHz) xuống ~2.2 kΩ (400 kHz+); chỉ một cặp pull-up cho mỗi bus.
  • Giữ bus ngắn và điện dung thấp (đây là bus trên bo).
  • Một miền điện áp, hoặc level translator giữa thiết bị 1.8/3.3/5 V.
  • Giải quyết trùng địa chỉ: chân chọn địa chỉ, hoặc mux/switch I²C (vd TCA9548A).

Yêu cầu phần mềm

  • Xử lý START/STOP, ACK/NACK, địa chỉ 7/10-bit.
  • Hỗ trợ clock stretching (slave giữ SCL ở mức thấp).
  • Thêm timeout và routine khôi phục bus (toggle SCL tới 9 lần để giải phóng slave bị kẹt).
Lỗi I²C hàng đầu

Thiếu pull-up (bus kẹt cao/thấp), trùng địa chỉ (hai cảm biến giống nhau), và bus bị khóa do slave đang dở giao dịch. Thêm khôi phục bus và kiểm địa chỉ sớm.

Xem thêm