Site icon Nhạc lý căn bản – nhacly.com

Chuẩn giao tiếp I2C là gì

Giới thiệu giao tiếp I2C

I2C phối hợp những tính năng tốt nhất của SPI và UART. Với I2C, bạn hoàn toàn có thể liên kết nhiều slave với một master duy nhất ( như SPI ) và bạn hoàn toàn có thể có nhiều master tinh chỉnh và điều khiển một hoặc nhiều slave. Điều này thực sự có ích khi bạn muốn có nhiều hơn một vi điều khiển và tinh chỉnh ghi tài liệu vào một thẻ nhớ duy nhất hoặc hiển thị văn bản trên một màn hình hiển thị LCD .

Giống như giao tiếp UART, I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:

Bạn đang đọc: Chuẩn giao tiếp I2C là gì

SDA ( Serial Data ) – đường truyền cho master và slave để gửi và nhận tài liệu .

SCL ( Serial Clock ) – đường mang tín hiệu xung nhịp .

I2C là một giao thức truyền thông online tiếp nối đuôi nhau, vì thế tài liệu được truyền từng bit dọc theo một đường duy nhất ( đường SDA ) .

Giống như SPI, I2C là đồng điệu, do đó đầu ra của những bit được đồng điệu hóa với việc lấy mẫu những bit bởi một tín hiệu xung nhịp được san sẻ giữa master và slave. Tín hiệu xung nhịp luôn được tinh chỉnh và điều khiển bởi master .

Cách hoạt động của I2C

Với I2C, tài liệu được truyền trong những tin nhắn. Tin nhắn được chia thành những khung tài liệu. Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ slave và một hoặc nhiều khung tài liệu chứa dữ liệu đang được truyền. Thông điệp cũng gồm có điều kiện kèm theo khởi động và điều kiện kèm theo dừng, những bit đọc / ghi và những bit ACK / NACK giữa mỗi khung tài liệu :

Điều kiện khởi động : Đường SDA chuyển từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển từ mức cao xuống mức thấp .

Điều kiện dừng : Đường SDA chuyển từ mức điện áp thấp sang mức điện áp cao sau khi đường SCL chuyển từ mức thấp lên mức cao .

Khung địa chỉ : Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác lập slave khi master muốn tiếp xúc với nó .

Bit Đọc / Ghi : Một bit duy nhất chỉ định master đang gửi tài liệu đến slave ( mức điện áp thấp ) hay nhu yếu tài liệu từ nó ( mức điện áp cao ) .

Bit ACK / NACK : Mỗi khung trong một tin nhắn được theo sau bởi một bit xác nhận / không xác nhận. Nếu một khung địa chỉ hoặc khung tài liệu được nhận thành công xuất sắc, một bit ACK sẽ được trả lại cho thiết bị gửi từ thiết bị nhận .

Địa chỉ
I2C không có những đường Slave Select như SPI, vì thế cần một cách khác để cho slave biết rằng tài liệu đang được gửi đến slave này chứ không phải slave khác. Nó thực thi điều này bằng cách định địa chỉ. Khung địa chỉ luôn là khung tiên phong sau bit khởi động trong một tin nhắn mới .

Master gửi địa chỉ của slave mà nó muốn tiếp xúc với mọi slave được liên kết với nó. Sau đó, mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ tương thích, nó sẽ gửi lại một bit ACK điện áp thấp cho master. Nếu địa chỉ không khớp, slave không làm gì cả và đường SDA vẫn ở mức cao .

Bit đọc / ghi
Khung địa chỉ gồm có một bit duy nhất ở cuối tin nhắn cho slave biết master muốn ghi tài liệu vào nó hay nhận tài liệu từ nó. Nếu master muốn gửi tài liệu đến slave, bit đọc / ghi ở mức điện áp thấp. Nếu master đang nhu yếu tài liệu từ slave, thì bit ở mức điện áp cao .
Khung tài liệu
Sau khi master phát hiện bit ACK từ slave, khung tài liệu tiên phong đã chuẩn bị sẵn sàng được gửi .

 

Khung tài liệu luôn có độ dài 8 bit và được gửi với bit quan trọng nhất trước. Mỗi khung tài liệu ngay sau đó là một bit ACK / NACK để xác định rằng khung đã được nhận thành công xuất sắc. Bit ACK phải được nhận bởi master hoặc slave ( tùy thuộc vào cái nào đang gửi tài liệu ) trước khi khung tài liệu tiếp theo hoàn toàn có thể được gửi .

Sau khi toàn bộ những khung tài liệu đã được gửi, master hoàn toàn có thể gửi một điều kiện kèm theo dừng cho slave để tạm dừng quy trình truyền. Điều kiện dừng là sự quy đổi điện áp từ thấp lên cao trên đường SDA sau khi chuyển tiếp từ thấp lên cao trên đường SCL, với đường SCL vẫn ở mức cao .

Các bước truyền dữ liệu I2C

  1. Master gửi điều kiện kèm theo khởi động đến mọi slave được liên kết bằng cách chuyển đường SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp .
  1. Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn tiếp xúc, cùng với bit đọc / ghi .
  1. Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ trùng khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit. Nếu địa chỉ từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao .
  2. Master gửi hoặc nhận khung tài liệu .
  1. Sau khi mỗi khung tài liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công xuất sắc khung .
  1. Để dừng truyền tài liệu, master gửi điều kiện kèm theo dừng đến slave bằng cách quy đổi mức cao SCL trước khi chuyển mức cao SDA .

Một master với nhiều slave

Vì I2C sử dụng định địa chỉ nên nhiều slave hoàn toàn có thể được điều khiển và tinh chỉnh từ một master duy nhất. Với địa chỉ 7 bit sẽ có 128 ( 2 mũ 7 ) địa chỉ duy nhất. Việc sử dụng địa chỉ 10 bit không thông dụng, nhưng nó phân phối 1.024 ( 2 mũ 10 ) địa chỉ duy nhất. Để liên kết nhiều slave đến một master duy nhất, bạn hoàn toàn có thể đấu dây như thế này, với điện trở kéo lên 4,7 K Ohm liên kết đường SDA và SCL với Vcc :

Nhiều master với nhiều slave

Nhiều master hoàn toàn có thể được liên kết với một slave hoặc nhiều slave. Sự cố với nhiều master trong cùng một mạng lưới hệ thống xảy ra khi hai master cố gắng nỗ lực gửi hoặc nhận tài liệu cùng một lúc qua đường SDA. Để xử lý yếu tố này, mỗi master cần phải phát hiện xem đường SDA thấp hay cao trước khi truyền tin nhắn. Nếu đường SDA thấp, điều này có nghĩa là một master khác có quyền tinh chỉnh và điều khiển bus và master đó phải đợi để gửi tin nhắn. Nếu đường SDA cao thì hoàn toàn có thể truyền tin nhắn bảo đảm an toàn. Để liên kết nhiều master với nhiều slave, hãy sử dụng sơ đồ sau, với những điện trở kéo lên 4,7 K Ohm liên kết những đường SDA và SCL với Vcc :

Ưu điểm và nhược điểm của I2C

Có rất nhiều điều ở I2C hoàn toàn có thể khiến nó nghe có vẻ như phức tạp so với những giao thức khác, nhưng có một số ít nguyên do chính đáng khiến bạn hoàn toàn có thể muốn hoặc không muốn sử dụng I2C để liên kết với một thiết bị đơn cử :

Ưu điểm
Chỉ sử dụng hai dây
Hỗ trợ nhiều master và nhiều slave
Bit ACK / NACK xác nhận mỗi khung được chuyển thành công xuất sắc
Phần cứng ít phức tạp hơn so với UART
Giao thức nổi tiếng và được sử dụng thoáng rộng

Nhược điểm

Tốc độ truyền tài liệu chậm hơn SPI
Kích thước của khung tài liệu bị số lượng giới hạn ở 8 bit
Cần phần cứng phức tạp hơn để tiến hành so với SPI

Exit mobile version