Tại sao cần nhiều cổng I²C?


19

Về mặt lý thuyết, giao thức I²C cho phép, với địa chỉ 7 bit, có tới 127 thiết bị được kết nối với máy chủ. Đây là một số lượng lớn, vậy tại sao bất kỳ bộ vi điều khiển giá rẻ nào (ví dụ PIC24 này ), có nhiều hơn một cổng I²C? Tại sao cần thiết?

Câu trả lời:


23

Bố trí trung tâm cảm biến

Trong kịch bản này, có hai xe buýt I²C. Hãy gọi chúng là xe buýt địa phươngxe buýt chính . Mục đích của bus cục bộ là kết nối một loạt các cảm biến với vi điều khiển (μC). Mục đích của C là thăm dò các cảm biến, tổng hợp thông tin từ chúng và phát hiện các sự kiện nhất định. Một C trong vai trò như vậy được gọi là trung tâm cảm biến . Trung tâm cảm biến không chịu trách nhiệm cho các chức năng bậc cao hơn; có một bộ xử lý chính mạnh mẽ cho điều đó. Xe buýt chính kết nối trung tâm cảm biến với bộ xử lý chính. Vì vậy, trung tâm cảm biến μC là bậc thầy trên xe buýt I²C địa phương và là nô lệ trên xe buýt chính I²C.

SPI và I²C

PIC được liên kết trong bài viết gốc không chia sẻ các chân giữa SPI và I²C. Tuy nhiên, có những PIC khác sử dụng cùng một chân cho SPI và I²C phần cứng, vì cả hai đều được thực hiện với cùng một thiết bị ngoại vi MSSP. Nếu một PIC có hai thiết bị ngoại vi MSSP riêng biệt, thì một cái có thể được sử dụng cho SPI phần cứng, trong khi một cái khác được sử dụng cho phần cứng I²C.


21

Một lý do rất phổ biến để cần nhiều hơn một xe buýt là có các thiết bị chạy ở tốc độ khác nhau. Ban đầu, I²C chạy ở tốc độ tối đa 100 kHz. Sau đó, tốc độ được tăng lên tối đa 400 kHz, và sau đó, lên 1 MHz trở lên.

Gotcha là, vì địa chỉ của mỗi thiết bị được nhúng trong giao thức I²C, nên nếu bạn có các thiết bị có xếp hạng tốc độ khác nhau trên cùng một xe buýt, giả sử 100 kHz và 400 kHz, bạn luôn phải chạy xe buýt ở tốc độ thấp nhất cho tất cả các thiết bị trên cùng một bus (100 kHz trong trường hợp này).

Nếu bạn chạy xe buýt ở tốc độ cao hơn (400 kHz), rõ ràng thiết bị tốc độ thấp hơn sẽ không hoạt động chính xác và thậm chí nó có thể hiểu địa chỉ của thiết bị tốc độ cao là chính nó, khiến thiết bị 400 kHz không thành công tốt. Nhưng ngay cả khi ban đầu bạn chạy xe buýt ở tốc độ 100 kHz, và sau đó cố gắng tăng tốc độ xe buýt lên 400 kHz sau khi xử lý chip tốc độ cao hơn, thì có thể (mặc dù rất có thể) để chip tốc độ thấp hơn có thể hiểu được một trong những các gói dữ liệu tốc độ cao không chính xác như địa chỉ của nó và do đó làm rối loạn giao tiếp trên xe buýt. Trong cả hai trường hợp, vào cuối giao điểm với thiết bị 400 kHz, thiết bị 100 kHz có thể sẽ ở trạng thái không xác định.

Vì vậy, hiệu quả nhất là, nếu bạn có các thiết bị chạy ở tốc độ khác nhau bạn có nhiều cổng I²C bạn có các chân dự phòng để cho phép sự sang trọng như vậy, để có một I²C cho các thiết bị 100 kHz, một thiết bị khác cho các thiết bị 400 kHz và một thiết bị khác cho các thiết bị 1 MHz, vì nhu cầu của bạn có thể sai khiến.

Đây không phải là vấn đề với SPI vì mỗi thiết bị được bật (xử lý) trong phần cứng bằng một dòng chọn chip riêng biệt. Vì vậy, tốc độ xung nhịp có thể phù hợp với tốc độ của chip đã chọn (10 MHz, 20 MHz, bất cứ điều gì) mà không có bất kỳ ảnh hưởng nào đến các chip khác trên cùng một bus, vì chúng không được kích hoạt.


19

Ngoài ra, nó có thể cho phép bạn hỗ trợ hai thiết bị có cùng địa chỉ. Có, hầu hết các thiết bị cho phép bạn chọn có thể hai bit dưới cùng của địa chỉ của chúng bằng dây đai. Gần đây tôi phải hỗ trợ 4 thiết bị, mỗi thiết bị chỉ cho phép bạn đặt LSB theo địa chỉ của chúng bằng điện trở. Có hai cổng có nghĩa là không có chi phí thêm cho tôi.

Có lẽ tôi muốn một người trở thành chủ nhân cho một loạt các thiết bị và giới thiệu thiết bị kia là cổng nô lệ, vì vậy chủ của tôi không phải đợi để lấy xe buýt để ra lệnh cho tôi trong khi tôi thăm dò cảm biến nhiệt độ trong 10.000 thời gian.

Dường như có một loạt các phản hồi tốt khác trong chủ đề này, chỉ cần thêm 2 xu của tôi.


9

Tốc độ.

Nếu bạn cần truy cập hai thiết bị I2C cùng một lúc, bạn có thể có một cuộc xung đột đáng kể. Hoặc, người ta sẽ phải chờ người kia.


9

Thứ hai, I²C có thể được sử dụng để có thêm băng thông (bạn có thể nhận hoặc gửi hai byte cùng một lúc).

Nếu bạn có một số ADC hoạt động liên tục, một I²C luôn luôn bận rộn.

Việc chuyển đổi địa chỉ cũng mất một thời gian, vì vậy trong một số trường hợp - bạn có thể sử dụng hai cổng cho hai thiết bị và tránh thay đổi địa chỉ để tiết kiệm thời gian.


0

Những người khác đề cập đến nhiều lý do để làm điều này, tôi sẽ thêm một:

Bạn có một loạt các thiết bị I2C 5V và một loạt các thiết bị I2C 3V3.

Ví dụ, tôi có một micro 3,3V có hai cổng I2C, một cổng chịu được 5V, chỉ có 3V3.


Vì tò mò, đó là vi mô nào?
Nick Alexeev

1
LPC4330, đây là đoạn trích từ hướng dẫn sử dụng: "Bàn phím I / O kỹ thuật số dung nạp 5 V mở rộng, tương thích với thông số kỹ thuật Fast Mode Plus của I2C-bus. Tấm đệm này yêu cầu kéo lên bên ngoài để cung cấp chức năng đầu ra. Khi tắt nguồn, điều này tắt chân được kết nối với bus I2C đang trôi nổi và không làm phiền các đường I2C. "
peufeu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.