i2c slave 예제

I2C 물리적 프로토콜 마스터(컨트롤러)가 슬레이브(예: CMPS03)와 대화하고자 할 때 I2C 버스에서 시작 시퀀스를 발행하여 시작합니다. 시작 시퀀스는 I2C 버스에 대해 정의된 두 개의 특수 시퀀스 중 하나이며, 다른 하나는 정지 시퀀스입니다. 시작 시퀀스와 중지 시퀀스는 SCL(클럭 라인)이 높은 동안 SDA(데이터 줄)가 변경될 수 있는 유일한 장소라는 점에서 특별합니다. 데이터가 전송될 때 SDA는 안정적으로 유지되어야 하며 SCL이 높은 동안에는 변경되지 않아야 합니다. 시작 및 중지 시퀀스는 슬레이브 장치로 트랜잭션의 시작과 끝을 표시합니다. 이제 65mS를 기다린 후 (나는 당신에게 그것을 떠났다) 다음 예제는 레지스터 1에서 광 센서 값을 읽는 방법과 레지스터 2 및 3에서 범위 결과를 보여줍니다. suculent/esp8266-I2C-슬레이브의 새로운 릴리스에 대한 알림을 원하십니까? 그것은 GitHub 마스터에서 최근 Arduino / ESP8266 코어에 대해 작동해야하지만, 코어 2.4.2는 아무것도하지 않습니다 (마스터 작품, 노예는 아무것도받지 않고 침묵을 유지). 이 예제에서는 마스터에서 슬레이브로 “MESA” 메시지를 보낸 다음 “PONG” 메시지로 응답합니다. I2C 소프트웨어 프로토콜첫 번째 일이 일어날 것입니다 마스터는 시작 시퀀스를 보낼 것입니다. 이렇게 하면 버스의 모든 슬레이브 장치에 트랜잭션이 시작되고 있음을 알리고 해당 장치가 필요한 경우 수신을 수신해야 합니다. 다음으로 마스터가 장치 주소를 보냅니다. 이 주소와 일치하는 슬레이브는 트랜잭션을 계속하고 다른 트랜잭션은 이 트랜잭션의 나머지 부분을 무시하고 다음 트랜잭션을 기다립니다.

슬레이브 장치를 해결한 후 마스터는 이제 내부 위치를 보내거나 슬레이브 내부에 쓰기 또는 읽기를 원하는 번호를 등록해야 합니다. 이 숫자는 슬레이브가 실제로 무엇인지, 그리고 얼마나 많은 내부 레지스터가 있는지에 따라 달라집니다. 일부 매우 간단한 장치는 어떤이 없는, 하지만 대부분은, 우리의 모듈의 모든 포함 하 여. CMPS03에는 0-15로 번호가 매겨진 16개 지점이 있습니다. SRF08에는 36이 있습니다. I2C 주소와 내부 레지스터 주소를 보낸 마스터는 이제 데이터 바이트(또는 바이트)를 보낼 수 있습니다( 또는 바이트일 필요는 없습니다). 마스터는 슬레이브에 데이터 바이트를 계속 보낼 수 있으며 슬레이브가 각 바이트 후에 내부 레지스터 주소를 자동으로 증가시키기 때문에 일반적으로 다음 레지스터에 배치됩니다. 마스터가 모든 데이터를 슬레이브에 쓰는 작업이 완료되면 트랜잭션을 완료하는 중지 시퀀스를 보냅니다.

그래서 슬레이브 장치에 쓰기 : 1. 시작 시퀀스2를 보냅니다. R/W 비트가 낮은 슬레이브의 I2C 주소를 (짝수 주소)3으로 보냅니다. 작성하려는 내부 레지스터 번호를 4로 보냅니다. 데이터 바이트5를 보냅니다. [선택적으로 추가 데이터 바이트를 보내십시오] 6. 중지 시퀀스를 보냅니다. 내 이메일에서 판단, 그것은 I2C 버스가 신참에 대한 매우 혼란 스러울 수 있다는 것을 매우 분명하다. 나는 웹 사이트에서 I2C 버스를 사용하는 방법에 대한 많은 예제를 가지고 있지만, 이들 중 많은 사람들이 높은 수준의 컨트롤러를 사용하고 있으며 실제로 버스에서 무슨 일이 일어나고 있는지에 대한 세부 사항을 표시하지 않습니다. 이 짧은 기사는 따라서 I2C 버스를 신비화하려고, 나는 그것이 반대의 효과가 없는 희망! 그러나 때로는 마스터 I2C는 서브 루틴의 모음일 뿐이며 클럭 스트레칭을 완전히 무시하는 몇 가지 구현이 있습니다. 그들은 EEPROM의 같은 것들과 함께 작동하지만 시계 스트레칭을 사용하는 마이크로 프로세서 슬레이브와 함께 하지.

그 결과 잘못된 데이터가 슬레이브에서 읽게 됩니다. 주의! 이것은 곧 Arduino 2.5.0 펌웨어와 I2C 마스터 – 슬레이브 통신의 예입니다. 바이트의 상위 7 비트에 7 비트 주소를 배치하는 것은 신규 이민자에게 혼란의 원천입니다. 즉, 주소 21을 작성하려면 실제로 21이 1 비트로 이동된 42를 보내야 합니다. I2C 버스 주소를 쓰기전용으로 균등 주소와 같은 장치의 읽기 주소로 홀수 주소로 간주하는 것이 더 쉬울 수 있습니다. 예를 들어 CMPS03을 이용하려면 주소 0xC0($C0)입니다.

Share Button
Posted in Uncategorized.