i2c

Master: Thiết bị điều khiển trung tâm, đưa ra các yêu cầu tới Slave

Slave: Ngoại vi, đáp ứng các yêu cầu Slave

Trong 1 hệ thống bus I2C, một hoặc nhiều Master truyền, nhận dữ liệu với một hoặc nhiều Slave thông qua 2 dây:

  • SCL: Clock, được điều khiển bởi Master
  • SDA: truyền nhận dữ liệu

Cần điện trở kéo lên (khoảng 1kΩ - 4.7kΩ) cho SDA và SCL, để đẩm bảo luôn ở mức HIGH.

Tại 1 thời điểm, chỉ có 1 master hoạt động.

Data: 1 hoặc nhiều byte

ACK: giá trị LOW, Slave xác nhận rằng mình nhận được 1 loại dữ liệu mà Master gửi

NACK: giá trị HIGH, được gửi đi trong trường hợp:

  • Phía nhận bận, không thể nhận hay truyền dữ liệu vì đang thực hiện tính năng khác
  • Dữ liệu/địa chỉ không hợp lệ, không tồn tại
  • Phía nhận không thể nhận thêm các byte dữ liệu nữa
  • Master nhận đủ và không nhận thêm dữ liệu

Tín hiệu START: SCL = 1 và SDA chuyển từ 1 về 0

Tín hiệu STOP: SCL = 1 và SDA chuyển từ 0 lên 1

Trường hợp 1: Master gửi dữ liệu cho Slave

Hình 2: Khung truyền SDA khi Master gửi dữ liệu cho Slave

Gửi dữ liệu: Read = 0, Write = 1

  • ACK(1): Slave (có địa chỉ là địa chỉ master vừa gửi) xác nhận rằng mình rảnh.
  • ACK(2): Slave xác nhận mình có địa chỉ thanh ghi này (địa chỉ thanh ghi mà Master vừa gửi), Slave sẵn sàng nhận dữ liệu
  • ACK(3): Slave xác nhận nhận dữ liệu thành công

Trường hợp 2: Master nhận dữ liệu từ Slave

Hình 3. Khung truyền SDA khi Master nhận dữ liệu từ Slave

Nhận dữ liệu: Read = 1, Write = 0

Bắt đầu

Master gửi địa chỉ của Slave đến Slave cần đọc (chỉ định Slave mà Master muốn đọc)

Master cần gửi địa chỉ thanh ghi trong Slave đến Slave (để biết Master cần đọc địa chỉ thanh ghi nào trong Slave)

Bắt đầu lại

Master gửi địa chỉ của Slave

Slave gửi dữ liệu: 1 hoặc nhiều byte

Nhanvat

Ủng hộ chúng tôi

Nếu bạn thấy nội dung hữu ích, hãy ủng hộ chúng tôi một ly cà phê nhé

Buy Me A Coffee buymeacoffee.com/invencamp