I2c là gì

  -  

Trong bài viết này, chúng ta sẽ tìm hiểu về giao thức giao tiếp I2C, phần cứng của nó, cách dữ liệu được truyền và các cấu hình khác nhau mà nó hoạt động.

Bạn đang xem: I2c là gì


Giới thiệu về giao tiếp I2C

I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”. Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu.

Do tính đơn giản của nó nên loại giao thức này được sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và mảng cảm biến, các thiết bị hiển thị, thiết bị IoT, EEPROMs, v.v …

Đây là một loại giao thức giao tiếp nối tiếp đồng bộ. Nó có nghĩa là các bit dữ liệu được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi một tín hiệu đồng hồ tham chiếu.

Đặc điểm

Sau đây là một số đặc điểm quan trọng của giao thức giao tiếp I2C:

Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên mạng I2CKhông cần thỏa thuận trước về tốc độ truyền dữ liệu như trong giao tiếp UART. Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiếtCơ chế đơn giản để xác thực dữ liệu được truyềnSử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2CCác mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối đơn giản với hai đường bus chung I2C

Phần cứng

Bus vật lý I2C

Bus I2C (dây giao tiếp) chỉ gồm hai dây và được đặt tên là Serial Clock Line (SCL) và Serial Data Line (SDA). Dữ liệu được truyền đi được gửi qua dây SDA và được đồng bộ với tín hiệu đồng hồ (clock) từ SCL. Tất cả các thiết bị / IC trên mạng I2C được kết nối với cùng đường SCL và SDA như sau:

*

Giao thức truyền dữ liệu

Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bị Master và các thiết bị Slave để truyền dữ liệu giữa chúng.

Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một đường dữ liệu SDA duy nhất, thông qua các chuỗi có cấu trúc gồm các số 0 và 1 (bit). Mỗi chuỗi số 0 và 1 được gọi là giao dịch (transaction) và dữ liệu trong mỗi giao dịch có cấu trúc như sau:

*

Khối địa chỉ

Nó bao gồm 7 bit và được lấp đầy với địa chỉ của thiết bị Slave đến / từ đó thiết bị Master cần gửi / nhận dữ liệu. Tất cả các thiết bị Slave trên bus I2C so sánh các bit địa chỉ này với địa chỉ của chúng.

Bit Read / Write

Bit này xác định hướng truyền dữ liệu. Nếu thiết bị Master / IC cần gửi dữ liệu đến thiết bị Slave, bit này được thiết lập là ‘0’. Nếu IC Master cần nhận dữ liệu từ thiết bị Slave, bit này được thiết lập là ‘1’.

Bit ACK / NACK

ACK / NACK là viết tắt của Acknowledged/Not-Acknowledged. Nếu địa chỉ vật lý của bất kỳ thiết bị Slave nào trùng với địa chỉ được thiết bị Master phát, giá trị của bit này được set là ‘0’ bởi thiết bị Slave. Ngược lại, nó vẫn ở mức logic ‘1’ (mặc định).

Khối dữ liệu

Nó bao gồm 8 bit và chúng được thiết lập bởi bên gửi, với các bit dữ liệu cần truyền tới bên nhận. Khối này được theo sau bởi một bit ACK / NACK và được set thành ‘0’ bởi bên nhận nếu nó nhận thành công dữ liệu. Ngược lại, nó vẫn ở mức logic ‘1’.

Xem thêm: " Thực Dụng Tiếng Anh Là Gì ? Nghĩa Của Từ Thực Dụng Trong Tiếng Việt

Sự kết hợp của khối dữ liệu theo sau bởi bit ACK / NACK được lặp lại cho đến quá trình truyền dữ liệu được hoàn tất.

Điều kiện kết thúc (Stop condition)

Sau khi các khung dữ liệu cần thiết được truyền qua đường SDA, thiết bị Master chuyển đường SDA từ mức điện áp thấp sang mức điện áp cao trước khi đường SCL chuyển từ cao xuống thấp.

*

Thiết bị Master gửi 7 bit địa chỉ của thiết bị Slave mà thiết bị Master muốn giao tiếp cùng với bit Read/Write

*

Thiết bị Master gửi hoặc nhận khung dữ liệu.Nếu thiết bị Master muốn gửi dữ liệu đến thiết bị Slave, bit Read / Write là mức điện áp thấp. Nếu thiết bị Master đang nhận dữ liệu từ thiết bị Slave, bit này là mức điện áp cao.

*

Sau khi tất cả dữ liệu được gửi đến thiết bị Slave, thiết bị Master gửi điều kiện dừng để báo hiệu cho tất cả các thiết bị Slave biết rằng việc truyền dữ liệu đã kết thúc.

*

Hình dưới đây thể hiện toàn bộ các bit dữ liệu được gửi trên đường SDA và thiết bị điều khiển chúng khi thiết bị Master nhận dữ liệu đến thiết bị Slave.

*

Nhiều Master nhiều Slave.

Xem thêm: Địa Chỉ Kí Túc Xá Khu B Àn Giao Ký Túc Xá Làm Khu Cách Ly Tập Trung

Nhiều thiết bị Master có thể được kết nối với một thiết bị Slave đơn hoặc nhiều thiết bị Slave. Vấn đề với nhiều thiết bị Master trong cùng một hệ thống xuất hiện khi hai thiết bị Master cố gắng gửi hoặc nhận dữ liệu cùng một lúc trên dòng SDA. Để giải quyết vấn đề này, mỗi thiết bị Master cần phát hiện xem đường SDA thấp hay cao trước khi truyền một thông điệp. Nếu đường SDA thấp, điều này có nghĩa là một thiết bị Master khác có quyền điều khiển bus và thiết bị Mastercòn lại phải đợi để gửi tin nhắn. Nếu đường SDA cao thì an toàn để truyền tải thông điệp. Để kết nối nhiều thiết bị Master với nhiều thiết bị Slave, hãy sử dụng sơ đồ sau đây, với điện trở kéo lên 4.7 kΩ kết nối các đường SDA và SCL với Vcc:

*

Tổng kết

I2C là giao thức truyền thông nối tiếp đồng bộ phổ biến hiện nay, được sử dụng rộng rãi trong việc kết nối nhiều IC với nhau, hay kết nối giữa IC và các ngoại vi với tốc độ thấp.

Qua bài viết này, tôi hy vọng bạn đã có những kiến thức nhất định về loại giao thức này. Nếu bạn có bất kỳ câu hỏi hoặc có ý kiến đóng góp cho bài viết thì vui lòng để lại bình luận dưới đây. Và hãy nhớ đăng ký để nhận thêm các bài viết như thế này trong hộp thư đến của bạn!