3.18. UART 기초

UART(Universal Asynchronous Receiver-Transmitter)는 두 마이크로컨트롤러 사이, 또는 마이크로컨트롤러와 호스트 PC 사이에서 바이트를 주고받는 가장 오래되고 단순한 방법입니다. 두 가닥의 선이 데이터를 전달하며 – 각 방향마다 하나씩 – 공통 접지가 신호를 되돌립니다. 양쪽 모두 공유 클럭을 사용하지 않으며, 미리 baud rate(보드레이트)에 합의한 다음 데이터 선 자체에서 비트 타이밍을 복원합니다.

3.18.1. 프레임

선상의 각 문자는 프레임으로 감싸집니다: 시작 비트, 데이터 비트, 선택적 패리티 비트, 그리고 한 개 또는 두 개의 정지 비트입니다.

UART 프레임 파형. 신호는 왼쪽에서 하이 상태로 유휴 상태에 있다가, 한 비트 시간 동안 로우로 떨어지고(시작 비트), 이어서 여덟 개의 데이터 비트를 순서대로 전달한 다음, 유휴 상태로 돌아가기 전에 한 비트 시간 동안 하이로 복귀합니다(정지 비트).

하나의 UART 프레임: 시작 비트, 여덟 개의 데이터 비트, 그리고 정지 비트로, 각각 한 비트 주기(1 / baudrate 초) 폭을 가집니다.

선은 하이 상태로 유휴 상태에 있습니다. 수신기는 새 프레임의 시작을 나타내는 하강 에지를 감시합니다. 그런 다음 비트 주기마다 한 번씩 – 일반적으로 각 비트의 중간에서 – 데이터 선을 샘플링하여 비트들을 문자로 재조립합니다. 정지 비트는 선을 유휴 상태로 되돌려 다음 시작 비트를 감지할 수 있게 합니다.

3.18.2. 보드 레이트

비트 주기 – 그리고 링크의 속도 – 는 초당 비트 수인 baud rate(보드레이트)로 결정됩니다. 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600이 표준 값이며, 115200이 가장 흔한 기본값입니다. 양쪽 끝단은 보드레이트를 몇 퍼센트 이내로 일치시켜야 하며, 그렇지 않으면 수신기가 잘못된 지점에서 비트를 샘플링하여 데이터가 깨진 채로 돌아옵니다.

보드 레이트가 높을수록 초당 더 많은 데이터를 옮기지만 케이블 길이, 정전 용량, 그리고 양쪽 끝 클럭의 정밀도에 더 민감합니다. 같은 작업대 위 두 보드 사이의 짧은 링크라면 115200부터 921600까지가 무리 없이 동작합니다.

3.18.3. 배선

UART 링크는 세 가닥의 선을 사용합니다:

A와 B로 표시된 두 보드가 세 가닥의 선으로 연결되어 있습니다. 보드 A의 TX 핀은 보드 B의 RX 핀에 연결되고, 보드 B의 TX 핀은 보드 A의 RX 핀에 연결되며, 양쪽 보드의 그라운드 핀은 서로 묶여 있습니다.

UART 배선: 한 보드의 TX가 다른 보드의 RX로 가고, 양쪽 그라운드가 함께 묶입니다.

  • TX → RX, 양방향으로. 각 보드의 송신 핀은 다른 보드의 수신 핀입니다. 초보자가 흔히 저지르는 실수는 TX → TX로 배선하는 것입니다 – 두 출력이 서로 맞서 싸우게 되어 어느 수신기에도 데이터가 들어오지 않습니다.

  • 공통 그라운드. 신호 레벨은 그라운드를 기준으로 하므로, 두 보드는 공통 그라운드를 가져야 합니다. 그렇지 않으면 수신기가 선상에서 잘못된 전압을 보게 됩니다.

3.18.4. 전압 레벨과 물리 계층

카메라의 UART 핀의 신호 레벨은 3.3 V CMOS입니다: 논리 0은 그라운드, 논리 1은 3.3 V입니다. 3.3 V CMOS UART로 통신하는 것이라면 무엇이든 – 다른 마이크로컨트롤러, 3.3 V로 설정된 USB-시리얼 어댑터, 3.3 V GPS 모듈 – 직접 배선할 수 있습니다.

참고

5 V CMOS UART 장치(구형 마이크로컨트롤러, 특정 GPS 모듈, 일부 구형 센서 브레이크아웃)는 5 V 논리 레벨에서 동일한 UART 프레이밍으로 통신합니다. 이를 카메라에 직접 배선하는 것은 안전하지 않습니다: 5 V TX가 카메라의 RX를 구동하면 5 V를 견디지 못하는 카메라의 절대 최대 입력 전압을 초과하며, 카메라의 3.3 V TX는 깨끗한 논리 1을 위한 5 V 장치의 하이 임계값에 도달하지 못할 수 있습니다.

두 전압 사이를 변환하려면 active line driver(능동 라인 드라이버) – 각 선의 양쪽에 자체 구동 트랜지스터를 갖춘 전용 양방향 레벨 시프터 IC – 가 필요합니다. 레벨 시프팅에 나온 수동 MOSFET-and-pull-up 시프터로는 여기서 충분하지 않습니다. 이들의 상승 엣지는 저항을 통해 선을 충전하는 데 의존하는데, 이는 스위치 속도에서는 괜찮지만 UART에는 너무 느립니다. 115200 보드에서 각 비트는 약 8 µs 동안 지속되며, 수동 시프터의 RC 슬루(slew)는 한 비트를 다음 비트로 번지게 만듭니다.

능동 라인 드라이버는 완전한 UART 속도에서 양방향 모두 깨끗한 에지를 생성합니다. 링크가 동작할 보드 레이트에 맞게 정격이 정해진 부품을 고르고, 카메라의 TX와 RX를 시프터의 3.3 V 쪽에 배선하며, 5 V 장치의 TX와 RX를 시프터의 5 V 쪽에 배선하십시오.

세 가지 구형 물리 계층은 동일한 프레이밍을 사용하지만 다른 전압을 쓰며, 3.3 V 마이크로컨트롤러와의 사이에 레벨 컨버터가 필요합니다:

  • RS-232. 데스크톱 PC의 시리얼 포트와 일부 산업 장비에서 사용됩니다. 선은 대략 ±5 V에서 ±15 V 사이를 오가며 유휴 상태는 음극 레일에 있습니다. CMOS에 비해 극성이 반전되어 있고 전압이 높으며, MAX232 / MAX3232 계열(또는 유사한)의 칩이 변환을 처리합니다.

  • RS-422. 점대점 링크를 위한 차동 신호 표준입니다(드라이버 하나, 최대 열 개의 수신기). 드라이버는 균형 잡힌 한 쌍의 선으로 전송하고, 수신기는 그 둘 사이의 차이를 보며 도중의 공통 모드 노이즈를 무시합니다. 전이중 링크는 두 쌍을 사용합니다 – 각 방향에 하나씩. RS-422는 보드 레이트에 따라 수십 미터에서 1 킬로미터까지 도달하며, RS-422 트랜시버 칩이 카메라의 TX / RX와 균형 쌍 사이에 위치합니다.

  • RS-485. RS-422의 멀티드롭 사촌입니다 – 동일한 차동 신호를 쓰지만 하나의 버스에 최대 32개의 드라이버와 수신기를 둘 수 있도록 설계되었습니다. 대부분의 링크는 단일 쌍에서 반이중으로 동작하며, 각 노드의 드라이버와 수신기가 같은 선을 공유하고 누가 말할지를 소프트웨어가 중재합니다. 선이 멀리 뻗고 노이즈가 심한 산업 자동화 버스(Modbus, DMX512, Profibus)에서 사용됩니다. RS-485 트랜시버 칩이 카메라의 TX / RX와 차동 쌍 사이에 위치합니다.

둘 다 여전히 기본 비트 레벨에서는 UART 프레임을 전송합니다. 카메라의 machine.UART 구성(보드 레이트, 비트 수, 패리티, 정지 비트)은 트랜시버 반대편에서 어떤 물리 계층이 신호를 전달하든 동일합니다.