Restaurante La Strada

avr twi 예제

Posted on

어떻게 TWSR의 비트에서 상태를 알 수 있습니까?? 예를 들어 0x08 상태를 얻는 경우 이것이 무엇을 의미합니까?! EEDEVADR은 I2C 라인의 EEPROM 칩 주소입니다. 이 예에서 EEDEVADR 0b10100000#define 동일한 주체는 마이크로칩 MCP23008 8비트 I/O 익스팬더 및 Dalas DS1307 실시간 시계와 같은 다른 I2C 버스 장치에도 적용됩니다(예제 그림 참조). 적절한 장치 주소를 선택함으로써, 마스터는 I2C 버스에 연결된 전체 슬레이브 디바이스와 용이하게 통신할 수 있고; I2C 버스 프로토콜은 마스터와 슬레이브 간에 한 번에 하나의 연결만 설정하도록 허용했습니다. 이 강력하면서도 간단한 개념을 사용하면 임베디드 응용 프로그램에 이러한 I2C 버스 장치를 사용할 수있는 엄청난 가능성을 볼 수 있습니다. 7비트 주소는 4비트 장치 식별 및 3비트 장치 물리적 주소로 구성됩니다. 예를 들어 Microchip 24AA128 I2C CMOS 직렬 EEPROM을 사용하려는 경우 이 장치 식별을 위한 처음 4비트는 “1010”이고 마지막 3비트는 직렬 EEPROM에서 핀 A0, A1 및 A2에 적절한 주소를 설정하여 선택할 수 있습니다. 따라서 이러한 3 비트를 사용 하 여 우리는 최대 연결할 수 8 마이크로 칩 24AA128 동일한 I2C 버스에 직렬 EEPROM; 총 8 x 16 Kbytes의 메모리를 제공합니다. 이 함수는 디버깅 및 데모 목적으로 이 예제에서 사용되는 표준 출력 기능에서 사용됩니다. TWI 버스는 멀티 마스터가 가능하기 때문에 한 마스터가 버스에 액세스하기 시작하면 버스 경합이 발생할 수 있습니다. 일반적으로 TWI 버스 인터페이스 단위는 이 상황을 감지하고 버스가 사용 중인 동안 시작 조건을 시작하지 않습니다. 그러나, 두 마스터가 정확히 같은 시간에 시작했다 경우, 버스 중재가 작동하는 방법, 한 마스터가 전송 작업 중에 버스의 중재를 잃을 수있는 기회가 항상있다.

중재를 잃은 마스터는 즉시 버스에 얘기를 중단하는 프로토콜에 의해 요구된다; 특히 활성 마스터에서 진행 중인 전송을 손상시키지 않으려면 중지 조건을 시작해서는 안 됩니다. 이 예에서는 손실된 중재 조건을 감지하면 전체 전송이 다시 시작됩니다. 이렇게 하면 새 시작 조건이 시작되며, 현재 활성 마스터가 버스를 해제할 때까지 일반적으로 지연됩니다. 예를 들어, 우리는 Atmega328P에 오래 된 좋은 24C16 I2C EEPROM 칩을 인터페이스 하려고. 24Cxx EEPROM에 할당된 주소는 상위 4비트에서 1010으로 구성됩니다. 다음 세 비트는 일반적으로 슬레이브 하위 주소로 사용할 수 있으므로 단일 버스에서 동일한 유형의 장치를 둘 이상 작동할 수 있으며, 각 장치에 사용되는 실제 하위 주소는 하드웨어 스트래핑으로 구성됩니다.