Giao Tiếp I2C

Chuẩn giao tiếp I2C cùng với SPI, UART được sử dụng rất nhiều giữa các IC, cảm biến, thiết bị ngoại vi trong mạch điện tử. Chuẩn giao tiếp này hoạt động theo nguyên tắc nào, có những tham số gì? Hãy cùng Elecfarm tìm hiểu qua bài viết sau.

1. Định nghĩa giao tiếp I2C

I2C (Inter – Integrated Circuit) là 1 giao thức giao tiếp nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau chỉ sử dụng hai đường truyền tín hiệu.

Dữ liệu được truyền từng bit một theo các chu kỳ được thiết lập bởi 1 tín hiệu đồng hồ (clock).

Bus I2C thường được sử dụng để giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại vi điều khiển, cảm biến, EEPROM,…

2. Cách hoạt động của giao tiếp I2C

2.1. Cấu trúc bus I2C

Cấu trúc bus I2C sử dụng 2 đường truyền tín hiệu:

  • SCL – Serial Clock Line: Tạo xung nhịp đồng hồ (clock), do Master phát đi
  • SDA – Serial Data Line: Đường truyền nhận dữ liệu.

2.2. Nguyên lý hoạt động

Giao tiếp I2C bao gồm quá trình truyền nhận dữ liệu giữa các thiết bị chủ-tớ, hay Master – Slave.

Thiết bị Master là 1 vi điều khiển, nó có nhiệm vụ điều khiển đường tín hiệu SCL và gửi nhận dữ liệu hay lệnh thông qua đường SDA đến các thiết bị khác.

Các thiết bị nhận các dữ liệu lệnh và tín hiệu từ thiết bị Master được gọi là các thiết bị Slave. Các thiết bị Slave thường là các IC, hoặc thậm chí là vi điều khiển.

Master và Slave được kết nối với nhau như hình trên. Hai đường bus SCL và SDA đều hoạt động ở chế độ Open Drain. Bất kì thiết bị nào kết nối với mạng I2C này cũng chỉ có thể kéo 2 đường bus này xuống mức thấp (LOW), nhưng lại không thể kéo được lên mức cao. Vì để tránh trường hợp bus vừa bị 1 thiết bị kéo lên mức cao vừa bị 1 thiết bị khác kéo xuống mức thấp gây hiện tượng ngắn mạch. Do đó cần có 1 điện trở treo (từ 1 – 4,7 kΩ) để giữ mức điện áp mặc định ở mức cao.

2.3. Khung truyền I2C

Dữ liệu giao tiếp qua giao thức I2C được xây dựng theo cấu trúc sau:

Khối bit địa chỉ:

Thông thường quá trình truyền nhận sẽ diễn ra với rất nhiều thiết bị, IC với nhau. Để phân biệt các thiết bị này, chúng sẽ được gắn 1 địa chỉ vật lý 7 bit cố định.

Bit Read/Write:

Bit này dùng để xác định quá trình là truyền hay nhận dữ liệu từ Master. Nếu Master gửi dữ liệu đi thì ứng với bit này bằng ‘0’ và ngược lại, nhận dữ liệu khi bit này bằng ‘1’.

Bit ACK/NACK:

Viết tắt của Acknowledged / Not Acknowledged. Dùng để so sánh bit địa chỉ vật lý của thiết bị so với địa chỉ được gửi tới. Nếu trùng thì Slave sẽ được đặt bằng ‘0’ và ngược lại, nếu không thì mặc định bằng ‘1’.

Khối bit dữ liệu:

Gồm 8 bit và được tạo bởi thiết bị gửi truyền đến thiết bị nhân. Sau khi các bit này được gửi đi, lập tức 1 bit ACK/NACK được gửi ngay theo sau để xác nhận rằng thiết bị nhận đã nhận được dữ liệu thành công hay chưa. Nếu nhận thành công thì bit ACK/NACK được set bằng ‘0’ và ngược lại.

2.4. Quá trình truyền nhận dữ liệu

Bắt đầu: Thiết bị Master sẽ gửi đi 1 xung Start bằng cách kéo lần lượt các đường  SDA, SCL từ mức 1 xuống 0.

Tiếp theo đó, Master gửi đi 7 bit địa chỉ tới Slave muốn giao tiếp cùng với bit Read/Write.

Slave sẽ so sánh địa chỉ vật lý với địa chỉ vừa được gửi tới. Nếu trùng khớp, Slave sẽ xác nhận bằng cách kéo đường SDA xuống 0 và set bit ACK/NACK bằng ‘0’. Nếu không trùng khớp thì SDA và bit ACK/NACK đều mặc định bằng ‘1’.

Thiết bị Master sẽ gửi hoặc nhận khung bit dữ liệu. Nếu Master gửi đến Slave thì bit Read/Write ở mức 0. Ngược lại nếu nhận thì bit này ở mức 1.

Nếu khung dữ liệu đã được truyền đi thành công, bit ACK/NACK được set thành mức 0 để báo hiệu cho Master tiếp tục.

Sau khi tất cả dữ liệu đã được gửi đến Slave thành công, Master sẽ phát 1 tín hiệu Stop để báo cho các Slave biết quá trình truyền đã kết thúc bằng các chuyển lần lượt SCL, SDA từ mức 0 lên mức 1.

3. Các tham số kĩ thuật

Giao thức I2C có các tham số như sau:

  • Số địa chỉ tối đa mà Master gửi đi cho các Slaver là: địa chỉ nhưng chỉ định hình được 112  thiết bị kết nối  còn 16 địa chị còn lại sử dụng vào mục đích riêng.
  • Kích thước của khung dữ liệu bị giới hạn ở 8 bit
  • Tốc độ truyền khoảng từ 100 kbps đến 400kbps phụ thuộc vào giá trị của trở được sử dụng

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *