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_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.
- I2C 레벨 시프터는 FRAM을 내장 한 카드를 삽입하기 전에 3 가지 상태 모드로 설정됩니다. FRAM_SDA 및 FRAM_SCL 신호가 낮습니다.
- "FRAM 카드"를 삽입 한 후 전원 공급 장치가 안정화되도록하기 위해 100ms 지연이 추가됩니다 (데이터 시트에 따라 첫 번째 시작 조건 전에 최소 11ms 필요).
- I2C 레벨 시프터가 활성화되었습니다.
- I2C 레벨 시프터가 활성화되고 라인이 당겨 지도록 (데이터 시트에 필요한 ~ 4us) 1ms 지연이 추가됩니다. FRAM_SDA 및 FRAM_SCL 신호가 풀업됩니다.
- FRAM에 액세스합니다.
FRAM_SDA 및 FRAM_SCL 신호는 각 단계 후에 측정되었습니다.
문제가 계속 발생합니다.
반복 시작이 아닌 정지 / 시작 조건
@gbarry.
바이트 전송 중에 반복 시작 전에 중지를 시도했습니다. 오실로스코프를 사용하여 바이트 전송을 측정했습니다. STOP 조건 다음에 START 조건이 정상입니다.
불행히도이 솔루션은 문제를 해결하지 못합니다.
생각
이 문제는 FRAM이 내장 된 카드가 연결된 직후에만 발생합니다. "FRAM 카드"를 삽입하고 올바르게 주소를 지정한 후 수천 건의 성공적인 읽기 액세스 (슬레이브 주소 지정 및 읽기)를 실행했습니다.
점점 더 하드웨어 문제처럼 들립니다. 그러나 I2C 레벨 시프터 또는 I2C 버스의 다른 슬레이브와 관련이 있는지 모르겠습니다.
다른 아이디어 나 제안 사항이 있습니까?
편집 (2013-04-18)
문제가 해결 된 것 같습니다
FRAM 모듈 커넥터를 교체하고 FRAM에서 직접 측정하는 방법을 찾았습니다. 이 새로운 커넥터로 모든 것이 잘 작동하는 것 같습니다.
문제가 잘못된 연결에서 발생했는지 확인하기 위해 더 많은 테스트를 수행합니다.