Tại sao I²C chỉ có điện trở kéo lên (câu hỏi phỏng vấn)?


15

Người phỏng vấn muốn biết tại sao điện trở kéo lên được sử dụng trên SDA và SCL khi logic ngược lại cũng có thể được thực hiện. Có một lời giải thích cho lý do tại sao sử dụng điện trở kéo lên là thiết kế được chọn?



Giống như một nhận xét Giao thức I2C-bus Ultra Fast-mode hoạt động như cấu hình kéo đẩy, xem nxp.com/document/user_manual/UM10204.pdf , phần 3.2 Giao thức bus I2C chế độ siêu nhanh
Kvegaoro

Tôi tự hỏi tại sao NXP không chỉ định giao thức I2C cực nhanh, sử dụng SDA hai chiều và SCK đơn hướng, có ổ đĩa SDA cứng khi muốn đầu ra cao và phải chờ bản chính đủ lâu để dòng được kéo lên cao trong trường hợp nó sẽ quan tâm những gì một nô lệ đã nói gì?
supercat

Người phỏng vấn có đưa ra phiên bản trả lời của họ không?
đồng.

Câu trả lời:


14

Để mở rộng câu trả lời của Jon một chút:

Vâng, đó là tất cả để làm với MOSFE mà bạn muốn sử dụng.

Các MOSFET kênh N tốt hơn nhiều cho việc chuyển đổi logic so với kênh P vì:

  • Họ thường có sức đề kháng thấp hơn nhiều ( )RDSON
  • Họ bật và tắt nhanh hơn

Vì vậy, đối với cấu hình cống mở (chính là I2C), việc tạo ra nó rẻ hơn và dễ dàng hơn bằng cách sử dụng một sự sắp xếp "nhàn rỗi cao" với các MOSFET kênh N thay vì "nhàn rỗi thấp" với MOSFET kênh P.

Tùy chọn thứ ba sẽ là "nhàn rỗi thấp" bằng cách sử dụng MOSFET kênh N, nhưng đối với đó, bạn cần có trình điều khiển cổng điện áp cao để tăng điện áp cổng đủ xa so với điện áp nguồn để MOSFET bật. Không thực tế đối với các xe buýt thông tin liên lạc nhỏ, nhưng cách sắp xếp này thực sự được sử dụng khá phổ biến trong các cầu H cho lái xe máy, nơi bạn muốn có phản ứng tương tự (hoặc tương tự) giữa phía cao và phía thấp của cầu H. Sử dụng các cặp kênh P và kênh N trong cầu H thường có nghĩa là bạn phải kết hợp vùng chết giữa tắt kênh P và bật kênh N vì mất nhiều thời gian hơn và điều đó làm giảm hiệu quả năng lượng của bạn .

Nhưng đối với các xe buýt truyền thông nhỏ như I2C, nơi bạn cần tốc độ cao, chi phí thấp và sử dụng đơn giản, thì "nhàn rỗi cao" với MOSFET kênh N và điện trở kéo lên là hiệu quả nhất về chi phí.


Tôi không đồng ý về việc "tốc độ cao" là một sự cân nhắc trong I2C (ít nhất là trong thiết kế ban đầu của nó). Pull-up điện trở hầu như không phải là cách để đạt được tốc độ cao nếu đó là mục tiêu.
Photon

1
Đừng nhầm lẫn chuyển đổi tốc độ cao hơn với băng thông cao hơn. Chuyển đổi tốc độ cao cung cấp cho bạn các cạnh sắc nét hơn nhiều có nghĩa là giao tiếp đáng tin cậy hơn.
Majenko

1
Kéo điện trở cũng không phải là cách để đạt được tốc độ chuyển đổi cao hơn.
Photon

Đây là lý do tại sao việc chọn các giá trị điện trở phù hợp cho I2C là quan trọng 'và tại sao Arduino lại xấu khi sử dụng các pullups bên trong theo mặc định.
Majenko

Có, bạn có thể chọn điện trở của mình để có được thời gian tăng tốt hơn. Nhưng toàn bộ hệ thống vẫn chậm hơn và / hoặc sử dụng nhiều năng lượng hơn so với trình điều khiển cực totem (tất nhiên sẽ thêm các chi phí khác).
Photon

12

Một ưu điểm khác của kéo thụ động / chủ động kéo xuống, là nó có thể hoạt động với một loạt các điện áp. Lưu ý rằng các mức cao và thấp kỹ thuật số được chỉ định rõ ràng với IIC. Những mức này đủ thấp để làm việc với pullups 3,3 V. Do đó, các thiết bị có thể được xây dựng hoạt động với cả nguồn 5 V và 3,3 V. Trên thực tế, các tuyến xe buýt IIC có thể được kéo lên tới 3,3 V và điều này sẽ hoạt động với một hỗn hợp các thiết bị trên xe buýt được cấp nguồn riêng ở các điện áp khác nhau.


Tôi gần như 100% đây là câu trả lời mà họ đang tìm kiếm, tôi có một người bạn đã hỏi rằng tại một cuộc phỏng vấn cho một công ty sản xuất CPU lớn (đoán xem cái nào) và đó là câu trả lời mà họ đang tìm kiếm.
user34920

6

Mặc dù NMOS có lợi thế hơn PMOS về tốc độ / diện tích, nhưng sự khác biệt này thực sự là phút khi bạn nói về một trình điều khiển trên một hoặc hai chân. Và xét cho cùng, hầu hết các trình điều khiển đầu ra thực sự là các loại totem cực yêu cầu cả NMOS và PMOS, do đó, dù họ đã chọn cấu hình kéo xuống hay kéo lên, họ sẽ kết thúc với trình điều khiển đầu ra nhỏ hơn một totem- lái xe cực.

Nhưng có một lợi ích của đầu ra cống mở NMOS so với cống mở PMOS không áp dụng trực tiếp với I2C: khi VCC dương, cống mở NMOS cho phép các chip với các mức VCC khác nhau được kết nối với nhau. Đây là (một phần) lý do tại sao có rất nhiều IC logic rời rạc mở NMOS.

Mặt khác, tôi không biết về BẤT K chip chip mở nào PMOS có sẵn trên thị trường. Trên thực tế, tôi không tin rằng mình đã từng gặp một đầu ra mở PMOS trên bất kỳ chip nào. (Tôi đã sử dụng ECL nhiều lần, có đầu ra bộ phát mở NPN với hành vi tương tự như cống mở PMOS)

Tính khả dụng của các chip logic rời rạc mở NMOS làm cho cống mở NMOS quen thuộc hơn nhiều đối với các nhà thiết kế điện tử so với cống mở PMOS.

Cả sự quen thuộc và tính sẵn có của các chip rời rạc (ví dụ như tạo mẫu), có khả năng đã ảnh hưởng đến các nhà thiết kế của I2C để chọn cấu hình cống mở NMOS.


6

Tôi đoán câu trả lời quay trở lại lý do tại sao chúng ta sử dụng quy ước mặt đất tiêu cực ở nơi đầu tiên (và điều này chắc chắn không phổ biến trước thời đại bán dẫn). Lý do cho điều này là các thiết bị N-Channel có hiệu suất tốt hơn các thiết bị P-Channel do tính chất vật lý của các loại sóng mang đa số được sử dụng trong chúng.

Trong những ngày đầu của các mạch tích hợp, đây là một hạn chế khá nghiêm trọng và do đó, có một ưu tiên cho việc sử dụng các bóng bán dẫn N-Channel (hoặc NPN) để đạt được hiệu suất cao nhất có thể. Từ đó, chúng tôi có được một hệ thống mặt đất âm và các đầu ra collector mở đòi hỏi phải sử dụng điện trở kéo lên thay vì kéo xuống.

Tất nhiên, bus I2C hầu như không có tốc độ cao, vì vậy không có lý do gì nó không thể được thực hiện bằng cách sử dụng điện trở kéo xuống, nhưng cũng không có lợi thế. Vì vậy, chúng tôi gắn bó với quy ước và nó sử dụng pull-up.


2

Đây là một số suy đoán (có căn cứ lịch sử) ...

Khi bạn có pullup (chứ không phải pull-pull), rõ ràng bạn có thể có nhiều thiết bị tranh chấp với xe buýt mà không có dòng chảy quá mức (Điều tốt - nhưng bạn có thể đạt được điều tương tự với kéo xuống).

Trong "ngày xưa" của các bóng bán dẫn lưỡng cực, logic TTL đơn giản nhất đã sử dụng các bộ thu mở với các bóng bán dẫn NPN - mọi thứ đều được tham chiếu đến mặt đất, làm cho các mức kích hoạt trở nên đơn giản để xác định bất kể điện áp của bus. Ngoài ra, NPN nhanh hơn PNP.

Nếu tôi có nhiều thiết bị làm việc với điện áp cung cấp riêng của chúng và điện áp cung cấp đó không phải là hằng số, thì việc kéo lên thay vì kéo xuống trở nên cấp thiết . Nếu nhiều thiết bị cố gắng kéo xe buýt đến đường ray cung cấp tương ứng, dòng chảy hiện tại sẽ không bị hạn chế và có thể có thứ gì đó bị rán. Ít nhất là tất cả họ đều đồng ý về giá trị của mặt bằng, vì vậy vấn đề này không phát sinh.

Với CMOS, câu chuyện thay đổi - bây giờ mức kích hoạt là mid rail. Nhưng EE có thể là một bó truyền thống. Chắc chắn, đến từ những ngày đầu của bóng bán dẫn, tôi thậm chí không bao giờ đặt câu hỏi về sự lựa chọn của pull-up, vì những lý do trên.

Như tôi đã nói, đây chỉ là suy đoán.


1

Đây có thể là một điều lịch sử.

Các bóng bán dẫn cũ và các mạch tích hợp thực sự tiêu thụ ít năng lượng hơn khi chúng ở mức 5 V so với 0 V. Vì có sự khác biệt đáng kể giữa hai cấp độ, các nhà thiết kế đã chọn để biến trạng thái 'nhàn rỗi' thành 5 V. Sau đó, khi thời gian trôi qua, các bóng bán dẫn và IC được cải thiện, khiến cả hai trạng thái tiêu thụ một lượng điện năng tương đương nhau, nhưng không có lý do thực sự để thay đổi các tiêu chuẩn.

Bây giờ, bạn thấy rất nhiều thứ như thế này - trong đó nhàn rỗi là 5 V - chỉ vì các tiêu chuẩn không bao giờ thay đổi.


Điều vẫn đúng là hầu hết các IC có thể chìm nhiều năng lượng hơn nguồn có thể, vì vậy nó vẫn có thể áp dụng được.
Joel B

1

Đã nhiều năm kể từ khi tôi đọc thông số I2C, nhưng tôi nhớ khi nó được sử dụng lần đầu tiên, mọi người thường gọi nó là xe buýt thu gom 2 dây. Nó làm cho các kết nối và phát hiện va chạm siêu dễ dàng ngay cả đối với tiếng đập bit. Thậm chí 20 năm trước, nó không được coi là một chiếc xe buýt hiệu suất cao, chỉ rẻ và dễ dàng.


1

Tôi muốn nói rằng đó là vì I2C được định nghĩa là một chiếc xe buýt trong đó tất cả các đơn vị được kết nối nên là cống mở hoặc bộ thu mở. Điều này có nghĩa là nó chỉ có thể lái xe buýt thấp, không cao. (Khi bóng bán dẫn ổ đĩa đầu ra bị tắt, pin ở trạng thái trở kháng cao.)

Sơ đồ này cung cấp một số lợi ích tốt, ví dụ như bạn có thể kết nối các thiết bị với các điện áp tín hiệu khác nhau và xe buýt tự phục hồi khỏi các lỗi giao tiếp.

Rõ ràng, tiêu chuẩn có thể đã được định nghĩa theo cách khác, như một cấu hình nhàn rỗi thấp / hoạt động cao, và các câu trả lời khác ở đây chạm vào yếu tố đó khá tốt.

Nguồn: LabWorX 1, Làm chủ xe buýt I2C, của Vincent Himpe. Một cuốn sách thực sự hay về I2C, đó là bối cảnh lịch sử, cách triển khai nó trong phần cứng và cách sử dụng nó trong phần mềm và triển khai gỡ lỗi.


1

Câu trả lời thực sự mà chưa ai chạm vào đủ là nó cho phép bạn kết nối các thiết bị được cung cấp bởi các điện áp khác nhau (miễn là các chân I / O có thể chịu được). Ví dụ, một thiết bị 3,3V có thể giao tiếp với một thiết bị tắt nguồn 1,8V miễn là IO của thiết bị 1,8V có thể chịu được điện áp lên đến 3,3. Tất nhiên mọi thiết bị đều có thể lái 0V, nhưng không phải mọi thiết bị đều có thể điều khiển điện áp ở điện trở kéo lên của bạn.

Ngoài ra, hầu hết các IC có thể chìm nhiều hơn hiện tại. Điều này là do tản nhiệt. Vì vậy, phần chìm hiện tại (mặt đất lái xe) từ bộ phận kéo lên dễ dàng hơn so với nguồn cung cấp (điều khiển điện áp cao) vào bộ phận kéo xuống.

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.