Hướng dẫn sử dụng giao thức bus I2C, Giao diện với các ứng dụng

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Ngày nay, các giao thức đóng một vai trò thiết yếu trong thiết kế hệ thống nhúng . Không đi đến các giao thức, nếu bạn muốn mở rộng các tính năng ngoại vi của vi điều khiển, độ phức tạp và tiêu thụ điện năng sẽ tăng lên. Có sẵn các loại giao thức bus khác nhau như USART, SPI, CAN, Giao thức bus I2C , v.v., được sử dụng để truyền dữ liệu giữa hai hệ thống.

Giao thức I2C

I2C Bus là gì?




Việc truyền và nhận thông tin giữa hai hoặc nhiều hơn hai thiết bị yêu cầu một đường truyền thông được gọi là hệ thống bus. Bus I2C là bus nối tiếp hai chiều hai chiều được sử dụng để vận chuyển dữ liệu giữa các mạch tích hợp. I2C là viết tắt của “Inter Integrated Circuit”. Nó được giới thiệu lần đầu tiên bởi hãng bán dẫn Philips vào năm 1982. Bus I2C bao gồm ba tốc độ truyền dữ liệu như tiêu chuẩn, chế độ nhanh và chế độ tốc độ cao. Bus I2C hỗ trợ thiết bị không gian địa chỉ 7-bit và 10-bit và hoạt động của nó sẽ khác với điện áp thấp.

Giao thức Bus I2c

Giao thức Bus I2c



Đường tín hiệu I2C

Đường tín hiệu I2C

Đường tín hiệu I2C

I2C là một giao thức bus nối tiếp bao gồm hai đường tín hiệu như đường SCL và SDL được sử dụng để giao tiếp với các thiết bị. SCL là viết tắt của 'dòng đồng hồ nối tiếp' và tín hiệu này luôn được điều khiển bởi 'thiết bị chủ'. SDL là viết tắt của 'đường dữ liệu nối tiếp' và tín hiệu này được điều khiển bởi thiết bị ngoại vi chính hoặc I2C. Cả hai đường SCL và SDL này đều ở trạng thái mở khi không có chuyển giao giữa các thiết bị ngoại vi I2C.

Đầu ra thoát nước mở


Cống mở là khái niệm cho bóng bán dẫn FET trong đó cực cống của bóng bán dẫn ở trạng thái mở. Các chân SDL và SCL của thiết bị chính được thiết kế với các bóng bán dẫn ở trạng thái mở, do đó, chỉ có thể truyền dữ liệu khi các bóng bán dẫn này được tiến hành. Do đó, các đường dây hoặc đầu nối cống này được kết nối điện trở kéo lên kỹ lưỡng với VCC cho chế độ dẫn.

Giao diện I2C

Nhiều thiết bị nô lệ được giao tiếp với bộ vi điều khiển với sự trợ giúp của bus I2C thông qua IC dịch chuyển mức I2C để chuyển thông tin giữa chúng. Giao thức I2C được sử dụng để kết nối tối đa 128 thiết bị được kết nối để giao tiếp với các đường SCL và SDL của thiết bị chính cũng như các thiết bị phụ. Nó hỗ trợ giao tiếp Multimaster, có nghĩa là hai master được sử dụng để giao tiếp với các thiết bị bên ngoài.

Tốc độ truyền dữ liệu I2C

Giao thức I2C hoạt động ở ba chế độ như: chế độ nhanh, chế độ tốc độ cao và chế độ tiêu chuẩn, trong đó tốc độ dữ liệu ở chế độ tiêu chuẩn nằm trong khoảng 0Hz đến 100Hz và dữ liệu ở chế độ nhanh có thể truyền với tốc độ 0Hz đến 400 KHz và chế độ tốc độ cao với 10 KHz đến 100KHz. Dữ liệu 9 bit được gửi cho mỗi lần truyền, trong đó 8 bit được MSB của máy phát gửi đến LSB và bit thứ 9 là bit báo nhận được gửi bởi máy thu.

Tốc độ truyền dữ liệu I2C

Tốc độ truyền dữ liệu I2C

Giao tiếp I2C

Giao thức bus I2C được sử dụng phổ biến nhất trong giao tiếp chủ và phụ, trong đó chủ được gọi là “vi điều khiển” và phụ được gọi là các thiết bị khác như ADC, EEPROM, DAC và các thiết bị tương tự trong hệ thống nhúng. Số lượng thiết bị phụ được kết nối với thiết bị chính với sự trợ giúp của bus I2C, trong đó mỗi thiết bị phụ bao gồm một địa chỉ duy nhất để liên lạc với nó. Các bước sau được sử dụng để giao tiếp thiết bị chính với thiết bị phụ:

Bước 1: Đầu tiên, thiết bị chủ đưa ra điều kiện khởi động để thông báo cho tất cả các thiết bị phụ để chúng lắng nghe trên đường dữ liệu nối tiếp.

Bước 2: Thiết bị chính gửi địa chỉ của thiết bị phụ đích được so sánh với địa chỉ của tất cả các thiết bị phụ khi được kết nối với các đường SCL và SDL. Nếu bất kỳ địa chỉ nào trùng khớp, thiết bị đó sẽ được chọn và tất cả các thiết bị còn lại sẽ bị ngắt kết nối khỏi đường SCL và SDL.

Bước 3: Thiết bị phụ có địa chỉ phù hợp nhận được từ thiết bị chính, phản hồi bằng một xác nhận với thiết bị chính sau đó giao tiếp được thiết lập giữa cả thiết bị chủ và thiết bị phụ trên bus dữ liệu.

Bước 4: Cả master và slave đều nhận và truyền dữ liệu tùy thuộc vào việc truyền thông là đọc hay ghi.

Bước 5: Sau đó, thiết bị chính có thể truyền dữ liệu 8-bit tới bộ thu trả lời bằng xác nhận 1-bit.

Hướng dẫn I2C

Việc truyền và nhận thông tin từng bước liên quan đến các xung đồng hồ được gọi là giao thức I2C. Nó là một giao thức liên hệ thống và khoảng cách ngắn, có nghĩa là nó được sử dụng trong bảng mạch để giao tiếp giữa thiết bị chủ và thiết bị phụ.

Kiến thức cơ bản về giao thức I2C

Nói chung, hệ thống bus I2C bao gồm hai dây được sử dụng dễ dàng để mở rộng các tính năng ngoại vi đầu vào và đầu ra như ADC, EEROM và RTC, và các thành phần cơ bản khác để tạo ra một hệ thống có độ phức tạp thấp hơn.

Thí dụ: Vì vi điều khiển 8051 không có ADC sẵn có - vì vậy, nếu chúng ta muốn giao tiếp bất kỳ cảm biến tương tự nào với vi điều khiển 8051 - chúng ta phải sử dụng các thiết bị ADC như ADC ADC0804-1 kênh, ADC0808-8 kênh, v.v. Bằng cách sử dụng các ADC này, chúng ta có thể giao tiếp các cảm biến tương tự với bộ vi điều khiển.

Nếu không sử dụng giao thức để mở rộng các tính năng I / O của bất kỳ bộ vi điều khiển hoặc bộ xử lý nào, chúng ta có thể đi đến thiết bị 8-pin 8255 ICit. Các Vi điều khiển 8051 là vi điều khiển 40 chân bằng cách sử dụng vi mạch 8255, chúng ta có thể mở rộng 3 cổng I / O với 8 chân trong mỗi cổng. Bằng cách sử dụng tất cả các thiết bị như RTC, ADC, EEPROM, Timers, v.v. - để mở rộng mạch ngoại vi - độ phức tạp, chi phí, tiêu thụ điện năng và kích thước sản phẩm cũng tăng lên.

Để khắc phục vấn đề này, khái niệm giao thức đi vào hình ảnh để giảm độ phức tạp của phần cứng và mức tiêu thụ điện năng. Chúng tôi có thể mở rộng nhiều tính năng hơn, chẳng hạn như I / 0 thiết bị ngoại vi, ADC, T / C và thiết bị bộ nhớ lên đến 128 thiết bị bằng cách sử dụng giao thức I2C này.
Thuật ngữ được sử dụng trong giao thức I2C

Hệ thống điều khiển: Thiết bị gửi dữ liệu đến bus được gọi là máy phát.

Người nhận: Thiết bị nhận dữ liệu từ bus được gọi là thiết bị thu.

Bậc thầy: Thiết bị bắt đầu chuyển giao để tạo ra tín hiệu đồng hồ và kết thúc chuyển giao được gọi là thiết bị chính.

Nô lệ: Thiết bị được đánh địa chỉ bởi chủ được gọi là thiết bị phụ.

Multimaster: Nhiều master có thể cố gắng điều khiển bus cùng lúc mà không làm hỏng thông báo được gọi là Multimaster.

Trọng tài: Quy trình để đảm bảo rằng, nếu có nhiều hơn một chủ đồng thời cố gắng điều khiển xe buýt - chỉ một chủ được phép làm để thông báo chiến thắng không bị hỏng.

Đồng bộ hóa: Thủ tục để đồng bộ hóa các đơn đồng hồ của hai hoặc nhiều thiết bị được gọi là đồng bộ hóa.

Trình tự lệnh cơ bản I2C

  1. Bắt đầu điều kiện bit
  2. Tình trạng bit dừng
  3. Điều kiện xác nhận
  4. Master to slave Write hoạt động
  5. Đọc Operation Slave to Master

Điều kiện bắt đầu và dừng bit

Khi chủ (vi điều khiển) muốn nói chuyện với thiết bị phụ (ví dụ: ADC), nó bắt đầu giao tiếp bằng cách đưa ra điều kiện khởi động trên bus I2C, sau đó đưa ra điều kiện dừng. Mức logic bắt đầu và dừng của I2C được thể hiện trong hình.

Điều kiện khởi động I2C xác định là sự chuyển tiếp cao xuống thấp của đường SDA trong khi đường SCL ở mức cao. AN I2C điều kiện dừng xảy ra khi dòng SDA chuyển từ thấp lên cao trong khi dòng SCL ở mức cao.

I2C master luôn tạo ra các điều kiện S và P. Khi I2C master khởi tạo điều kiện START, bus I2c được coi là ở trạng thái bận.

Điều kiện bắt đầu và dừng bit

Điều kiện bắt đầu và dừng bit

Lập trình:

BẮT ĐẦU Điều kiện:

sbit SDA = P1 ^ 7 // khởi tạo các chân SDA và SCL của vi điều khiển //
sbit SCL = P1 ^ 6
void delay (unsigned int)
void main ()
{
SDA = 1 // xử lý dữ liệu //
SCL = 1 // xung nhịp cao //
sự chậm trễ()
SDA = 0 // đã gửi dữ liệu //
sự chậm trễ()
SCL = 0 // tín hiệu xung nhịp thấp //
}
Độ trễ vô nghĩa (int p)
{
unsignedinta, b
Đối với (a = 0a<255a++) //delay function//
Đối với (b = 0b}

Điều kiện DỪNG:

void main ()
{
SDA = 0 // Dừng xử lý dữ liệu //
SCL = 1 // xung nhịp cao //
sự chậm trễ()
SDA = 1 // Đã dừng //
sự chậm trễ()
SCL = 0 // tín hiệu xung nhịp thấp //
}
Độ trễ vô nghĩa (int p)
{
unsignedinta, b
Đối với (a = 0a<255a++) //delay function//
Đối với (b = 0b}

Tình trạng thừa nhận (ACK) và Không thừa nhận (NCK)

Mỗi byte được truyền qua bus I2C được theo sau bởi một điều kiện xác nhận từ bộ thu, có nghĩa là, sau khi bộ chủ kéo SCL xuống mức thấp để hoàn thành quá trình truyền 8 bit, SDA sẽ được bộ thu kéo xuống mức chính. Nếu sau khi truyền mà máy thu không kéo thì dòng SDA LOW được coi là điều kiện NCK.

Lời cảm ơn (ACK)

Lời cảm ơn (ACK)

Lập trình

Nhìn nhận
void main ()
{
SDA = 0 // Dòng SDA xuống mức thấp //
SCL = 1 // xung nhịp từ cao xuống thấp //
trì hoãn (100)
SCL = 0
}
Không xác nhận:
void main ()
{
SDA = 1 // Dòng SDA lên cao //
SCL = 1 // xung nhịp từ cao xuống thấp //
trì hoãn (100)
SCL = 0
}

Master to Slave Writes Operation

Giao thức I2C truyền dữ liệu dưới dạng gói hoặc byte. Mỗi byte được theo sau bởi một bit báo nhận.

Định dạng truyền dữ liệu

Định dạng truyền dữ liệu

Định dạng truyền dữ liệu

Khởi đầu: Về cơ bản, trình tự truyền dữ liệu được khởi tạo bởi trình chủ tạo điều kiện bắt đầu.

Địa chỉ 7-bit: Sau đó, tổng thể gửi địa chỉ phụ ở hai định dạng 8 bit thay vì một địa chỉ 16 bit.

R / W: Nếu bit đọc và ghi cao, thì hoạt động ghi được thực hiện.

ALAS: Nếu thao tác ghi được thực hiện trong thiết bị phụ, thì bộ thu sẽ gửi ACK 1 bit đến bộ vi điều khiển.

Dừng lại: Sau khi hoàn thành thao tác ghi trong thiết bị tớ, bộ vi điều khiển sẽ gửi điều kiện dừng đến thiết bị tớ.

Lập trình

Viết hoạt động

voidwrite (không dấu char d)
{
Ký tự không dấu k, j = 0x80
Đối với (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
trì hoãn (4)
SCL = 0
}
SDA = 1
SCL = 1
trì hoãn (2)
c=SDA
trì hoãn (2)
SCL = 0
}

Thao tác đọc Master to Slave

Dữ liệu được đọc lại từ thiết bị phụ dưới dạng bit hoặc byte - đọc bit quan trọng nhất trước và đọc bit ít quan trọng nhất sau cùng.

Định dạng đọc dữ liệu

Định dạng đọc dữ liệu

Định dạng đọc dữ liệu

Khởi đầu: Về cơ bản, trình tự truyền dữ liệu được bắt đầu bởi trình chủ tạo điều kiện bắt đầu.

Địa chỉ 7-bit: Sau đó, tổng thể gửi địa chỉ phụ ở hai định dạng 8 bit thay vì một địa chỉ 16 bit.

R / W: Nếu bit đọc và ghi ở mức thấp, thì hoạt động đọc được thực hiện.

ALAS: Nếu thao tác ghi được thực hiện trong thiết bị phụ, thì bộ thu sẽ gửi ACK 1 bit đến bộ vi điều khiển.

Dừng lại: Sau khi hoàn thành thao tác ghi trong thiết bị tớ, bộ vi điều khiển sẽ gửi điều kiện dừng đến thiết bị tớ.

Lập trình

Void read ()
{
Ký tự không dấu j, z = 0x00, q = 0x80
SDA = 1
cho (j = 0j<8j++)
{
SCL = 1
trì hoãn (100)
cờ = SDA
if (cờ == 1)
q)
q = q >> 1
trì hoãn (100)
SCL = 0

Ví dụ thực tế về giao tiếp ADC với vi điều khiển 8051

ADC là một thiết bị được sử dụng để chuyển đổi dữ liệu tương tự thành dạng kỹ thuật số và kỹ thuật số sang tương tự. Vi điều khiển 8051 không có ADC sẵn có nên chúng ta phải thêm bên ngoài thông qua giao thức I2C. PCF8591 là dựa trên I2C tương tự với kỹ thuật số và bộ chuyển đổi kỹ thuật số sang tương tự. Thiết bị này có thể hỗ trợ tối đa 4 kênh đầu vào tương tự cùng với điện áp 2,5 đến 6v.

Đầu ra tương tự

Các đầu ra tương tự có dạng điện áp. Ví dụ, cảm biến tương tự 5v cho mức logic đầu ra từ 0,01v đến 5v.
Giá trị kỹ thuật số lớn nhất của 5v là = 256.
Giá trị của 2,5v là = 123 theo giá trị điện áp cực đại.

Công thức của đầu ra tương tự là:

Công thức của đầu ra kỹ thuật số:

Giao tiếp ADC với Vi điều khiển 8051

Giao tiếp ADC với Vi điều khiển 8051

Hình trên mô tả quá trình truyền dữ liệu sử dụng giao thức I2C từ thiết bị ADC đến vi điều khiển 8051. Các chân ADC của SCL và SDA được kết nối với chân 1.7 và 1.6 của vi điều khiển để thiết lập giao tiếp giữa chúng. Khi cảm biến cung cấp các giá trị tương tự cho ADC, nó sẽ chuyển đổi thành kỹ thuật số và chuyển dữ liệu đến bộ vi điều khiển thông qua giao thức I2C.

Đây là hướng dẫn về giao thức bus I2C với các chương trình thích hợp. Chúng tôi hy vọng rằng nội dung đã cho sẽ cung cấp cho bạn khái niệm thực tế về giao tiếp một số thiết bị với bộ vi điều khiển bằng giao tiếp I2C. Nếu bạn có bất kỳ nghi ngờ nào về quy trình giao tiếp của giao thức này, bạn có thể liên hệ với chúng tôi bằng cách bình luận bên dưới.