맞춤형 I2C 마스터-슬레이브 시스템을 설계하고 디버깅하는 방법은 무엇입니까?


10

맞춤형 I2C 마스터-슬레이브 시스템이 필요한 경우 어떻게 진행합니까?

적용 할 설계 기준은 무엇입니까?

문제를 해결하기 위해 사용할 수있는 디버깅 도구는 무엇입니까?


이것은 참조 질문입니다. 나는 이것을 덜 명백하게하는 몇 가지 의견을 삭제했습니다. (질문은 질문자에 의해 답변됩니다).
Nick Gammon

답변:


10

임베디드 리눅스 컨퍼런스 (Embedded Linux Conference)에서 제공 한이 튜토리얼은 질문에 대한 답변을 제공하고 Arduino Mini Pro가 슬레이브 역할을하고 4 개의 독립 휠을 제어하는 ​​4WD 드론 운전의 실제 예를 사용하여 주제에 대한 자세한 설명에 대한 링크를 제공합니다. . 원본 문서는 여기 에서 찾을 수 있습니다 .

참고 :이 답변은 현재 링크에서 하이라이트를 조정함에 따라 진행 중입니다.


I2C 버스의 일반적인 응용

  • 상대적으로 느린 주변 장치와의 인터페이스 예 : 센서, 기계식 액추에이터.
  • 다른 채널을 사용하여 데이터를 교환하는 "빠른"주변 장치 제어 예 : 코덱

    PC에서 운영 체제는 일반적으로 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)
  • 선택한 장치 내에서 정보 처리기로 등록합니다.

버스 교통량의 예

버스 교통량의 예 버스 쓰기주기의 예 버스 읽기주기 Part1의 예 버스 읽기주기 예 2


커스텀 슬레이브

왜 커스텀 I2C 슬레이브를 생성합니까?

  • I2C 인터페이스에서 원하는 센서 / 액추에이터를 사용할 수 없습니다.
  • 슬레이브보다 필요한 고유 주소가 적습니다.
  • 슬레이브에서 원하는 사용자 정의 기능 :
    • 자극에 대한 반 자율 반응.
    • 입력 데이터 필터링 / 전처리
  • 전력 최적화 : 사용자 지정 "센서 허브"는 메인 프로세서가 유휴 상태 인 동안 하우스 키핑을 수행합니다.
  • 입력에 대한 실시간 응답.
  • [여기서 당신의 상상력]

맞춤형 I2C 슬레이브를 설계하는 방법은 무엇입니까?

  • 요구 사항을 정의하십시오 (이전 슬라이드 참조).
  • 마이크로 컨트롤러 또는 마이크로 프로세서를 선택하십시오.
  • 스케줄러 또는 운영 체제 (있는 경우)를 선택하십시오.
  • 통신 하위 프로토콜을 정의하십시오.
    • 교환 할 매개 변수와 명령을 정의하십시오.
    • 이들을 "등록자"로 구성하고 무료 주소를 선택하십시오.

I2C 마스터의 디자인

주요 설계 기준 :

  • 무게 / 치수.
  • 필요한 계산 능력과 평균 대기 시간.
  • PC와 같은 장치
    • 일반적으로 헤드리스 내장형 장치.
    • 기본 프로그래밍 언어 : 해석 및 컴파일
  • 슬레이브 구동을위한 버스 / gpios의 가용성 :
    • GPIO 만 해당 : 프로토콜 비트 뱅
    • I2C : 사용자 공간 응용 프로그램과 커널 드라이버.
    • 사용 가능한 GPIO / I2C 인터페이스 없음 : USB-I2C 어댑터.

디버깅 : 나누고 정복

애드혹 장치로 버스를 직접 제어하십시오. 예 :

  • 버스 해적 (다른 버스에도 유용)
  • FTDI FT232R 칩을 기반으로하는 USB-I2C 마스터 어댑터.
  • 맞춤형 장치 (별도의 프로젝트 일 수 있음)
  • 로직 분석기 또는 스코프 / 고급 미터로 버스를 스누핑하십시오. 예 :

    • 호환 가능한 로직 분석기가있는 sigrok / pulseview
    • 2 채널 독립형 스코프 / 미터
    • 슬레이브 특정 인 서킷 디버거 / 인 서킷 에뮬레이터를 사용하십시오.

      예 : AVR 칩용 AVR Dragon (Arduino UNO, Nano, Mini, MiniPro)


버스 해적

버스 해적

  • 주로 개발 목적으로 사용됩니다.
  • 버스를 스니핑하고 운전할 수 있습니다.
  • 매크로 또는 여러 프로그래밍 언어에 대한 프로그래밍 방식 액세스를 포함하여 직렬 (ttyACM) 포트를 통한 콘솔 인터페이스.
  • 내장 풀업 저항 및 전압 소스 (5V / 3.3V)
  • 다른 많은 프로토콜을 지원합니다.
  • 참고 자료 : Wikipedia , 메인 페이지

USB-I2C 어댑터

usbtoi2c

  • 작은 발자국.
  • 영구 설치에 적합합니다.
  • 호스트에서 특별한 연결이 필요하지 않습니다 : 일반적인 PC와의 인터페이스에 사용될 수 있습니다.
  • SPI 가능 변형도 사용 가능합니다.
  • 콘솔 인터페이스가없고 직렬 이진 프로토콜 만 있습니다.
  • 프로토콜 래퍼가 필요 합니다 .
  • 참조 : 프로토콜

sigrok and pulseview

sigrok (bakend component) 로고

시그 로크

펄스 뷰 (시각화) 예제

맥박

로우 엔드 로직 분석기의 예

살레

  • 리눅스에서 PC 중심 측정을위한 사실상의 표준 (그러나 다른 OS에서도 사용 가능).
  • 광범위한 로직 분석기, 스코프 및 미터를 지원합니다.
  • I2C를 포함한 다양한 프로토콜 디코더.
  • 논리 신호를 시각화하고 프로토콜 오류를 디버깅하는 데 유용합니다.
  • 매우 저렴한 저가 HW조차도 완전히 새로운 차원의 디버깅을 제공 할 수 있습니다.
  • 참조 : sigrok , pulseview , 지원되는 하드웨어

예 : 4WD 드론 조향

2 개의 Arduino Mini Pro를 사용하여 제작 된 프로토 타입. 무인 비행기


이 예에서 노예는 무엇을합니까?

I2C 슬레이브 :

  • 각 휠에 적용되는 토크의 양을 제어합니다.
  • 각 바퀴가 회전하는 방향을 제어합니다.
  • 옵티컬 엔코더 (Odometer)를 통해 각 휠의 회전 속도를 측정합니다.
  • 위의 매개 변수를 I2C 마스터에 노출합니다.

슬레이브 역할

I2C 슬레이브의 상위 레벨 블록 다이어그램.


슬레이브 선택 : Arduino Mini Pro

미니 프로

  • 각 휠에 충분한 핀 / 기능 :
    • 듀티 사이클을 독립적으로 구성한 1 개의 PWM 출력.
    • 1 주행 거리계 입력을 IRQ로 등록하기위한 GPIO.
    • 선택을위한 2 개의 GPIO :
      • 앞으로
      • 역전
      • 게으른
      • 자물쇠
  • 인터럽트 구동 i2c 교환을위한 I2C HW 블록.
  • SPI 기반 프로그래밍을위한 전용 핀.
  • 작은 발자국.
  • 저렴한 비용.
  • 그림에 표시된 클론의 보드 레이아웃은 DIL 소켓에 장착하기에 최적화되어 있습니다.

슬레이브 관련 ICD : AVR Dragon

AVR 드래곤


OS 선택 : ChibiOS

치 비오스

  • RTOS : 선점, 작업, 세마포어, 동적 시스템 틱 등
  • 작은 설치 공간 : 사용 된 코드 / 데이터 만 연결하십시오.
  • HAL을 통한 RTOS와 BSP의 구분.
  • 비상업적 용도의 GPLv3.
  • 적극적으로 개발되었지만 이미 성숙했습니다.
  • 8 비트 AVR을 지원합니다.

그러나 AVR에 대한 BSP 지원은 제한적입니다.-AVR GPIO의 드라이버를 중단합니다 (추가됨). -AVR 슬레이브 모드 (사용자 정의)에 대한 I2C 지원. AVR 용 Drone SW의 일부로 별도로 개발해야했습니다 .


통신 매개 변수 정의

각 바퀴마다 :

  • 구동에 사용되는 PWM 신호의 듀티 사이클 -1 바이트. 0xFF = 최대 토크 / 0x00 = 토크 없음.

  • 회전 방향 -1 바이트

    • 0x00 = 유휴
    • 0x01 = 반전
    • 0x02 = 앞으로
    • 0x03 = 잠김
  • 광학 엔코더 슬롯 사이의 평균주기 -2 바이트.

    • 무엇이든 쓰면 측정이 재설정됩니다.
  • 매개 변수 색인 -1 니블 :

    • 0 = 듀티 사이클
    • 1 = 방향
    • 2 = 평균 기간
  • 휠 인덱스 -1 니블 :

    • 0 = 왼쪽 뒤
    • 1 = 우측 후방
    • 2 = 오른쪽 앞
    • 3 = 왼쪽 앞
    • 4 = 모두

하위 프로토콜 : 레지스터 정의

레지스터 형식 : 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

차가 시계 방향으로 회전합니다.

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