I2C 풀업 저항에 올바른 저항 값이 있습니까?


72

24LC256 EEPROM 의 데이터 시트 에는 다음이 명시되어 있습니다.

SDA 버스에는 VCC에 대한 풀업 저항이 필요합니다 (일반적으로 100kHz의 경우 10kΩ, 400kHz의 경우 2kΩ 및 1MHz).

kΩ 값을 가진 모든 저항이 작동한다고 생각했습니다 (그리고 EEPROM은 10kΩ 저항으로 다른 주파수에서 잘 작동하는 것 같습니다).

내 질문은 :

  • 풀업 저항에 올바른 값이 있습니까?
  • 이 가치를 결정하는 법 / 규칙이 있습니까?
  • 다른 저항 값이 어떻게 I²C 데이터 버스에 영향을 줍니까?

답변:


66

I 2 C 버스 의 올바른 풀업 저항은 버스의 총 커패시턴스와 버스를 작동하려는 주파수에 따라 다릅니다.

로부터 공식 ATmega168 데이터 시트 (내가 믿는 공식 I에서 오는 2 C 사양)입니다 -

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

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

Microchip 24LC256은 10pF의 최대 핀 커패시턴스를 지정합니다 (이는 상당히 일반적 임). 버스에서 병렬로 연결 한 장치 수를 세고 위의 공식을 사용하여 작동 할 값 범위를 계산하십시오.

배터리 전원을 끄는 경우 범위의 최고 값을 사용합니다. 전원 공급 장치에 전력 제한이 없거나 IC의 전력 소비 문제가 없으면 범위의 하단에 값을 사용합니다.

I 2 C RTC (DS1337) 와 함께 일부 키트를 판매 합니다. 키트에 4K7 저항을 포함시켜 대부분의 사용자에게 합리적인 타협처럼 보입니다.


일반적으로 버스가 대부분의 시간 동안 유휴 상태 (비어 설) 된 것으로 생각하므로 배터리 애플리케이션의 경우 I2C 풀업을 최적화하려고 시도하는 것보다 처리해야 할 중요한 문제가 더 있습니다 .P
Nick T

5
내가 추가 할 유일한 것은 버스에서 장치의 합산 된 커패시턴스 위의 버퍼입니다. 패드에서 핀까지의 솔더 조인트뿐만 아니라 트레이스 자체에도 임피던스가 있습니다. 더 긴 버스에서는 트레이스 / 와이어의 커패시턴스가 디바이스의 핀 커패시턴스보다 클 수 있습니다. 생산 보드를 설계 할 때 프로토 타입을 손에 넣을 때까지 최종 풀업 값을 결정하지 않으며 다양한 값으로 버스의 범위를 지정할 수 있습니다.
Mark

14

더 높은 주파수는 더 낮은 저항 풀업을 필요로합니다. 더 낮은 저항은 케이블의 커패시턴스를 더 빨리 충전 / 방전하여 에지가 더 가파르게됩니다. 더 낮은 주파수의 펄스가 클수록 덜 가파른 에지는 펄스의 모양에 큰 영향을 미치지 않습니다.

따라서 I2C 사양 은 3 가지 속도 등급에 대한 버스 커패시턴스의 함수로 풀업 저항의 최대 값을 제공합니다.

여기에 이미지 설명을 입력하십시오

최소값은 버스 전압의 기능으로 정의되며 드라이버를 통한 전류를 제한해야합니다.


3
3 년 후 Texas Instruments는 이 답변과 거의 비슷한 응용 노트 를 작성했습니다 .
Nick Alexeev


11

올바른 값 범위가 있지만 해당 범위가 무엇인지 정확하게 설명하기는 어렵습니다. 일반적으로 10k가 작동합니다.

디지털 출력에는 전류를 소싱하거나 싱킹하는 지정된 기능이 있습니다. 출력이 5mA를 싱크 할 수 있고 출력이 5V로 풀업을 통해 연결되고 0으로 설정된 경우 최소 1k 저항이 필요합니다. 1k 미만을 사용하면 출력이 핀을 완전히 0V로 끌어 올릴 수있는 충분한 전류를 싱크 할 수 없습니다. 10k와 같이 더 큰 값을 사용하면 핀은 0.5mA 만 싱크하면되므로 정격보다 훨씬 적습니다.

디지털 입력에는 지정된 누설 전류가 있습니다. 이것은 입력에서 0 또는 1을 "유지"하는 데 걸리는 전류량과 비슷합니다. 풀업 저항이 너무 크면 누설 전류를 극복 할 수 없습니다. 누설 전류를 거의 극복하지 못하면 회로의 노이즈가 입력을 변경하기에 충분할 수 있습니다.

싱크 및 소스 전류가 가능한 디지털 출력 ( "토템 폴 드라이버", "푸시 풀 드라이버")을 사용하는 경우 풀업 또는 풀다운 저항을 사용하지 않을 수 있습니다. 그러나 CMOS 입력이 플로팅되지 않도록하거나 과도한 전류를 끌어낼 수있는 것이 매우 중요합니다 ... 양방향 MCU 핀이 일반적으로 입력으로 나타나는 것을 잊어 버리는 것은 매우 쉽습니다!


I2C 및 기타 프로토콜은 "오픈 드레인"(또는 "오픈 콜렉터") 출력을 사용합니다. 상하로 끌어 당길 수있는 출력을 갖는 대신 오픈 드레인 출력은 끌어 당길 수만 있습니다. 이것이 외부 풀업 저항이 필요한 이유입니다. 풀업 저항 범위에 대한 추가 제한 사항이 있습니다. 풀업 값은 버스 커패시턴스가있는 RC 회로를 형성합니다. 값이 너무 작 으면 다시 출력 드라이버가 핀을 0으로 끌어 당기기에 충분한 전류를 싱킹하는 것을 방지 할 수 있습니다. 그러나 너무 큰 값은 버스 커패시턴스를 충전하는 데 너무 오래 걸립니다.

위반이 허용되지 않는 설정 / 홀드 시간이 있으면 RC 시간 상수를 결정하는 데 도움이됩니다. 버스 커패시턴스는 PCB 레이아웃에 따라 크게 결정되므로 C와 결합 된 R 값을 선택하여 디지털 입력의 설정 / 보류 시간 내에 편안한 값을 제공 할 수 있습니다.


7

풀업 값이 낮 으면 (저항이 낮을수록) 신호 전이의 에지가 향상 될 수 있지만 때로는 너무 뻣뻣 할 수 있습니다. 버스의 장치가 풀업 전류를 싱크 할 수없는 경우 로직이 '낮음'이되어 실제로는 그렇게 낮지 않습니다. 의사 소통 오류 및 많은 고통을 유발할 수 있습니다.

신뢰할 수있는 통신을 제공하는 최고의 풀업 저항을 사용합니다.


5

저주파의 경우 값은 중요하지 않지만 고주파의 경우 회로의 다른 커패시턴스와 결합하여 신호에 필터링 효과를 줄 수 있으므로 속도에 따라 다른 값을 권장합니다.


2

아직 언급하지 않은 문제는 전력 소비입니다. 3.3V 전원을 사용하는 경우 접지에 3.3K 저항을 사용하면 출력이 낮을 때마다 1mA의 전류 (3.3mW의 전력)가 낭비됩니다. 10K 저항을 사용하면 전류와 전력이 3 배 줄어 듭니다. I2C 버스에 많은 통신이있을 경우, 특히 버스가 장시간 앉아있을 경우 전력 소비가 전체 전력 소모의 상당 부분을 차지할 수 있습니다. 예를 들어, 100 바이트 / 초를 읽는 중이지만 각 바이트를 읽은 후에는 다음 바이트의 첫 번째 비트를 출력하는 장치가 버스에 남아 있고 대부분의 바이트에 MSB가 있으면 버스는 90 %를 소비 할 수 있습니다. SCL 및 SDA가 낮은 시간. 시스템이 수행하는 작업에 따라 전력 소모량이 크게 증가 할 수 있습니다.

전력을 절약하려면 "풀업 (Pull-up)"저항을 VDD가 아닌 I / O 핀에 연결하는 것이 좋습니다. 하드웨어 I2C 구현이이를 지원하는 것을 보지 못했지만 오픈 컬렉터 드라이버를 사용하지 않고 저항을 통해 버스에 연결된 별도의 I / O 핀에 마스터 출력 데이터가 있으면 고정 풀업 저항을 피할 수 있습니다. 마스터가 "0"을 출력하려고 할 때 전류 낭비. 또한, 마스터가 SDA에 대해 신경 쓰지 않고 잠시 SCK를 낮게두면, 마스터는 더 많은 통신 준비가 될 때까지 풀업을 비활성화 할 수 있습니다. 어떤 장치도 클록 스트레칭을 사용할 필요가없는 경우, 마스터는 SCK에 대한 직접 출력을 사용할 수 있으며 해당 와이어의 풀업을 방해하지 않습니다.

빠른 프로세서로 소프트웨어 비트 뱅킹을 사용하고 있고 높은 버스 커패시턴스에도 불구하고 좋은 성능을 얻으려면 위의 방법을 프로세서의 내장 된 약한 풀업을 사용하여 결합 할 수 있습니다. 데이터를 읽을 때 SCK의 각 하강 에지 직후에 매우 강한 풀업을 켜고 약한 풀업으로 전환하십시오. 커패시턴스에도 불구하고 강한 풀업은 라인을 높은쪽으로 끌어 당기고, 일단 라인을 높은쪽으로 당기면 약한 풀업은 그것을 높게 유지할 수 있습니다. 장치가 강한 풀업에 대해 라인을 낮게 당기는 데 어려움이 있더라도 강한 풀업이 꺼지면 그렇게 할 수 있습니다.



-1

다음은 초당 400kiloBits (200KHz 101010 파형)의 파형입니다. RC는 4.7K ohm 및 212pF입니다. RC 값은 2 TAU 정착을 허용합니다.

여기에 이미지 설명을 입력하십시오


이 대답은 잘못되었습니다. 200kHz 클록은 400kb가 아닌 200kb / s를 제공합니다. 상승 에지 만 풀업 저항의 영향을받습니다. 어떤 종류의 변조가 발생하는 것처럼 플롯이 혼란스럽게 보입니다. 물리량과 단위는 사이에 공백 (또는 얇은 공백)으로 기록됩니다. 타우는 약어가 아닌 상징입니다.
venny

@venny 이것은 안정화 시간 동안 버스가 너무 빠르게 작동하는 일반적인 파형입니다. 2 TAU 안정 만 사용하면 파형에 평평한 부분이 없으므로 "일부 종류의 변조"가 발생합니다. 이것이 의사-무작위 패턴이었을 때, 정착의 가변성은 매우 분명 할 것이다. "데이터 아이"를 읽어보십시오. 마지막으로 200KHz 클럭은 2.5uS에서 높고 2.5uS에서 낮습니다. 2.5uS의주기는 내가 언급 한 400KHz 데이터와 정확히 같습니다.
analogsystemsrf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.