Có một giá trị điện trở chính xác cho điện trở kéo lên I2C không?


72

Bảng dữ liệu của EEPROM 24LC256 nói rằng:

Bus SDA yêu cầu điện trở kéo lên tới VCC (điển hình là 10 kΩ cho 100 kHz, 2 kΩ cho 400 kHz và 1 MHz).

Tôi nghĩ rằng bất kỳ điện trở nào có giá trị kΩ sẽ thực hiện công việc (và có vẻ như EEPROM của tôi hoạt động tốt ở các tần số khác nhau với điện trở 10 kΩ).

Câu hỏi của tôi là:

  • Có một giá trị chính xác cho điện trở kéo lên?
  • Có luật / quy tắc để xác định giá trị này?
  • làm thế nào để các giá trị kháng khác nhau ảnh hưởng đến bus dữ liệu I²C?

Một số thứ liên quan: Electronics.stackexchange.com/q/76376/2028
JYelton

Câu trả lời:


66

Điện trở pullup chính xác cho bus I 2 C phụ thuộc vào tổng điện dung trên bus và tần số bạn muốn vận hành bus tại.

Công thức từ bảng dữ liệu ATmega168 (mà tôi tin là xuất phát từ thông số I 2 C chính thức ) là -

Freq<100kHzRmin=Vcc0.4V3mA,Rmax=1000nsCbus

Freq>100kHzRmin=Vcc0.4V3mA,Rmax=300nsCbus

Microchip 24LC256 chỉ định điện dung pin tối đa là 10pF (khá điển hình). Đếm số lượng thiết bị bạn có song song trên xe buýt và sử dụng công thức trên để tính toán một loạt các giá trị sẽ hoạt động.

Nếu bạn tắt nguồn pin, tôi sẽ sử dụng các giá trị ở mức cao của phạm vi. Nếu không có giới hạn công suất đối với nguồn điện hoặc các sự cố tiêu tán năng lượng trong IC, tôi sẽ sử dụng các giá trị ở đầu dưới của phạm vi.

Tôi bán một số bộ dụng cụ với I 2 C RTC (DS1337). Tôi bao gồm các điện trở 4K7 trong bộ sản phẩm có vẻ như là một sự thỏa hiệp hợp lý cho hầu hết người dùng.


Thông thường tôi sẽ tưởng tượng xe buýt không hoạt động (không được xác nhận) trong phần lớn thời gian, vì vậy đối với một ứng dụng pin, có nhiều vấn đề quan trọng hơn để giải quyết hơn là cố gắng tối ưu hóa việc kéo I2C chỉ vì vậy: P
Nick T

5
điều duy nhất tôi sẽ thêm là một bộ đệm trên điện dung tổng của các thiết bị trên xe buýt. Bản thân dấu vết cũng như các mối hàn từ miếng đệm đến chân cũng sẽ có một số trở kháng. Trên các xe buýt dài hơn, điện dung của dấu vết / dây có thể lớn hơn điện dung pin của thiết bị. Khi thiết kế bảng sản xuất, tôi thường không xác định giá trị kéo lên cuối cùng cho đến khi tôi có một nguyên mẫu trong tay và có thể phạm vi xe buýt với các giá trị khác nhau.
Đánh dấu

14

Điều có ý nghĩa là tần số cao hơn yêu cầu kéo điện trở thấp hơn: điện trở thấp hơn sẽ sạc / xả điện dung của cáp nhanh hơn, dẫn đến các cạnh dốc hơn. Với các xung tần số thấp hơn, cạnh ít dốc hơn sẽ không ảnh hưởng đến hình dạng của xung.

Do đó, đặc tả I2C cung cấp các giá trị tối đa cho các điện trở kéo lên như là một hàm của điện dung bus cho ba lớp tốc độ:

nhập mô tả hình ảnh ở đây

Các giá trị tối thiểu được xác định theo chức năng của điện áp bus và nên giới hạn dòng điện thông qua các trình điều khiển.


3
3 năm sau, Texas Cụ đã viết một ghi chú ứng dụng khá gần với câu trả lời này.
Nick Alexeev

Bài viết EDN: Thiết kế tính toán cho truyền thông I2C mạnh mẽ . [Chỉ cần chồng chất tài liệu tham khảo.]
Nick Alexeev

11

Có một phạm vi chính xác của các giá trị, tuy nhiên rất khó để mô tả chính xác phạm vi đó là gì. Nói chung, 10k hoạt động.

Đầu ra kỹ thuật số có một khả năng cụ thể để nguồn hoặc chìm hiện tại. Nếu đầu ra của bạn có thể chìm 5 mA và đầu ra được kết nối thông qua kéo lên đến 5 V và sau đó được đặt thành 0, bạn sẽ cần tối thiểu 1k điện trở. Nếu bạn sử dụng ít hơn 1k, đầu ra sẽ không thể chìm đủ dòng để kéo pin xuống hết 0V. Nếu bạn sử dụng giá trị lớn hơn, như 10k, thì pin chỉ phải chìm 0,5 mA, ít hơn nhiều so với đánh giá của nó.

Đầu vào kỹ thuật số có một dòng rò cụ thể. Điều này giống như lượng dòng điện cần thiết để "duy trì" 0 hoặc 1 ở đầu vào. Nếu điện trở kéo lên của bạn quá lớn, thì nó sẽ không thể khắc phục được dòng rò. Nếu nó chỉ khắc phục được dòng rò, thì bất kỳ nhiễu nào trong mạch có thể đủ để thay đổi đầu vào.

Khi sử dụng các đầu ra kỹ thuật số có thể chìm và nguồn hiện tại ("trình điều khiển cực totem", "trình điều khiển kéo đẩy"), bạn có thể không muốn sử dụng điện trở kéo lên hoặc kéo xuống. Tuy nhiên, điều rất quan trọng là các đầu vào CMOS không được phép nổi hoặc chúng có thể kéo dòng quá mức ... và rất dễ quên rằng các chân MCU hai chiều thường xuất hiện dưới dạng đầu vào!


I2C và các giao thức khác giống như nó sử dụng đầu ra "open Drain" (hoặc "open collector"). Thay vì có đầu ra có thể kéo lên và xuống, và đầu ra cống mở chỉ có thể kéo xuống. Đó là lý do tại sao điện trở kéo lên bên ngoài được yêu cầu. Hiện nay có những hạn chế bổ sung về phạm vi của điện trở kéo lên; giá trị kéo lên sẽ tạo thành một mạch RC với điện dung của bus. Giá trị quá nhỏ sẽ một lần nữa ngăn các trình điều khiển đầu ra chìm đủ dòng để kéo pin xuống hết 0. Tuy nhiên, giá trị quá lớn sẽ mất quá nhiều thời gian để sạc điện dung của bus lên.

Nếu có thời gian thiết lập / giữ mà bạn không được phép vi phạm, những lần đó sẽ giúp bạn xác định hằng số thời gian RC. Điện dung của bus phần lớn được xác định bởi bố cục PCB, do đó bạn có thể chọn giá trị R kết hợp với C để cung cấp giá trị thoải mái trong thời gian thiết lập / giữ cho đầu vào kỹ thuật số của bạn.


7

Giá trị kéo lên thấp (điện trở thấp hơn) có thể cải thiện các cạnh của quá trình chuyển đổi tín hiệu nhưng đôi khi có thể quá cứng - nếu các thiết bị trên xe buýt không thể nhấn chìm dòng điện kéo lên, bạn có logic 'thấp' không thực sự thấp , có thể gây ra lỗi giao tiếp (và đau nhiều.)

Tôi sẽ đi với sức đề kháng cao nhất cung cấp cho bạn thông tin liên lạc đáng tin cậy.


5

Đối với tần số thấp, giá trị không thực sự quan trọng, nhưng đối với tần số cao, nó có thể có hiệu ứng lọc đối với tín hiệu, kết hợp với các công suất khác trong mạch, đó là lý do tại sao chúng khuyến nghị các giá trị khác nhau cho các tốc độ khác nhau.


2

Một vấn đề tôi chưa thấy đề cập đến là tiêu thụ điện năng. Nếu một người đang sử dụng nguồn 3,3 volt, điện trở 3,3K nối đất sẽ lãng phí 1mA dòng điện (3,3mW) mỗi khi đầu ra thấp. Sử dụng điện trở 10K sẽ giảm cả dòng điện và công suất xuống 3 lần. Nếu có nhiều thông tin liên lạc trên xe buýt I2C, thì mức tiêu thụ năng lượng đó có thể sẽ là một phần đáng kể của việc tiêu hao năng lượng tổng thể, đặc biệt nếu xe buýt có thể ngồi ở mức thấp trong thời gian dài. Ví dụ: nếu một người đang đọc 100 byte / giây nhưng sau khi đọc từng byte thì bus còn lại với thiết bị xuất ra bit đầu tiên của byte tiếp theo và hầu hết các byte đó đều có MSB rõ ràng, bus có thể chi 90% thời gian với SCL và SDA thấp. Tùy thuộc vào những gì khác mà hệ thống đang làm, điều đó có thể làm tăng sức mạnh một cách ồ ạt.

Để tiết kiệm năng lượng, có thể hữu ích khi có điện trở "kéo lên" được kết nối với chân I / O thay vì VDD. Mặc dù tôi chưa thấy các triển khai I2C phần cứng cung cấp hỗ trợ cho việc này, nhưng có dữ liệu đầu ra chính trên một pin I / O riêng được kết nối với bus qua điện trở thay vì sử dụng trình điều khiển bộ thu mở và điện trở kéo cố định sẽ tránh được lãng phí hiện tại khi chủ muốn xuất "0". Ngoài ra, nếu chủ nhân sẽ để SCK ở mức thấp trong một thời gian mà không quan tâm đến những gì trên SDA, chủ có thể vô hiệu hóa việc kéo lên cho đến khi nó sẵn sàng để giao tiếp nhiều hơn. Nếu không có thiết bị nào cần sử dụng kéo dài đồng hồ, chủ có thể chỉ cần sử dụng đầu ra trực tiếp cho SCK và không bận tâm với bất kỳ thao tác kéo nào trên dây đó.

Nếu một người đang sử dụng phần mềm đập mạnh với bộ xử lý nhanh và người ta muốn có được hiệu năng tốt mặc dù điện dung của bus cao, cách tiếp cận trên có thể được kết hợp với việc sử dụng các bộ kéo yếu tích hợp của bộ xử lý. Khi đọc dữ liệu, hãy bật một lực kéo rất mạnh, nhanh chóng, ngay lập tức sau mỗi lần rơi của SCK, sau đó chuyển sang kéo lên yếu. Lực kéo mạnh sẽ kéo đường dây lên cao bất chấp điện dung, và một khi đường dây được kéo lên cao, lực kéo yếu sẽ có thể giữ đường cao. Ngay cả khi một thiết bị sẽ gặp khó khăn khi kéo dây xuống thấp so với lực kéo mạnh, nó vẫn có thể làm như vậy một khi chế độ kéo mạnh bị tắt.



-1

Dưới đây là dạng sóng, với tốc độ 400kiloBits / giây (dạng sóng 200KHz 101010). RC là 4,7K ohm và 212pF. Giá trị RC cho phép giải quyết 2 TAU.

nhập mô tả hình ảnh ở đây


Câu trả lời này chỉ sai. Đồng hồ 200 kHz cho 200 kb / s, không phải 400. Chỉ có các cạnh tăng lên bị ảnh hưởng bởi điện trở kéo lên. Các âm mưu trông khó hiểu, gần giống như có một số loại điều chế đang diễn ra. Các đại lượng vật lý và đơn vị của chúng được viết với khoảng trắng (hoặc không gian mỏng) ở giữa. Tau là một biểu tượng, không phải là viết tắt.
venny

@venny Đây là dạng sóng điển hình cho xe buýt chạy quá nhanh trong thời gian giải quyết. Chỉ với 2 định cư TAU, không có đỉnh phẳng đối với dạng sóng, do đó "một số loại điều chế"; đây có phải là một mô hình giả ngẫu nhiên, sự thay đổi của việc giải quyết sẽ rất rõ ràng; đọc lên "mắt dữ liệu". Cuối cùng, xung nhịp 200KHz có mức cao cho 2,5uS sau đó thấp cho 2,5uS; khoảng thời gian 2,5uS chính xác là dữ liệu 400KHz mà tôi đã đề cập.
analogsystemsrf
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.