임베디드 리눅스 컨퍼런스 (Embedded Linux Conference)에서 제공 한이 튜토리얼은 질문에 대한 답변을 제공하고 Arduino Mini Pro가 슬레이브 역할을하고 4 개의 독립 휠을 제어하는 4WD 드론 운전의 실제 예를 사용하여 주제에 대한 자세한 설명에 대한 링크를 제공합니다. . 원본 문서는 여기 에서 찾을 수 있습니다 .
참고 :이 답변은 현재 링크에서 하이라이트를 조정함에 따라 진행 중입니다.
I2C 버스의 일반적인 응용
여러 버스 컨트롤러를 사용할 수있는 경우 주변 장치는 속도별로 그룹화되므로 속도가 빠른 장치는 속도가 느린 장치에 의해 불이익을받지 않습니다.
I2C 버스에 대한 빠른 소개-주요 기능
- 시리얼 버스.
- 직렬 CLock 및 직렬 DAta (플러스 접지)의 2 개 라인 만.
- 4 가지 속도 : 100kHz, 400kHz, 1MHz, 3.2MHz.
- 일반적으로 마스터 장치 1 개와 슬레이브 1 개 이상.
- 통신은 항상 마스터 장치에 의해 시작됩니다.
- 동일한 버스 (다중 마스터)에 여러 마스터가 공존 할 수 있습니다.
- 오픈 드레인 : SDA와 SCL에는 풀업 저항이 필요합니다.
- "시계 스트레칭"
- 마스터는 SCL을 제어하지만 속도를 조정해야하는 경우 슬레이브가 개방 드레인 때문에이를 보류 할 수 있습니다.
- 마스터는이 시나리오를 확인해야합니다.
- 슬레이브가 멈춰 버스에 걸릴 수 있습니다. 마스터에서 슬레이브로 리셋 라인이 필요합니다.
- 일반적으로 7 비트 주소 지정뿐만 아니라 10 비트도 지원됩니다.
- 논리적 프로토콜 : 실제 전압 수준은 지정되지 않았으며 개별 구현에 따라 다릅니다. 예 : 1.8V / 3.3V / 5.0V
참조 URL :
버스 구성 예
프로토콜의 특성 (간체)
- 2 가지 메시지 유형 : 읽기 및 쓰기
- 시작 / 정지 비트-나머지 답변에서 "["및 "]"로 표시
- 주소 : 7 또는 10 비트
- R / W 비트 : R = 1 / W = 0 전송 된 메시지 유형을 식별하는 데 사용됩니다.
- 버스의 데이터 : (주소 << 1 | R / W)
- 선택한 장치 내에서 정보 처리기로 등록합니다.
버스 교통량의 예
커스텀 슬레이브
왜 커스텀 I2C 슬레이브를 생성합니까?
- I2C 인터페이스에서 원하는 센서 / 액추에이터를 사용할 수 없습니다.
- 슬레이브보다 필요한 고유 주소가 적습니다.
- 슬레이브에서 원하는 사용자 정의 기능 :
- 자극에 대한 반 자율 반응.
- 입력 데이터 필터링 / 전처리
- 전력 최적화 : 사용자 지정 "센서 허브"는 메인 프로세서가 유휴 상태 인 동안 하우스 키핑을 수행합니다.
- 입력에 대한 실시간 응답.
- [여기서 당신의 상상력]
맞춤형 I2C 슬레이브를 설계하는 방법은 무엇입니까?
- 요구 사항을 정의하십시오 (이전 슬라이드 참조).
- 마이크로 컨트롤러 또는 마이크로 프로세서를 선택하십시오.
- 스케줄러 또는 운영 체제 (있는 경우)를 선택하십시오.
- 통신 하위 프로토콜을 정의하십시오.
- 교환 할 매개 변수와 명령을 정의하십시오.
- 이들을 "등록자"로 구성하고 무료 주소를 선택하십시오.
I2C 마스터의 디자인
주요 설계 기준 :
- 무게 / 치수.
- 필요한 계산 능력과 평균 대기 시간.
- PC와 같은 장치
- 일반적으로 헤드리스 내장형 장치.
- 기본 프로그래밍 언어 : 해석 및 컴파일
- 슬레이브 구동을위한 버스 / gpios의 가용성 :
- GPIO 만 해당 : 프로토콜 비트 뱅
- I2C : 사용자 공간 응용 프로그램과 커널 드라이버.
- 사용 가능한 GPIO / I2C 인터페이스 없음 : USB-I2C 어댑터.
디버깅 : 나누고 정복
애드혹 장치로 버스를 직접 제어하십시오. 예 :
버스 해적
- 주로 개발 목적으로 사용됩니다.
- 버스를 스니핑하고 운전할 수 있습니다.
- 매크로 또는 여러 프로그래밍 언어에 대한 프로그래밍 방식 액세스를 포함하여 직렬 (ttyACM) 포트를 통한 콘솔 인터페이스.
- 내장 풀업 저항 및 전압 소스 (5V / 3.3V)
- 다른 많은 프로토콜을 지원합니다.
- 참고 자료 : Wikipedia , 메인 페이지
USB-I2C 어댑터
- 작은 발자국.
- 영구 설치에 적합합니다.
- 호스트에서 특별한 연결이 필요하지 않습니다 : 일반적인 PC와의 인터페이스에 사용될 수 있습니다.
- SPI 가능 변형도 사용 가능합니다.
- 콘솔 인터페이스가없고 직렬 이진 프로토콜 만 있습니다.
- 프로토콜 래퍼가 필요 합니다 .
- 참조 : 프로토콜
sigrok and pulseview
sigrok (bakend component) 로고
펄스 뷰 (시각화) 예제
로우 엔드 로직 분석기의 예
- 리눅스에서 PC 중심 측정을위한 사실상의 표준 (그러나 다른 OS에서도 사용 가능).
- 광범위한 로직 분석기, 스코프 및 미터를 지원합니다.
- I2C를 포함한 다양한 프로토콜 디코더.
- 논리 신호를 시각화하고 프로토콜 오류를 디버깅하는 데 유용합니다.
- 매우 저렴한 저가 HW조차도 완전히 새로운 차원의 디버깅을 제공 할 수 있습니다.
- 참조 : sigrok , pulseview , 지원되는 하드웨어
예 : 4WD 드론 조향
2 개의 Arduino Mini Pro를 사용하여 제작 된 프로토 타입.
이 예에서 노예는 무엇을합니까?
I2C 슬레이브 :
- 각 휠에 적용되는 토크의 양을 제어합니다.
- 각 바퀴가 회전하는 방향을 제어합니다.
- 옵티컬 엔코더 (Odometer)를 통해 각 휠의 회전 속도를 측정합니다.
- 위의 매개 변수를 I2C 마스터에 노출합니다.
I2C 슬레이브의 상위 레벨 블록 다이어그램.
- 각 휠에 충분한 핀 / 기능 :
- 듀티 사이클을 독립적으로 구성한 1 개의 PWM 출력.
- 1 주행 거리계 입력을 IRQ로 등록하기위한 GPIO.
- 선택을위한 2 개의 GPIO :
- 인터럽트 구동 i2c 교환을위한 I2C HW 블록.
- SPI 기반 프로그래밍을위한 전용 핀.
- 작은 발자국.
- 저렴한 비용.
- 그림에 표시된 클론의 보드 레이아웃은 DIL 소켓에 장착하기에 최적화되어 있습니다.
- RTOS : 선점, 작업, 세마포어, 동적 시스템 틱 등
- 작은 설치 공간 : 사용 된 코드 / 데이터 만 연결하십시오.
- HAL을 통한 RTOS와 BSP의 구분.
- 비상업적 용도의 GPLv3.
- 적극적으로 개발되었지만 이미 성숙했습니다.
- 8 비트 AVR을 지원합니다.
그러나 AVR에 대한 BSP 지원은 제한적입니다.-AVR GPIO의 드라이버를 중단합니다 (추가됨). -AVR 슬레이브 모드 (사용자 정의)에 대한 I2C 지원. AVR 용 Drone SW의 일부로 별도로 개발해야했습니다 .
통신 매개 변수 정의
각 바퀴마다 :
하위 프로토콜 : 레지스터 정의
레지스터 형식 : 0xαβ
-α = 파라미터 인덱스-β = 휠 인덱스
주소 (임의로 선택) : 0x10
버스 해적 형식 :
-[= 시작 비트-] = 종료 비트-r = 읽기 바이트-주소 시간 2 (왼쪽 시프트 1), R / W 비트
예-버스 해적 형식
[i2c_addr reg_addr = (parm, wheel) reg_value]
[0x20 0x20 0x02] Left Rear Forward
[0x20 0x21 0x01] Right Rear Backward
[0x20 0x22 0x01] Right Front Backward
[0x20 0x23 0x02] Left Front Forward
[0x20 0x14 0xFF] Wheels set to max torque
차가 시계 방향으로 회전합니다.