I2C 라인에서 풀업 저항을 생략하면 어떻게됩니까?


33

지금은 I 2 C 데이터 및 클럭 라인 (SDA 및 SCL)에 풀업 저항이 있어야 한다는 것을 깨달았습니다 .

글쎄, 아래 회로도에 따라 DS1307 RTC ( 데이터 시트 참조 )를 사용하여 몇 개의 시계를 만들었습니다 . 풀업 저항을 모두 생략했습니다.

I2C 라인에서 풀업 저항이없는 내 시계 회로도

두 시계 모두 제대로 작동하며 그 중 하나가 현재 3 개월 이상 작동하고 있습니다. 어떻게 가능합니까? 어쨌든 나는 알고 싶었다.

  1. I 2 C 풀업이 생략 되면 어떻게됩니까 ?

  2. 풀업이 없으면 보드에있는 두 IC 중 하나를 손상시킬 수 있습니까?

내가 제공 한 회로도와 같이 ATmega328P를 DS1307 RTC에 연결하는 특정 사례를 다루는 답변을 받았고 질문이 너무 광범위하지 않으면 풀업이 일반적으로 생략 될 때 어떤 일이 발생하는지 아는 것이 도움이 될 것입니다 즉, 다른 시나리오의 I 2 C 작동에서.

추신. 나는 그물을 검색하여 답을 찾았지만 풀업 치수 측정에 대한 기사를 찾을 수있었습니다.

업데이트 : Arduino IDE 1.03을 사용하고 있으며 펌웨어는 DS1307RTC Arduino lib를 사용하여 RTC를 처리합니다 ( RTC.read()및 기능을 통해 RTC.write()). 그 lib는 차례로 Wire.hRTC와 대화하는 데 사용 됩니다.

업데이트 2 : 아래는 외부 풀업없이 I 2 C가 어떻게 작동 하는지 설명하는 데 도움이되는 일련의 스코프 샷 입니다.

스코프 샷 1 스코프 샷 2

업데이트 3 (I 2 C 풀업 추가 후 ) : 아래는 I 2 C 라인 (같은 보드의)에 적절한 (4K7) 풀업 저항추가 한 후 촬영 한 또 다른 스코프 샷 입니다. 상승 시간은 약 5µs에서 290ns로 떨어졌습니다. I 2 C는 지금 훨씬 행복합니다.

스코프 샷 3 스코프 샷 4


2
코드가 해당 핀의 풀업을 비활성화합니까?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams 내 코드에는 SDA 및 SCD 핀 (18 및 19)에 대한 직접적인 언급이 없습니다. DS1307RTC lib Arduino lib 및 해당 기능 RTC.read () 및 RTC.write ()를 사용하여 RTC를 처리합니다 .
Ricardo

그 lib는 차례로 Wire.h를 사용하여 RTC와 통신합니다.
Ricardo

3
예, 확실히 내부 풀업을 사용합니다. 날카로운 모서리 대신 곡선을 확인하십시오.
Ignacio Vazquez-Abrams

답변:


28

1) I2C 풀업이 생략되면 어떻게됩니까?

I 2 C 버스 에는 통신이 없습니다 . 조금도. MCU가 I 2 C 시작 조건 을 생성 할 수 없습니다 . MCU가 I 2 C 주소 를 전송할 수 없습니다 .

왜 3 개월 동안 작동했는지 궁금하십니까? 읽어.

2) 풀업이 없으면 보드에있는 두 개의 IC 중 하나가 손상 될 수 있습니까?

아마 아닙니다. 이 특별한 경우 (MCU, RTC, 그 밖의 다른 것)는 확실히 아닙니다.

3) 왜 MCU가 I 2 C 슬레이브 장치 와 통신 할 수 있었습니까? I 2 C에는 풀업 저항이 필요합니다. 그러나 그들은 회로도에 포함되지 않았습니다.

아마도 ATmega에서 내부 풀업을 활성화했을 것입니다. 내가 읽은 1 에서 ATmega는 20kΩ 내부 풀업을 가지고 있으며 펌웨어에서 활성화 또는 비활성화 할 수 있습니다. 20kΩ은 I 2 C 풀업에 비해 너무 약 합니다. 그러나 버스의 커패시턴스가 낮고 (물리적으로 작음) 통신 속도가 느리면 20kΩ이 여전히 버스를 작동시킬 수 있습니다. 그러나 이산 풀업 저항을 사용하는 것과 비교할 때 이것은 신뢰할 수있는 디자인이 아닙니다.

1 ATmega 사람은 아닙니다.

업데이트 : 이에 응답 하여 OP에 추가 된 I 2 C 파형 OP
의 파형은 상승 시간 상수가 매우 깁니다. 일반적으로 I 2 C 파형은 다음과 같습니다.

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

PIC18F4550, Vcc = + 5V, 2.2kΩ 풀업. 파형은 SCL을 보여줍니다. SDA의 상승 시간은 거의 같습니다. 버스의 물리적 크기는 적당합니다 : 2 개의 슬레이브 장치, PCB 길이 ≈100mm.


답변 주셔서 감사합니다! 예, ATmega에는 풀업이 있어야합니다. 내가 사용하는 코드와 라이브러리를 다시 확인하고 범위를 통해 보드를 넣습니다. 나는 그것이 약간의 문제를 해결하기를 바랍니다.
Ricardo

1
먼저 슬레이브 장치의 데이터 시트를 다시 확인하십시오. 내가 올바르게 기억한다면 ATMega의 풀업은 30k-60k의 어느 곳이든 될 수 있습니다 (Vcc, 온도 및 기타 여러 요인에 달려 있습니다. 신뢰할 수있는 저항을 위해 실제로 의존 할 수는 없습니다). 적절한 로직을 보장하기 위해 슬레이브에 충분한 전류를 보내고 있는지 확인하려고합니다. 1. 저항이 너무 크면 슬레이브 장치의 전류가 충분하지 않아 현재 위치와 동일한 지점에있게됩니다 지금.
audiFanatic

4
@audiFanatic +1. 브레이크 아웃 보드에 풀업 저항을 포함하고 BTW, IMO를 기본적으로 설치하면 오류가 발생합니다. 누군가 하나의 I2C 버스에 여러 개의 보드가있는 경우 어떻게 될지 상상해보십시오. 각 풀업은 일반적으로 2.2kΩ 정도입니다. 모든 브레이크 아웃 보드의 풀업 저항이 병렬로 나타납니다. 결합 된 풀업이 I2C에 비해 너무 뻣뻣 해집니다. [이 잠재적 인 문제에 대한 자세한 여기여기 .]
닉 알렉 세 에프

2
@Ricardo 스코프 샷 [OP의 첫 번째 스코프 샷 세트]에서 행복한 I2C 버스는 아닙니다. 내 답변에 스코프 샷을 추가했습니다.
Nick Alexeev

3
이 기사에는 좋고 나쁜 i2c 신호의 파형이 있습니다. dsscircuits.com/index.php/articles/…
ford

16

사용하는 라이브러리 및이 라이브러리가 의존하는 라이브러리 (Wire)는 ATMega의 내부 풀업을 활성화합니다. 이들은 약한 풀업이며 일반적으로 외부 풀업 (병렬로 두 개의 저항)을 보완합니다. 20k ~ 70k의 상대적으로 높은 저항으로 인해 외부 사용에 문제가 발생하더라도 크게 발생하지 않습니다.

I2C 풀업이 생략되면 어떻게됩니까?

이제 외부 저항이 없으면 약한 내부 풀업이 라인을 높이는 유일한 요소입니다. 보드 레이아웃, i2c 회선 속도, 액세스 빈도, 외부 간섭 등에 따라 작동하지 않을 수 있습니다. 운이 좋았습니다. 풀업이 있지만 예상 한 것은 아닙니다.

풀업이 없으면 보드의 두 IC 중 하나가 손상 될 수 있습니까?

내부 풀업이 없어도 풀업이 없어도 IC가 손상되지 않습니다. i2c 디바이스 SCl 및 SDA 라인의 내부 빌드는 NPN 트랜지스터와 같습니다. 그것들은 본질적으로 전류 제어 / 스위칭 다이오드 인 Open Collectors 입니다.

ATMega가 5v에 있고 i2c 장치가 3.3v 전용 장치 인 경우 내부 풀업을 켜면 마지막으로주의 할 사항이 있습니다. 또는 내부 풀업이 켜져 있고 외부 저항이 3.3V 또는 기타 전압에 연결된 경우 문제가 발생할 수 있습니다. 본질적으로, 이것은 Wire 라이브러리에서 의도적으로 무시 된 버그입니다.


4
+ You do have pull-ups, just not ones you expected.1--당신이 못을 박았다고 생각합니다. 감사!
Ricardo

방금 설정 한 내용을 명확히하기 위해 몇 가지 스코프 샷을 추가했습니다.
Ricardo

2
33khz에서 @Ricardo yep. 가장 낮은 i2c 지정 속도의 3 분의 1, 그리고 신호는 여전히 매우 나쁩니다. 100khz 또는 400khz에서는 통신이되지 않습니다. 그러나 많은 i2c 장치가 최대 속도의 일부로 작동한다는 점이 좋습니다. 내부 풀업은 최대 70k ohm 일 수 있으며 일반적인 i2c 저항은
4.7k입니다.

8

일반적으로 I 2 C 인터페이스 회로를 위한 풀업 저항이 필요합니다 . 인터페이스가 전선의 양쪽 끝에서 완전한 스펙 I 2 C 인 경우 저항이없는 신호선은 절대 하이 레벨로 갈 수 없습니다. 그것들은 낮게 유지되거나 각 끝 부분의 누설 전류에 의해 결정된 중간 레벨로 갈 수 있습니다. 그 이유는 사실 I 2 C가 개방 드레인 버스 이기 때문입니다 .

일부 장치는 실제로 부품 의 I 2 C 인터페이스를 사용하지 않을 때 인터페이스 핀을 높은 비활성 레벨로 유지하기 위해 20K ~ 100K 옴 범위의 온칩 풀업 저항을 가질 수 있습니다. 간단하고 짧은 인터페이스의 경우이 풀업 저항은 클럭 및 / 또는 데이터 신호가 전송되는 동안 라인을 높이 끌어 오는 데 필요한 전류를 제공하기에 충분할 수 있습니다.

회로도에서 말하기는 어렵지만 경우에 따라 범용 I / O 포트 핀을 사용하여 I 2 C 인터페이스를 구현 한 다음 소프트웨어에서 비트를 사용합니다. 때때로 구현자가 개방 드레인 방법을 사용하여이 구성에서 I / O 핀을 작동하지 않을 수 있으며 풀업 저항이없는 인터페이스가 작동하는 이유에 영향을 줄 수 있습니다.

하루가 끝나면 오실로스코프를 사용하여 이전 시계 중 하나의 신호를 확인하여 인터페이스의 1과 0이 사양 전압 수준 내에서 작동하는지 확인할 수 있습니다. 그런 다음 구현에 매우 운이 좋았는지 또는 위에서 언급 한 요소 중 하나가 작동하는지 확실하게 알 수 있습니다.


4

I2C 풀업이 생략되면 어떻게됩니까?

대부분의 경우 I2C 버스는 작동하지 않습니다.

풀업이 없으면 보드의 두 IC 중 하나가 손상 될 수 있습니까?

아마 아닐 것입니다.


3

I2C 라인이 전혀 작동하지 않습니다. 내가 실수하지 않으면 I2C는 낮은 신호를 단언하지만 다시 높은 상태로 되 돌리지 않기 때문에 이러한 저항이 필요합니다.

풀업이 없어도 IC가 손상되지 않아야합니다.


I2C 핀은 오픈 드레인입니다.
매트 영

1

I2C는 TTL 논리 프로토콜입니다. 데이터와 클럭 라인이 오픈 드레인입니다. 다시 말해, I2C 하드웨어는이 라인을 낮게 만 구동 할 수 있습니다. 그들은 0이 아닐 때 떠 다닌다. 이것이 풀업 저항이 들어오는 곳입니다. 이것은 단순화 된 다이어그램이지만 잠시만 나와 함께 작동합니다.

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도


보시다시피; 풀업 저항은 TTL 로직이 출력을 낮게 구동하지 않을 때 출력에 로직 1이 표시되도록하는 데 필요합니다. 이미 언급했듯이 TTL 논리는 회선을 높게 만들 수 없습니다. 이것이 존재하지 않으면 출력이 떠 다니고 출력에서 ​​볼 수있는 것을 예측할 수 없습니다 (알다시피, 설탕이없는 구미 곰팡이로 인해 동료의 전자 레인지 또는 장 기능 장애가 발생할 수 있음) 변동 가치).

이제 마이크로 컨트롤러가있는 소프트웨어에서 I2C를 구현하려는 경우, 출력을 높거나 낮출 수있는 CMOS 로직을 사용할 가능성이 높기 때문에 문제가되지 않을 것입니다.


1
도움이되어 다행입니다.
audiFanatic

2
장치가 TTL 또는 CMOS 로직을 사용하는지 여부는 중요합니다. 일반 TTL 및 일반 CMOS 출력은 신호를 위아래로 끌어옵니다. I2C 신호는 오픈 컬렉터 TTL 또는 (더 가능성이 높은) 오픈 드레인 CMOS입니다. 두 경우 모두 신호를 높게 끌어 올릴 트랜지스터가 소스의 출력단에서 누락되므로 풀업 저항이 필요합니다. 신호를 높게 당기십시오. 마이크로 컨트롤러에 해당 파인트에 내부 풀업이있을 수 있습니다.
Peter Bennett

3
-1 Peter Bennett이 말했듯이이 답변 중 상당수가 잘못되었습니다. TTL 신호를 "오픈 드레인"이라고 부르는 것이 공짜입니다.
Joe Hass

TTL을 사용하여 I2C를 수행하면 이점이 있습니다. 즉, 동일한 버스에 연결된 다른 공급 전압을 가진 구성 요소를 처리하기 위해 레벨 변환기가 필요하지 않은 경우가 많습니다. TTL 입력단 에서는 풀업 전압을 최저 전압 칩의 최고 허용 입력 전압으로 설정하는 것만으로도 충분 합니다. CMOS에서는 작동하지 않습니다.
벤 Voigt

@BenVoigt : 아니오 – "풀업 저항이 필요합니다."구성 "TTL"을 호출하는 것은 CMOS 또는 TTL로 구성 할 수 있으며 DS1307은 CMOS 부품이므로 잘못되었습니다. Maxim 데이터 시트에는 출력이 오픈 드레인이라고 명시되어 있으며 블록 다이어그램에는 하나의 출력에 대한 FET가 표시되어 있습니다.
피터 베넷

0

클럭을 공급하는 마스터로 마이크로와 함께 I2C를 비트 뱅킹하면 풀업없이 SCL을 구동 할 수있었습니다.

그러나 SDA는 풀업이있는 OC 여야하므로 슬레이브 장치가 풀다운되고 올바르게 응답 할 수 있습니다.

문안 인사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.