기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하십니까?
I2C BUS SPEC(or 이론)에 의하면, 1개의 I2C BUS에 여러 개의 device(=slave)를 연결하여도 됩니다.
그런데, Embedded linux 기반 제품에서, 3개를 연결하여서 제품을 개발하였는데, 오동작을 하더군요…
물론, slaver의 address 문제는 아니었습니다.
원인을 찾지 못하여, 그 다음부터는 1개씩 연결하는 방식으로 회로를 변경하여 해결하였습니다.
혹시, I2C에 여러 개 device를 연결하여 성공하신 분 계신지요 ?
혹시, 점검해야 하는 부분을 알려 주시면 감사하겠습니다.
제가 무엇을 잘못한 것인지요 ?
아니면, 이론과 실제는 달라서 그런지요 ?
답변 감사드립니다. ^^ 꾸벅 ^^
이 문제는 펌웨어를 오래 해온 제 입장에서 답변 드리겠습니다.
I2C가 원래 여러개의 IC를 붙일 수 있게 설계된 거라 여러 개를 붙여도 잘 돼야 합니다.
안되는 문제는 풀업 저항값이나 프로그램에서 수정해야 합니다.
풀업은 여러개 IC를 붙일 수록 결합 캐패시턴스가 증가해서 파형이 점점 뭉게집니다.
파형이 덜 뭉게지도록 풀업값을 키워줘야 합니다.
프로그램적으로는 일반 시리얼 통신과 달리 I2C는 철저한 state machine 으로 동작합니다.
master와 slave가 서로 state가 맞지 않으면 통신이 안됩니다.
그런데 부팅시나 노이즈 등으로 IC의 상태가 mater와 맞지 않을 수 있습니다.
IC 들이 초기화 과정에서 펄스 같은게 튀면 다른 IC들이 어떤 신호로 받아들일 수 있겠죠.
그런 경우에는 I2C bus recovery 동작을 해줘야 합니다.
IC2 bus recovery 과정은 Analog Device의 AN-686 을 참조하세요.
http://www.analog.com/static/imported-files/application_notes/54305147357414AN686_0.pdf
고속 장치들이 붙어 있을 경우 (ex> G-sensor) 오동작 할
가능성이 높습니다.
하드웨어 엔지니어 분들은 잘 인정하지 않지만........^^
s/w 입장에선 값이 튀는 경우가 나옵니다.
딱히 설명하기는 그렇지만요....쩝