3.18. UART 기초¶
UART(Universal Asynchronous Receiver-Transmitter)는 두 마이크로컨트롤러 사이, 또는 마이크로컨트롤러와 호스트 PC 사이에서 바이트를 주고받는 가장 오래되고 단순한 방법입니다. 두 가닥의 선이 데이터를 전달하며 – 각 방향마다 하나씩 – 공통 접지가 신호를 되돌립니다. 양쪽 모두 공유 클럭을 사용하지 않으며, 미리 baud rate(보드레이트)에 합의한 다음 데이터 선 자체에서 비트 타이밍을 복원합니다.
3.18.1. 프레임¶
선상의 각 문자는 프레임으로 감싸집니다: 시작 비트, 데이터 비트, 선택적 패리티 비트, 그리고 한 개 또는 두 개의 정지 비트입니다.
하나의 UART 프레임: 시작 비트, 여덟 개의 데이터 비트, 그리고 정지 비트로, 각각 한 비트 주기(1 / baudrate 초) 폭을 가집니다.¶
선은 하이 상태로 유휴 상태에 있습니다. 수신기는 새 프레임의 시작을 나타내는 하강 에지를 감시합니다. 그런 다음 비트 주기마다 한 번씩 – 일반적으로 각 비트의 중간에서 – 데이터 선을 샘플링하여 비트들을 문자로 재조립합니다. 정지 비트는 선을 유휴 상태로 되돌려 다음 시작 비트를 감지할 수 있게 합니다.
3.18.2. 보드 레이트¶
비트 주기 – 그리고 링크의 속도 – 는 초당 비트 수인 baud rate(보드레이트)로 결정됩니다. 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600이 표준 값이며, 115200이 가장 흔한 기본값입니다. 양쪽 끝단은 보드레이트를 몇 퍼센트 이내로 일치시켜야 하며, 그렇지 않으면 수신기가 잘못된 지점에서 비트를 샘플링하여 데이터가 깨진 채로 돌아옵니다.
보드 레이트가 높을수록 초당 더 많은 데이터를 옮기지만 케이블 길이, 정전 용량, 그리고 양쪽 끝 클럭의 정밀도에 더 민감합니다. 같은 작업대 위 두 보드 사이의 짧은 링크라면 115200부터 921600까지가 무리 없이 동작합니다.
3.18.3. 배선¶
UART 링크는 세 가닥의 선을 사용합니다:
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 구성(보드 레이트, 비트 수, 패리티, 정지 비트)은 트랜시버 반대편에서 어떤 물리 계층이 신호를 전달하든 동일합니다.