Có số lượng nô lệ i2c tối đa mà chủ i2c có thể lái không? Các yếu tố giới hạn vật lý là gì?
Có số lượng nô lệ i2c tối đa mà chủ i2c có thể lái không? Các yếu tố giới hạn vật lý là gì?
Câu trả lời:
Yếu tố giới hạn phần mềm là kích thước của địa chỉ được sử dụng cho các nô lệ: 7 bit hoặc 10 bit, hỗ trợ 127 và 1023 thiết bị, tương ứng. Về mặt vật lý, có hai hạn chế. Đầu tiên, kích thước vật lý của xe buýt vì xe buýt chỉ có ý nghĩa cho các hoạt động ngắn (phần liên IC). Nếu xe buýt quá lớn, có các hiệu ứng trì hoãn tải và lan truyền điện dung cần được xử lý. Thứ hai, một số thiết bị không thể hỗ trợ đầy đủ các địa chỉ I2C. Ví dụ, con quay hồi chuyển MPU6050 chỉ hỗ trợ hai địa chỉ và một số thiết bị dành địa chỉ cụ thể cho các mục đích đặc biệt.
Địa chỉ giới hạn số lượng thiết bị - một số có thể sử dụng địa chỉ 10 bit (khá hiếm khi được sử dụng), điều này giới hạn số lượng địa chỉ là 1024. Có một số địa chỉ 'dành riêng'.
I2C (trái ngược với "xe buýt hai dây" hoặc bất cứ điều gì người khác muốn gọi các xe buýt tương tự), nên tuân theo tiêu chuẩn NXP (nhũ danh Philips), thông số kỹ thuật và hướng dẫn sử dụng xe buýt UM10204 I2C . Đó phải là tài liệu tham khảo chính của bạn, không phải là các diễn giải và tập hợp con khác nhau tồn tại ở nơi khác.
Số lượng thiết bị tối đa sẽ bị ảnh hưởng bởi khả năng điều khiển của đầu ra yếu nhất (từ đó xác định điện trở pullup tối thiểu), điện dung dây và đầu vào và chế độ / tần số hoạt động. Xem phần 7.2 Hoạt động trên điện dung bus tối đa cho phép nếu vượt quá điện dung tối đa:
Một bus i2c bị giới hạn chủ yếu bởi điện dung của bus (và do đó là tốc độ) và các địa chỉ thiết bị có thể truy cập. Và không gian bảng vật lý.
Nhưng không có giới hạn trên thực sự, khi bạn tính đến bộ đệm bus, bộ mở rộng, bộ lặp, bộ tập trung, bộ ghép kênh, bộ chuyển mạch (hoặc bất kỳ tên nào khác cho một thiết bị có thể chuyển đổi giữa nhiều bus). Những cái này thêm một số chi phí i2c, như có thể có thể truy cập thông qua cùng một bus i2c. Ví dụ, PCA9548A là một công tắc bus 8 bit.
Về mặt lý thuyết, con chip đơn lẻ này có thể tăng gấp bốn lần số lượng nô lệ i2c (127 * 8). Và PCA9548A có thể được cấu hình cho tối đa 8 địa chỉ trên một xe buýt, do đó, 8 * 8 * 127 thiết bị. (toán có thể được tắt). Và đó chỉ là với thiết bị này và không nhiều hơn nữa.
Thành thật mà nói, không có giới hạn lý thuyết nếu bạn điều chỉnh cho điện dung.
I2C chỉ định 2 độ dài địa chỉ, 7 và 10 bit , cung cấp tối đa lý thuyết tương ứng là 128 và 1024 địa chỉ riêng biệt.
Tuy nhiên, có một vài địa chỉ dành riêng, chẳng hạn như 0x00 (cuộc gọi chung). Điều này tiếp tục giới hạn không gian địa chỉ.
Nếu bạn đang xây dựng một hệ thống mà bạn có quyền kiểm soát trực tiếp các thiết bị I2C, bạn có thể sử dụng các địa chỉ dành riêng cho mục đích sử dụng của riêng bạn, nhưng hệ thống sẽ không còn tuân thủ tiêu chuẩn I2C.
Ngoài việc đánh địa chỉ, còn có những hạn chế về xe buýt vật lý. Mỗi thiết bị trên xe buýt cần có khả năng kéo xe buýt xuống thấp trong một khoảng thời gian nhất định (tùy thuộc vào tốc độ xe buýt). Nếu xe buýt có nhiều điện dung, các thiết bị có thể không thể kéo SDA xuống đủ nhanh và việc kéo lên có thể không đưa SDA trở lại đủ nhanh.
Bây giờ, các vấn đề phần cứng có thể được khắc phục với một chút phần cứng trình điều khiển. Hiện tôi đang làm việc trên một dự án sử dụng I2C để liên lạc với các thiết bị trong phạm vi 10 mét. Xe buýt chính sử dụng 24v và mỗi bảng có một trình điều khiển giảm xuống còn 3,3v.
Trong một vỏ hạt, giới hạn vật lý của I2C có thể được khắc phục. Địa chỉ có thể được khắc phục, nhưng chỉ khi bạn có quyền kiểm soát trực tiếp trên thiết bị.
Giới hạn chính về số lượng nô lệ mà chủ nhân có thể lái xe thường đến từ các yếu tố điện như điện dung của xe buýt, rò rỉ, cường độ ổ đĩa, v.v. Nếu người ta có thể xây dựng nô lệ với điện dung không ký sinh và rò rỉ bằng 0 với dấu vết bảng điện dung bằng không, thì điện dung của xe buýt sẽ không phải là một yếu tố, nhưng trong thực tế, không có giả định nào được giữ vững.
Địa chỉ của các thiết bị "biết" về nhau, mặt khác, thực sự không phải là một vấn đề. Sẽ rất đơn giản khi thiết kế một thiết bị ngoại vi cho phép hàng tỷ chip được kết nối bằng một địa chỉ đọc và một địa chỉ ghi. Đơn giản chỉ cần xác định rằng mọi thiết bị phải có ID bốn byte duy nhất và được yêu cầu nghe địa chỉ ghi mọi lúc, nhưng phải loại bỏ mọi giao dịch có bốn byte dữ liệu được truyền đầu tiên không khớp với ID của chúng. Hơn nữa xác định rằng các thiết bị chỉ có thể phản hồi địa chỉ đọc nếu giao dịch ghi cuối cùng mà chúng nghe được khớp với địa chỉ của chúng.
Nếu một người muốn thêm khả năng để chủ xác định ID của tất cả các nô lệ được kết nối, người ta có thể bảo lưu một số phạm vi ID đặc biệt cho các mục đích đó. Ví dụ, người ta có thể nói rằng nếu byte ID đầu tiên là FF, thì bốn byte tiếp theo sẽ là mặt nạ và bốn byte sau đó là ID; một thiết bị sẽ được kết nối (và lấy byte ID cuối cùng) nếu phần ID của nó được chỉ định bởi mặt nạ khớp với lệnh được đưa ra trong lệnh. Điều này sẽ cho phép chủ xác định ít nhất một thiết bị sử dụng 64 giao dịch và các thiết bị bổ sung sử dụng 62 giao dịch hoặc ít hơn mỗi giao dịch. Có lẽ không phải là phương tiện nhận dạng thiết bị nhanh nhất có thể, nhưng không tệ khi cung cấp không gian tìm kiếm hàng tỷ ID thiết bị.
Câu trả lời ngắn: Nó phụ thuộc
Nếu bạn có các thiết bị (phổ biến) có địa chỉ 7 bit lên tới 104 Thiết bị (128 địa chỉ - địa chỉ dành riêng (0x00-0x07 và 0xF0-0xFF được bảo lưu)) (áp dụng một số giới hạn nhất định) Nếu bạn có (ít phổ biến hơn) các thiết bị hỗ trợ 10 bit giải quyết tối đa 1024 thiết bị (bạn có thể kết hợp các thiết bị 7 bit và 10 bit và tiếp cận tới 1136 thiết bị theo cách đó)
Bây giờ đến giới hạn: Hầu hết các thiết bị đơn giản chỉ có thể được cấu hình thành hai đến 8 địa chỉ khác nhau. Bạn có thể khắc phục điều này bằng cách đặt hàng các thiết bị tùy chỉnh với các địa chỉ cơ sở khác nhau (nhưng điều này thường có nghĩa là bạn đặt mua một lượng thiết bị tối thiểu) Cũng có những hạn chế về phần cứng (chủ yếu là điện dung xe buýt) nhưng điều này có thể được giải quyết bằng trình điều khiển i2c đặc biệt.
Nếu bạn muốn kết nối nhiều thiết bị ở khoảng cách lớn hơn, tôi khuyên bạn nên sử dụng bus trường! I2C được thiết kế để liên lạc bên trong một thiết bị (như TV). Tôi đang sử dụng I2C với RaspberyPi với cáp bên ngoài lên đến 50 cm (ngay cả với Phần T bạn không bao giờ nên có trong hệ thống xe buýt). Nó hoạt động tốt đáng ngạc nhiên.
Số lượng thiết bị kết nối với xe buýt chỉ bị giới hạn bởi tổng điện dung cho phép của bus là 400 pF. Bởi vì hầu hết các IC có giao diện I²C sử dụng công nghệ CMOS có công suất thấp, trở kháng cao, nhiều IC có thể được kết nối với bus I²C trước khi đạt được điện dung tối đa
Với các chip ghép kênh được thêm vào (như TCA9544A) hoặc bộ đệm (như PCA9515B), bạn có thể vượt qua mọi giới hạn - cả điện dung và địa chỉ bus.
Bạn có thể đặt 3 thiết bị có địa chỉ giống hệt nhau phía sau bộ ghép kênh và chỉ chọn một trong số chúng, liên lạc với nó và sau đó chọn một thiết bị khác. Tất nhiên phần mềm trở nên phức tạp hơn.
Nếu bạn có dây dài, bạn có thể đặt một bộ đệm ở giữa và vượt qua giới hạn điện dung.