승인되지 않은 I2C 슬레이브 주소 (때로는)


11

I2C를 사용하여 원격으로 연결된 FRAM (Ramtron의 FM24C04)과 통신하려고합니다. 이 메모리는 보드에 내장되어있어 시스템에서 언제든 삽입하거나 제거 할 수 있습니다 (메모리가 제거되기 전에 통신이 올바르게 종료 됨).

문제는 : 그냥 FRAM이 들어있는 카드를 삽입 한 후, 때때로 ,이 주소를 인정하지 않습니다.

신호 측정

나는 신호를 측정하여 어떤 일이 일어나고 있는지 확인했으며 두 경우 (작동 및 작동하지 않음)에서 타이밍이 정상인 것 같습니다.

올바른 I2C 통신 (3 바이트 읽기) : 여기에 이미지 설명을 입력하십시오

I2C FRAM 주소가 확인되지 않았습니다 (슬레이브 주소가 올바르게 전송 됨). 여기에 이미지 설명을 입력하십시오

이 문제를 해결하기 위해 이미 수행 한 작업 (성공하지 않고)

  • 전원 시퀀스를 준수하기 위해 FRAM이 내장 된 카드를 삽입 한 후 지연이 추가됩니다.
  • 승인되지 않은 슬레이브 주소 감지 후 I2C 생성 중지

I2C 버스 구성

  • 마스터 1 개 (ST의 STM32F205 마이크로 컨트롤러)
  • 3 개의 슬레이브 (Microchip의 EEPROM 24AA1025, Maxim IC의 RTC DS1339C 및 Ramtron의 원격 FRAM FM24C04
  • 마스터와 FRAM 간의 통신을 허용하기 위해 하나의 I2C 레벨 시프터 (Maxim IC의 MAX3373E)가 사용됩니다.
  • 100kHz로 설정된 버스 주파수

편집 (2013-04-17)

먼저 의견을 보내 주셔서 감사합니다.

많은 제안이 있으므로 여기에 내가 한 조사에 대한 설명이 있습니다.

회로도

다음 그림은 I2C 버스의 단순화 된 회로도를 보여줍니다.

I2C 버스 회로도

I2C_SDA 및 I2C_SCL 신호는 마이크로 컨트롤러에 직접 연결되고 FRAM_SDA 및 FRAM_SCL 신호는 FRAM에 연결됩니다. FRAM에 연결된 SDA 및 SCL 신호는 Murata의 BLM18 페라이트를 사용하여 필터링됩니다.

FRAM은 다음과 같이 연결됩니다.

  • NC (핀 1)-> 연결되지 않음
  • A1 (핀 2)-> GND
  • A2 (핀 3)-> GND
  • VSS (핀 4)-> GND
  • SDA (핀 5)-> FRAM_SDA
  • SCL (핀 6)-> FRAM_SCL
  • WP (핀 7)-> GND (쓰기 방지되지 않음)
  • VDD (핀 8)-> + 5V

프레임 카드 설명

이 카드는 FRAM 만 포함 된 "ISA like"카드입니다.

조사

주파수 둔화

SCL 주파수를 50kHz 및 10kHz로 설정하여 테스트를 실행했습니다. 오실로스코프로 SCL 신호를 측정하여 예상 주파수에 도달했는지 확인했습니다.

이러한 수정은 문제를 해결하지 못했습니다. 타이밍을 확인했으며 FRAM 데이터 시트 사양 내에 있습니다.

전원 시퀀스 보장

@jippie.

  1. I2C 레벨 시프터는 FRAM을 내장 한 카드를 삽입하기 전에 3 가지 상태 모드로 설정됩니다. FRAM_SDA 및 FRAM_SCL 신호가 낮습니다.
  2. "FRAM 카드"를 삽입 한 후 전원 공급 장치가 안정화되도록하기 위해 100ms 지연이 추가됩니다 (데이터 시트에 따라 첫 번째 시작 조건 전에 최소 11ms 필요).
  3. I2C 레벨 시프터가 활성화되었습니다.
  4. I2C 레벨 시프터가 활성화되고 라인이 당겨 지도록 (데이터 시트에 필요한 ~ 4us) 1ms 지연이 추가됩니다. FRAM_SDA 및 FRAM_SCL 신호가 풀업됩니다.
  5. FRAM에 액세스합니다.

FRAM_SDA 및 FRAM_SCL 신호는 각 단계 후에 측정되었습니다.

문제가 계속 발생합니다.

반복 시작이 아닌 정지 / 시작 조건

@gbarry.

바이트 전송 중에 반복 시작 전에 중지를 시도했습니다. 오실로스코프를 사용하여 바이트 전송을 측정했습니다. STOP 조건 다음에 START 조건이 정상입니다.

불행히도이 솔루션은 문제를 해결하지 못합니다.

생각

이 문제는 FRAM이 내장 된 카드가 연결된 직후에만 발생합니다. "FRAM 카드"를 삽입하고 올바르게 주소를 지정한 후 수천 건의 성공적인 읽기 액세스 (슬레이브 주소 지정 및 읽기)를 실행했습니다.

점점 더 하드웨어 문제처럼 들립니다. 그러나 I2C 레벨 시프터 또는 I2C 버스의 다른 슬레이브와 관련이 있는지 모르겠습니다.

다른 아이디어 나 제안 사항이 있습니까?


편집 (2013-04-18)

문제가 해결 된 것 같습니다

FRAM 모듈 커넥터를 교체하고 FRAM에서 직접 측정하는 방법을 찾았습니다. 이 새로운 커넥터로 모든 것이 잘 작동하는 것 같습니다.

문제가 잘못된 연결에서 발생했는지 확인하기 위해 더 많은 테스트를 수행합니다.


회로도를 게시 할 수 있습니까? 더 느린 버스 주파수를 사용하여 차이가 있는지 확인하십시오.
Suirnder

삽입 직후에만 문제가 발생 했습니까? "곧"얼마입니까?
Kaz

다른 실험 외에도 다른 슬레이브를 제거하여 동작에 영향을 미치는지 확인할 수 있습니다.
벤 가트너

두 개의 어드레스 핀이 제대로 당겨져 있지 않습니까?
fm_andreas

@Suirnder 나는 대답에 회로도를 게시했습니다.
johsey

답변:


6

삽입 또는 제거 전에 통신이 제대로 종료되었다고 말하더라도 I2C 버스가 버스의 장치 중 하나만 재설정 한 후에 문제가 발생할 수 있으므로이 솔루션을 사용해 보는 것이 좋습니다.

마스터 I2C 하드웨어를 초기화하기 전에 SDA를 입력으로 설정하고 SDA를 낮게 테스트하십시오.

낮 으면 SCL 핀을 높게 설정하십시오.

그런 다음 SDA가 높아질 때까지 SCL 핀을 낮음과 높음으로 전환하십시오 (예 : 주변기기가 여전히 전송하려고하는 나머지 비트를 클럭 아웃). 클럭 사이클은 8 회를 초과 할 수 없습니다. 그렇지 않으면 다른 문제가 있습니다.

나는 이것이 당신의 문제를 해결할 것이라고 보장 할 수는 없지만 내 것을 해결했습니다!.


마스터를 초기화하기 전에이 "버스 복구 알고리즘"을 추가하는 것은 좋지 않습니다. 구현하겠습니다. 감사합니다.
johsey

2

FRAM의 경우 :

  • 먼저 GND와 Vcc를 연결하십시오.
  • 그런 다음 A1, A2 및 WP의 레벨이 올바른지 확인하십시오.
  • 그런 다음에 만 데이터 핀을 연결하십시오.

칩의 전원을 켜기 전에 전원 공급 장치 이외의 다른 핀을 연결하면 문제가 발생할 수 있습니다.


2

10k는 풀업에 약간 큰 것처럼 보이며 앞 가장자리가 느려 보입니다. 저항을 약 3k로 줄이고 이것이 도움이되는지 확인하십시오.

또한 왜 오프 전압이 시간이 지남에 표류합니까?


풀업 저항을 3.3k로 줄 였지만 도움이되지 않습니다. 나는이 표류에 대해 전혀 모른다.
johsey

화면에서 작게 보이지만 약 250mV라고 생각합니다. 3.3V 측면에서 전원 공급 문제가 발생했을 수 있습니다.
Scott Seidman

드리프트는 I2C 레벨 시프터의 양쪽에서 약 300mV입니다. + 3.3V 전원 공급 장치가 제대로 작동하는 것 같습니다 (SCL 신호에 드리프트가 발생할 때 출력에 드리프트가 없음). I2C 레벨 시프터와 관련이있을 수 있습니까?
johsey

전혀 확실하지 않습니다. 3.3V는 어디에서 오는가? 스위칭 컨버터? 어쨌든 의심 스럽다. 데이터 시트 당 3.3V를 제공하는 장치에 필요한 최소 전류를 끌어 내고 있습니까? 그렇지 않은 경우 공급 장치에 저항을로드하십시오. 통신을 시작하기 전에 1-2 초 정도 기다리면 어떻게됩니까?
Scott Seidman

SMPS (TI의 LM3103MH)에서 3.3V가 제공됩니다. 나는 전원 공급 장치의 전문가는 아니지만이 장치를 사용하면 가벼운 부하에서 불연속 전도 모드로 작동 할 수 있기 때문에 필요한 최소 전류가 없습니다. 통신을 시작하기 전에 2 초 동안 대기해도 동일한 문제가 발생합니다.
johsey

2

다른 사람과 대화하려고 할 기회가 있습니까? 그런 문제가 한 번있었습니다. 나는 시간의 60 %를 얻을 수 있지만 충돌을 볼 수 있다는 것을 기억하지 못한다. 내가 제공 한 i2c가 실제 내부 버스에서 분리 된 것 같습니다. 계속해서 실행할 수 있으며 메시지의 30 % 만 삭제합니다. 문제는 우리가 개입하는 "백플레인"없이 장치 (전원 공급 장치)와 직접 통신하기 시작한 순간에 사라졌습니다.

NAK 오류 후 중지 시퀀스가 ​​표시되지 않습니다. 그 시점에서 프로그램을 중단시키는 중단 점이 있다고 생각합니까?

마지막으로 버스에서 유일한 사람이라고 생각되면 반복 된 시작을 중지 / 시작으로 바꾸어보십시오. RS를 처리하는 방법을 잘 모르는 디바이스 (특히 맞춤형 FPGA)를 보았습니다.

[의견에 대한 답변으로] : FRAM 보드에 대해 메모리 나 전체 서브 시스템인지에 대해 언급하지 않은 것이 많습니다. 그러나 문제를 일으키는 i2c 장치의 리드에 스코프를 바로 놓을 수 있지만 여전히 그림을 볼 수 있다면 간섭을 배제 할 것입니다. I2C는 입력에 올바른 신호가 표시되면 내부 문제가없는 한 칩이 제대로 재생되어야 할 정도로 간단합니다.

특히, 당신은 그 레벨 시프터의 FRAM쪽에 도착하고 싶습니다. 신호의 단절은 일반적으로 충돌로 생각되는 것보다 발생하기 쉽습니다.

NAK 사이클은 단순히 존재하지 않는 칩과 구별 할 수 없음을 지적합니다. EEPROM은 사용 중임을 나타 내기 위해이 작업을 수행합니다. FRAM에서 쓰기 시간을 조사한 결과 단일 i2c 데이터 비트보다 빠르므로 문제가되지 않습니다.


I2C 버스에는 마스터가 하나만 있으며 FRAM을 내장 한 보드는이 버스에만 연결됩니다. 따라서, 다른 무언가가 그것에 대해 이야기 할 가능성이 없다고 생각합니다. 예, 중지 시퀀스 앞에 중단 점을 두었습니다. 제안한대로 반복 반복 시작을 중지 / 시작으로 바꾸려고 시도하고 다시 테스트 할 것입니다. 데이터 시트에 따르면 FRAM은 반복 시작을 지원해야합니다. FRAM (예 : 전용 I2C 버스)을 분리하면 결국이 문제를 해결할 수 있다고 생각하십니까?
johsey

FRAM 보드에는 FRAM 만 내장되어 있습니다. "ISA like"게시판입니다. 이 카드는 플라스틱 조각에 내장되어 있으므로 FRAM 핀에서 직접 신호를 측정하기가 어렵습니다. 어쨌든, 나는 FRAM에 가능한 한 가깝게 이러한 신호를 측정하는 방법을 찾으려고 노력할 것입니다.
johsey

U13의 FRAM쪽으로가는 것은 큰 걸음입니다.
gbarry

2

문제가 재현 될 때 장치를 제거했다가 다시 삽입해야만 지워지는 영구적 인 오류이므로 두 가지 중 하나입니다. 또는 접촉이 불량합니다.

장치가 전원을 껐다 켜도 복구 할 수없는 상태가되면 MCU가 장치의 전원을 끌 수 있도록하는 추가 회로가있을 수 있습니다. 그런 다음 펌웨어는 장치로부터 승인을받지 못하면 복구 절차를 실행하여 칩의 전원을 잠시 끈 다음 다시 전원을 공급 한 다음 다시 시도합니다.

접촉이 불량한 경우 커넥터의 신뢰성을보고 더 나은 것을 찾아야 할 수도 있습니다. 동일한 커넥터를 사용하여 이러한 보드를 더 많이 사용하는 경우 현장에 문제가있을 수 있습니다. 어쨌든 상황을 처리하기위한 사람의 절차가있을 수 있습니다. 장치를 사용하는 작업자는 카드를 삽입 할 때 발생할 수있는 잠재적 인 문제를 알고 있어야하며 올바르게 작동하려면 다시 장착해야 할 수도 있습니다.

메인 장치는 FRAM과 통신 할 수 없음을 나타내는 경보를 발생시킬 수 있습니다 (패널의 "고장"LED 및 / 또는 경고음 등). 또는 그 반대 : 일부 표시등이 켜지면 사용자에게 FRAM이 승인되었고 통신이 설정되었다는 피드백이 제공됩니다. FRAM이 마스터 장치에서 멀리 떨어져 있으면 표시등은 FRAM 모듈 (LED를 구동하는 다른 I2C 칩)에있을 수 있습니다.


0

문제가 산발적으로 발생하면 타이밍 문제 일 수 있습니다.

데이터 시트 목록 타이밍 두 세트의 "표준 모드"에 대한 하나 "빠른 모드"에 대한 하나. 측정 한 결과 "표준 모드"타이밍의 경계에있는 것 같습니다. 데이터 시트를 감추면서 칩이 정확히 어느 모드에 들어가는 지 알 수는 없습니다.

나는 당신의 장치가 빠른 모드에 있다고 가정하지 않을 것입니다. 타이밍을 2 ~ 4 배 줄일 수 있고 시작 조건 유지 시간, 클럭 하이주기 및 클럭 로우주기에 대한 표준 모드 타이밍 내에 있는지 확인하고이 문제가 여전히 발생하는지 확인하십시오.


장치가 "표준 모드"(SCL 주파수 100kHz)에 있습니다. 실제로이 주파수는이 모드의 경계에 있습니다. 나는 그것을 두 배로 줄이고 시험을 할 것입니다.
johsey

0

24c04a, b 또는 c를 사용합니까? c04a라면 견고한 디자인이었습니다. b 부분은 전원 공급 장치 램프에 민감합니다. pin8에서 g hnd로 어떤 분리를 사용합니까? 신호 레벨에 대해 말하려고했지만 레벨 변환기를 사용하는 것을 볼 수 있습니다. 칩이 여분의 클럭으로 해석 할 수있는 SCL에 결함이 없는지 확인하고 싶을 수도 있습니다.


3
9 버튼 인터페이스만으로 구식 휴대폰에 이것을 입력 했습니까?
angelatlarge

사용 된 FRAM은 FM24C04B 입니다. 이 메모리의 전력 감도에 관한 정보를 어디서 얻었습니까? 더 많은 정보를 줄 수 있습니까? 핀 8에는 디커플링이 없습니다.이 모듈의 설계는 몇 년 전에 완료되었으며 전체 생산을 소비해야합니다. 오실로스코프로 수행 한 측정에 따르면 FRAM 모듈이 연결되고 레벨 시프터가 활성화 된 경우 SCL 라인에 글리치가없는 것 같습니다.
johsey

1
이 응답이 매우 늦다는 것을 알고 있지만 Vcc 민감도에 대한 내 정보는 몇 년 전 Ramtron에 대한 앱 지원에서 비롯된 것입니다. 정확한 세부 사항은 기억 나지 않지만 특정 램프 속도와 온도에서 칩은 본질적으로 잠기고 '좋은'램프로 전원을 켤 때까지 I2C 통신을 허용하지 않습니다. 칩에 디커플링 캡이없는 것은 좋지 않습니다. 0.1uF 대 10uF 디커플링을 사용하면 Vcc 램프가 바뀌고 다른 하나는 작동하지 않습니다. @ angelatlarge, 예 죄송합니다. 전화에서 첫 답변을 입력했습니다.
gman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.