I2C는 1Mohm으로 프로브 또는로드 된 경우에만 작동


9

msp430fr5847 (마스터)과 알 수없는 I2C 칩 (산업용 센서의 일부)이있는 슬레이브 센서 간의 통신 문제를 해결하려고합니다.

Saleae 로직 프로 (2Mohm, 10pf) 또는 오실로스코프 (10Mohm, 50pf)로 문제를 해결하려고 할 때 프로빙 할 때 시스템이 완벽하게 작동하는 경우 데이터가 모두 0으로 반환되는 새로운 센서 배치에 문제가 있습니다. SDA 핀.

SDA와 접지 사이에 1Mohm 저항을 추가하면 회로가 올바르게 작동하지만 10pf 또는 100pf 커패시터 만 추가하면 작동하지 않습니다.

3.3V 레일에 4.7k 풀업 저항을 사용하고 있습니다.

이 문제의 원인은 무엇이며 실수로 문제를 해결하지 않고 문제를 해결하기 위해 수행 할 수있는 작업입니다.


편집 : 19/07/2017 여기 내 신호의 빠른 범위 추적이 있습니다.

내가 언급하지 않은 것은 SDA를 프로빙하는 것만으로 보드가 작동하고 SCL을 프로빙하거나 인터럽트 라인이 제대로 작동하지 않는다는 것입니다.

SDA 및 SCL의 범위 추적


편집 : 21/07/2017

플롯이 두꺼워지고 다른 오실로스코프를 연결해도 회로가 올바르게 작동하지 않는 것으로 나타 났으며 유일한 차이점은 ACK가 전송되지 않는다는 것입니다.

새로운 스코프 사진

위 그림에서 파란색과 녹색 흔적은 회로가 올바르게 작동하지 않을 때 SCL과 SDA입니다. 노란색과 분홍색의 흔적은 Saleae 로직을 SDA 핀과 접지에 연결하지만 USB를 연결하지 않고 (접지 루프를 피하려고 시도) 발생합니다.

센서에 배경을 조금 더 추가하기 위해 제조업체에서 구매하는 산업용 압력 센서입니다. 우리는 이전에 첫 번째 센서 배치로 이러한 PCB를 설계하고 테스트했습니다. 최근 새로운 배치가 접수되었으며 현재 이러한 문제가 발생하고 있습니다. 나는 연구의 조금을 수행하고있는 I 강하게 의심 내부 센서가 ZSC31014 또는 유사한, PDF 데이터 시트를 사용하는 (데이터 시트에서 독특한 찾고 문장을 인터넷 검색 후) 여기


편집 : 26/07/2017

SamGibson의 자세한 답변에 따라 시작 비트의 끝에서 글리치를 마스킹하기 위해 주소의 높은 비트를 설정하는 수정 사항을 구현했습니다.

이것은 대부분 예상대로 데이터를 가져 오는 데 사용되었지만 이제는 쓰기 후 첫 번째 읽기 명령 (i2c 비트 그룹에 대한 올바른 용어 인 경우)에서 슬레이브가 1 비트 일찍 ACK하려고 시도합니다. 쓰기 비트의 위치). SDA 라인과 직렬로 작은 (47 ohm) 저항을 추가하여 라인을 내리는 것이 슬레이브라는 것을 알 수 있습니다.

나는 보통 이것을 새로운 질문으로 시작하지만 위의 문제 해결에 영향을 미치지 않는 동일한 범위를 연결하면이 문제는 사라지는 것처럼 보입니다. 스코프 프로브를 연결하더라도 실제로 경계 문제 인 것처럼 보입니다. 스코프에 연결하지 않으면 문제가 해결되므로 커패시턴스 문제라고 가정합니다.

범위가 첨부되지 않은 문제 플롯

범위가없는 플롯

슬레이브가 ACK 비트 대신 쓰기 비트를 풀다운 할 때 스코프 프로브가 연결되었지만 스코프에 연결되지 않은 문제의 플롯.

스코프 부착


1
스코프 흔적이 있습니까?
Kevin White

1
시계 신호를 실수로 뒤집 었습니까?
Andy 일명

6
I2C 버스에 공통 접지선 (I2C 센서에 대한 MSP)이 있고 사용 중인지 확인하십시오. 3 개의 전선 필요 : SDA, SCL 및 GND, SDA 및 SCL이 풀업 저항을 통해 Vcc (4 번째 전선 가능)까지 끌어 올림.
Chris Knudsen

1
@ Hugoagogo-Yikes! SDA와 SCL 모두 다른 방식으로 비정상적입니다. 나는 가정 것을 추적이 새로운 함께 실패 센서? 그렇다면 오래된 작동 센서 로 흔적을 공급할 수 있습니까? 아마의 차이는 이전에 문제가 있었지만, 그것이 즉, 너무 큰되지 않을 수 있습니다 단지 작업. 더 많은 배경 정보는 유용한 데이터를 보여줄 수 있습니다. MSP430 (제어하는?)을 센서 (제어하지 않는?)와 함께 사용할 수 있도록 리버스 엔지니어링이 수행 된 것 같습니다. "원본"구성과 다른 점은 무엇입니까?
SamGibson

1
글쎄, 나는 SamGibson에 동의합니다. 나는 스파이크가 측정 오류라고 말하는 데 그렇게 빠르지 않습니다. 나는 당신이 그것을 조금 더 연구하고 그것들이 당신의 측정 설정에서 나왔거나 그것들이 존재하는 이유를 찾는다면 그것들을 제거하려고 노력해야한다고 생각합니다. 결국, 그들은 SCL의 떨어지는 가장자리와 정렬 된 것처럼 보입니다. 또한 센서를 PCB에 직접 연결하려고합니다. 케이블이나 메인 보드와 센서의 거리로 인해 문제가 발생하는 것을 배제 할 수 있습니다.
nickagian

답변:


11

나는 대답을 찾았다 고 생각한다 . 이것은 알려진 문제라고 밝혀졌지만 문제의 위치를 ​​결정하고 검색 한 후에 만 ​​발견되었습니다!

여기에 내가 겪은 과정이 있으므로 따르십시오 (필요한 경우 내 가정과 다른 결과가 표시되면 조사를 조정할 수 있습니다). 결론은 MSP430 I²C 동작과 (적어도 일부) MSP430 I²C 동작과 IDT ZSC31014 인 I²C 슬레이브라고 생각되는 장치의 필수 I²C 동작 사이에 비 호환성이있는 것 같습니다 . 해당 장치에 대한 데이터 시트를 보유하는 것이이를 이해하는 데 중요하므로이를 찾아 주셔서 감사합니다.

좋은 소식은이 문제에 대해 적어도 2 가지 해결 방법이 있다는 것입니다.

플롯이 두꺼워지고 다른 오실로스코프를 연결해도 회로가 올바르게 작동하지 않는 것으로 나타 났으며 유일한 차이점은 ACK가 전송되지 않는다는 것입니다.

새로운 추적은 도움이되지만 약간 다르게 해석하지만 도움이됩니다.

(초기 트레이스와 관련이있는 SCL 신호 언더 슈트는 여전히 최신 트레이스에 있습니다. 특히 SCL의 언더 슈트가 SDA의 언더 슈트보다 크다는 점이 흥미 롭습니다. 특히 SCL과 SDA 신호의 서로 다른 수직 스케일은 나는 여전히 SCL이 궁극적으로 언더 슈트를했는지 조사하라고 제안하지만 그것이 주요 문제와 관련이 있다고 생각하지는 않는다.)

SDA에는 두 가지 "결함"이 있습니다.

  • I²C 마스터가 SDA 제어를 해제하여 슬레이브가 ACK를 수행 한 다음 마스터가 SDA를 다시 구동 할 때 ACK 펄스 직전 또는 직후의 글리치는 드물지 않습니다. 따라서 나는 그것을 무시하고 있습니다.

  • 첫 번째 SCL 펄스 이전 의 초기 SDA 글리치입니다. 초기 SDA 글리치 (후 참조)의 진폭과 처음 SCL 펄스 (0으로 표시됨) 전에 만 발생하지만 SDA에서 글리치 (SCL과 같은)를 볼 수있는 이후 SCL 펄스 전에는 발생하지 않습니다. 4, 5, 6 또는 7로 표시된 펄스) 측정 아티팩트가 아니며 SCL의 커플 링도 아닙니다 (예 :).

(나중에 참조 할 수 있도록 초기 SDA 글리치는 최신 트레이스에서 2V 이상으로 보이 므로 이전 의견에서 3.6V의 Vdd를 사용하면 SDA 글리치 진폭이 (2 / 3.6) = 0.55 x Vdd 이상이됩니다. 나중에 논의 할 관련 I2C 로직 레벨 임계 값.)

ACK 차이를 무시하면서 두 번째 스크린 샷에서 두 트레이스 세트 사이에 또 ​​다른 차이점이 있다고 생각합니다. 초기 SDA 글리치 의 진폭은 C1(노란색?)으로 표시된 최상위 SDA 추적 과 M3(파란색)으로 표시된 두 번째 SDA 추적을 비교하여 약간 다르게 보입니다 . 이제 초기 SDA 결함의 진폭 차이가 아래 설명과 같이 문제가 나타나거나 사라질 수 있다고 생각합니다.

글리치에 대한 더 많은 해상도가 도움이 될 것입니다 (즉, "원격으로"문제를 해결하려고 시도하는 문제 중 하나입니다. '스코프를 직접 조작 할 수 없습니다!). 확대 할 때 일반적인 I²C 로직 "1"(즉, 상승 에지의 RC 곡선, 특히 일시적으로 풀업을 약하게하는 경우 예를 들어 10k를 더 약하게 만드는 경우)의 시작처럼 보이는 것으로 가정합니다. 논리 "0"으로 다시 구동되기 전에 최대 양의 전압에 도달하지 마십시오. 나중에 링크 된 다른 웹 페이지에 표시됩니다. 글리치에 다른 모양이 표시되면 나중에 분석하지 않을 수 있습니다.

I²C 마스터는 해당 결함 지점에서 I²C 시작과 첫 번째 SCL 클럭 펄스 (MSbit 임에도 "0"으로 표시됨) 사이에서 버스를 제어합니다. 이 시점에서 SCL이 낮 으면 SDA 결함 다음 SDA 상태를 읽기 전에 SCL이 높아질 때까지 기다리므로 I²C 호환 장치 에는 영향을 미치지 않아야합니다 .

그렇다면 I²C 슬레이브는 실제로 I²C 호환입니까? ZSC31014는 MSP430이 글리치를 생성한다고 생각할 때 정확하게 다른 까다로운 I²C 장치보다 덜 까다 롭다 .

ZSC31014 데이터 시트 가 장치의 I²C 행동을 인정 목록 3 개 지역은 "다른"입니다. 다른 시간에이 목록의 처음 두 개 (이 분석의 일부는 아님)에 영향을받을 수도 있지만 아래에서 빨간색으로 표시 한 세 번째 사항은 초기 SDA 결함과 관련이 있습니다.


ZSC31014 데이터 시트에서 추출


초기 SDA 글리치의 진폭이 중요 합니다. 해당 글리치가 다시 떨어지기 전에 ZSC31014에서 로직 "1"로 인식하기에 충분히 상승하지 않으면 정상입니다. 장치는 해당 규칙을 위반하기 위해 SDA에서 하강 에지 를 확인 해야합니다. 떨어지는 이미 논리 "1"로 인식 된 경우 가장자리.

SDA 신호에 대한 스코프 또는 로직 분석기의 추가로드와 같이 해당 SDA 글리치의 진폭에 영향을 미치는 것은 ZSC31014가 로직 "1"에 도달하는 것으로 글리치가 인식되어 "떨림"이 발생하지 않도록하기에 충분할 수 있습니다. 목록의 세 번째 포인트 인 SDA 에지 "는 전압, 온도 등에 따라 좋은 날에 발생할 수 있습니다. 그러나 알 수 있듯이 서로 다른 오실로스코프 간의 차이는 일부 는 문제를 중지하기에 충분한 부하를 추가하고 나머지는 그렇지 않음 을 의미 하기에 충분합니다. 이 설정은 매우 제한적이어야합니다!

이는 "작동"설정의 MSP430 MCU가 SDA 결함을 발생시킬 가능성이 있기 때문에 이전의 "작동"센서 배치가 "단지"작동 할 수 있다는 것을 확신합니다. 센서 배치 간의 가능한 차이 에 대한 나의 이론은 다음과 같이보고 한 다른 동작 ( "작업"배치와 "비 작동"배치)을 설명 할 수 있습니다.

흥미롭게도 ZSC31014는 제조업체의 해당 목록에 언급되지 않은 다른 영역에서 표준 I²C와 다르므로 센서 배치간에 차이가있는 이유를 설명 할 수 있습니다.

표준 I²C 로직 임계 값은 I²C 사양에 표시된대로 로직 "0"의 경우 0.3 x Vdd 미만, 로직 "1"의 경우 0.7 x Vdd 이상입니다 .


I2C 사양의 로직 레벨 임계 값


그러나 ZSC31014는 0.2 x Vdd와 0.8 x Vdd의 서로 다른 임계 값을 갖습니다. 즉, 해당 임계 값 사이의 "정의되지 않은 영역" 이 일반적인 I²C 장치보다 큽니다 .


ZSC31014 데이터 시트의 로직 레벨 임계 값


즉, 큰 "정의되지 않은 영역을" 증가 가 정의되지 않은 전압 레벨 영역에 진입하는 결함의 가능성 수도 논리 "1"(0.2 × Vdd에 상기 아무것도 기억로서 인식 될 수있는 논리 "1"로 ZSC31014 인식을 , 정의되지 않은 영역에서는 모든 것이 허용되므로 로직 "1"로 인식 해야하는 경우 0.8 x Vdd 이상 입니다. 그리고, 등, 앞서 설명한 경우 글리치는 논리 "1"에 도달 한대로 ZSC31014 인식, 당신은 I²C 동작을 위해 빨간색으로 표시 "규칙"필요한 것을 파괴 한 다음은 논리 "0"으로 다시 떨어질 때 ZSC31014에 의해.

"정의되지 않은"전압 영역에서 로직 레벨의 인식이 지정되어 있지 않기 때문에 센서 제조업체는 0.7 x Vdd에 도달 할 때만 로직 "1"을 인식하는 배치를 하나만 만들면 사양을 위반하지 않고 인식하는 다른 배치를 만듭니다. 예를 들어 0.4 x Vdd 정도로 낮은 로직 "1". 그 가상의 두 번째 배치는 SDA 결함이 목록의 세 번째 포인트를 위반하면서 SDA 엣지 하락으로 볼 가능성이 높지만 사양을 위반하지는 않습니다.

(수년 동안 내가 해왔 던 많은 문제는 다음과 같습니다. 두 개의 장치가 있습니다. 두 장치는 모두 허점을 가진 사양을 개별적으로 위반하지는 않지만 하나는 까다 롭고 관대합니다. 다른 하나는로 연결된 장치를 필요로 때문에 관용 모호한 행동! 두 장치의 각각 벌금 다른 장치의 대부분과의 인터페이스,하지만 서로 연결되어있을 때 (또는 완전히 실패) 신뢰할 수 있습니다.)

그래서 당신은 무엇을 할 수 있습니까? 두 가지 옵션을 생각했습니다.

  • MSP430을 사용하지 마십시오. 초기 SDA 결함을 생성하지 않는 다른 MCU를 사용하십시오. 그러나 소프트웨어에 많은 시간을 투자했으며 코드를 피할 수 있다면 코드를 다른 MCU로 이식하고 싶지는 않습니다.

  • 내장 된 I²C 하드웨어 모듈을 사용하는 대신 MSP430에서 I²C 프로토콜을 "비트 뱅"합니다. 이렇게하면 I²C 신호를 완벽하게 제어 할 수 있으며 글리치가 발생하지 않도록 할 수 있습니다. 그러나 자신 만의 I²C 루틴을 생성하고 디버깅하는 것은 분명히 일이 될 것이며 결과 코드는 MSP430 I²C 하드웨어 모듈을 사용할 때보 다 클 수 있습니다. 플래시 공간이 부족하면 문제가 될 수 있습니다.

그런 다음 MSP430 I²C 문제를 검색하려고했는데 MSP430의 초기 SDA 결함으로 인해 MSP430 + ZSC31014 조합이 알려진 문제라는 것을 알았습니다. TI E2E MSP430 포럼에서이 스레드를 참조하십시오.

TI E2E 포럼 : I2C 주변 장치 칩에 문제를 일으키는 MSP430 I2C 글리치 펄스

여기에 언급 된 해결 방법은 긍정적 글리치 발생할 있는 시점에 SDA가 높아지도록 ZSC31014 I²C 주소를 변경하는 것이며, SDA가 높아지면 SDA에 실제 글리치 가 없습니다 .

해결 방법은 ZSC 칩에 비트 6 세트의 주소를 갖도록 구성하는 것입니다 (예 : 우리는 지금 0x42를 사용하고 있습니다). 이는 글리치 펄스를 어드레스 비트 6 지속 시간 동안 깔끔한 "높은"비트로 바꾸어 제거합니다. 문제가되는 하강 에지.

동일한 해결 방법은 ZSC31014 데이터 시트의 빨간색 상자에 표시된 제안과 실질적으로 반대입니다. 그들은 ZSC31014 I²C 주소의 첫 번째 비트 (MSbit)가 0이면 SDA 글리치를 방지해야한다고 말합니다. 따라서 I²C 주소의 MSbit를 "0"으로 만들지 말고 대신 "1"로 만드십시오. 7 비트 I²C 주소에서 비트 6을 설정하십시오!

TI E2E 포럼 스레드 및 ZSC31014 데이터 시트는 모두 I²C 주소에 중점을두기 때문에 버스에서 다른 데이터를 전송하는 동안 SDA 결함이 발생하지 않거나 문제가 발생하지 않을 수 있습니다. 당신은 그것을 조사해야합니다.

따라서 다른 MCU를 사용하는 첫 번째 해결 방법을 무시하면 두 가지 (보다 실용적인) 해결 방법은 다음과 같습니다.

  • 자체 코드를 작성하여 MSP430 I²C 버스를 비트 뱅킹하여 SDA에서 글리치를 생성하지 않도록하십시오.
  • 7 비트 주소의 비트 6이 설정되도록 ZSC31014 I²C 주소를 변경하십시오. 즉, 글리치가 발생할 경우 SDA가 이미 높으므로 ZSC31014가 처리 될 때 SDA에서 실제 글리치가 발생 하지 않습니다 (SDA 글리치가 데이터 전송 중 다른 I²C 시작 이벤트 이후에 발생하지 않거나 발생하는 경우 ZSC31014가 "업셋"되지 않습니다.

희망이 도움이됩니다!


2
승인 된 것으로 표시하기 전에 문제 해결을 통해 문제를 해결할 수있는 더 많은 담당자를 줄 수있는 방법이 있습니다. 또한 문제가 발생하면 해결 방법으로 내 질문을 업데이트합니다.
Hugoagogo

1
@Hugo - 그건 아주 친절 생각입니다 :-) 나는 그것이 제공하여 수행 할 수 있다고 생각 현상금 현상금 이유는 "이 될 것입니다 보상 기존 대답을 ". 나는 그 과정의 전문가가 아니므로 그 이상은 말할 수 없다. 물론 나는 여분의 담당자를 가지고 기뻐할 것입니다 (분석과 작성을하는 데 몇 시간이 걸렸습니다;;)). , 걱정하지 마십시오. 어쨌든 모든 긍정적 인 업장입니다 :-) 내 대답이 효과가 있기를 바랍니다!
SamGibson

@ Hugo-답변에 대한 업데이트 알림을 받았는지 모르겠지만 참고로 SCL과 그 언더 슈트 (아직 퍼즐 문제이지만 주요 문제와 관련이 있는지 의심 스럽습니다)에 대한 단락을 추가했습니다. ve는 최신 스코프 트레이스에서 "초기 SDA 글리치"의 진폭을 0.55 x Vdd 이상으로 추정했으며, 이는 다른 센서 (또는 다른 센서 배치 ;-)가 처리 할 수 있는 "정의되지 않은"전압 영역에 잘 들어 맞습니다. 사양을 어 기지 않고 로직 "1"로 표시합니다. 곧 오프라인 상태가 될 것입니다. 다시 한 번 행운을 빌어 요!
SamGibson

1
나는에서 오전 때 감사합니다 다시 지원을 나는 월요일에 현상금과 함께 이동을해야합니다 (기록을 위해 내가 답변을 업데이트에 대한 알림되지 않습니다).
Hugoagogo

질문에 대한 마지막 업데이트에 대해 생각해 볼 수 있습니다.
Hugoagogo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.