I2C 혼합 주파수가 가능합니까?


12

400 kHz I 2 C 버스 가 있다고 가정 합니다. 하나의 마스터와 다수의 슬레이브 장치가 있습니다. 우리는 하나 이상의 슬레이브 장치를 소개하고 싶지만 불행히도 100 kHz로 이동합니다.

확실한 설계 선택은 다음과 같습니다.

  • 그 버스를 100kHz로 돌리십시오
  • 400kHz 및 100kHz 주변 장치에 별도의 버스 사용

그러나 문제는 해킹에 관한 것입니다. 하나의 버스를 사용하고 400kHz에서 400kHz 장치를 처리하고 100kHz 슬레이브와 통신 할 때 버스를 100kHz로 전환하면 어떻게 될까요?

아니면 I 2 C 라인 에서 볼 수있는 400kHz 해시에 대한 응답으로 느린 슬레이브가 잘못 작동하여 잘못 처리되고 있다고 생각할 수 있습니까?

다른 슬레이브를 대상으로하는 메시지를 안정적으로 무시할 수 있도록 400kHz I 2 C 신호를 충분히 잘 처리 할 수 ​​있도록 100kHz 장치에 의존 할 수 있습니까 ?


4
마지막 문장에 관해서는 400kHz 신호를 처리 할 수있는 100kHz 장치에 의존 할 수 있다고 생각하지 않습니다.
gbmhunter

그러나 그것은 우리가 그러한 핵을 구현하는지에 따라 우리가 의존하는 것이므로 기본적으로 문제가 아닙니다.
Kaz

답변:


7

제안한 바와 같이 좋은 엔지니어링 방법은 아닙니다. 일부 장치는 수신 할 수없는 (언더 샘플링) 트래픽을 대부분 무시하지만 다른 장치는 잘못된 프레임으로 버스를 복잡하게 만들 수 있습니다.

따라서 찾고있는 답변은 다음과 같은 응용 프로그램의 특성에 따라 다릅니다.

  • I2C 연결 길이
  • 풀업 저항 값
  • 장치 호환성

물론 몇 년 동안 사양을 벗어나서 작동하는 장치에 어떤 일이 일어날 지 예측하기는 어렵습니다.

또 다른 옵션은 셧다운 라인을 실행하여 디바이스를 느리게하거나 AND 라인을 통해 클럭 라인을 통과 (클럭 신호를 생성 할 수없는 경우)하는 것입니다.


10

마스터에서 나오는 추가 I2C 버스가없는 경우 다른 옵션은 PCA9543A / 43B 와 같은 I2C 스위치를 사용하는 것 입니다. 한 지점에 400kHz 슬레이브를 배치하고 다른 지점에 100kHz 슬레이브를 배치하고 필요에 따라 전환하십시오.


필립스 (발신자)의 말을 보면 정확히 그렇습니다. 호환되지 않으므로 버스 스위치를 사용하는 것이 좋습니다. (앱 노트에 있습니다).
gbarry

6

400kHz 트래픽에 노출 될 때 100kHz 장치가 오작동하지 않을 것이라는 보장은 없습니다. NACK에서 버스 행킹에 이르기까지 모든 것이 가능합니다.

전체 버스를 100kHz로 실행하거나 느린 주변 장치에 대해 별도의 저속 버스가 있어야합니다.


3

다른 옵션. 두 개의 버스를 사용하는 대신 하나의 추가 회선을 간단하게 사용할 수 있습니다 (소프트웨어 / 비트 뱅크 I 2 C로 더 쉬움 ). 별도의 클럭 라인 또는 별도의 데이터 라인. 또는 I 2 C 버퍼 또는 I 2 C 스위치를 사용하여 별도의 변경없이 단일 100MHz 칩을 자체 세그먼트에 배치하십시오.

또는 단일 버스에서 테스트하십시오. 100kHz 칩이 회선에 영향을 줄 수 있습니다. 4 비트마다 읽을 수 있고 해결되었다고 생각할 수 있습니다. 그러나 유효한 시작 조건을 확인한 다음 정확한 주소이므로 다음 32 비트 중 4 번째 비트를 모두 읽은 다음 레지스터에 쓰려면 유효한 다음 정보를 다음 몇 바이트를 읽어야합니다. 또는 데이터를 시간 초과하십시오. 나는 그것이 아마도 상황이라고 생각하지 않습니다. 가장 좋은 방법은 테스트 회로에 간단하게 배선하고 확인하는 것입니다.

주의 할 점은 이것이 하나의 오프 회로이거나 몇 개만 만드는 경우 위험하거나 변경하기가 쉽다는 것입니다. 대량 생산 품목 인 경우 두 번째 버스를 원할 수도 있습니다. 다른 하나는, 100kHz 칩이 원래의 I 2 C 사양으로 제작되었으며 더 높은 클럭 속도를 지원할 수 있다는 점을 고려해야한다는 것 입니다. 고속 400kHz 사양으로 테스트되지 않았습니다.


2

I2C 버스의 설계는 다음과 같습니다.

  1. SCL에서 하강 에지가 발생하면, 슬레이브 장치가 특정 최소 지연없이 SDA를 즉시 주장 할 수 있습니다.
  2. 상승 및 하강 에지의 상대적 순서는 매우 중요합니다.

드라이버 강도와 라인 커패시턴스의 차이로 인해 이론적으로 한 장치가 SDA를 너무 빨리 구동하여 다른 장치가 SDA가 먼저 떨어지는 것을 볼 수 있으므로 SCL에서 다소 느린 하강 에지에 응답 할 수 있습니다.

SCL에서 여러 로직 임계 값을 정의하고 SDA의 폴링 에지가 SDA의 에지 다음에 오는 것으로 간주되도록하려면 SDA의 에지가 감지 될 때 여전히 2/3 VDD보다 높아야합니다. 그러나 장치는 1/3 VDD 아래로 떨어질 때까지 SCL의 하락 에지에 대한 응답으로 SDA를 주장하지 않을 수 있지만 사양은 그러한 용어로 작성되지 않습니다.

대신, SDA 및 SCL에서 거의 동시에 떨어지는 에지를 보는 장치는 일반적으로 SDA의 에지가 실질적으로 선행하지 않는 한 SCL의 에지가 먼저 발생한 것으로 간주합니다. 일부 I2C 구현은 SCL과 SDA를 외부 클럭과 동기화하고 SDA의 하강 에지가 SCL보다 2주기 전에 먼저 관찰되어야한다고 요구함으로써이를 처리합니다. SCL 및 SDA에서의 동작 속도가 동기화 클록에 비해 너무 빠르면, 장치는 SCL 및 SDA에서 임의의 고 및 저 신호 시퀀스를 감지 할 수있다. 이러한 시퀀스 중 하나가 느린 장치를 처리하는 것처럼 보이면 그에 따라 반응하여 진행중인 다른 통신을 스쿼시 할 수 있습니다.

I2C 버스의 장치가 시스템 클록과의 동기화에 의존해야하는 특별한 이유는 없지만 (SCL에서 두 개의 개별 임계 값을 감지 할 수있는 것이 더 나을 것임) 사실 일부 장치는 실제로는 그렇게 작동합니다. 저속으로 제한된 장치가 내부적으로 고속 버스와 공존하기를 원하더라도, 관심이있을 수있는 일이있을 때마다 최소한 시계를 늘려야 할 수도 있습니다.

이로 인해 일부 통신이 다른 방식보다 느리게 발생하지만 속도 동기화 성능은 클럭 동기화 설계에서 요구하는 것만 큼 나쁘지 않을 것입니다 (느린 장치가 클럭을 늘리는 실제 양은 그렇지 않을 것입니다) 동기화 된 클럭 장치에서 최악의 시나리오 실패를 피하기 위해 클럭 속도를 늦춰야하는 양만큼 나쁩니다.

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