임베디드 용어 사전
시리얼 통신

흐름 제어

받는 쪽이 못 따라갈 때 보내는 쪽을 잠시 멈추게 하는 장치. 없으면 결국 오버런으로 데이터를 잃는다.

UART 는 기본적으로 상대 사정을 모른 채 계속 보낸다.

하드웨어 흐름 제어   RTS/CTS 신호선을 추가로 쓴다
                  수신 버퍼가 차면 선을 비활성으로 만들어 "멈춰" 를 알린다

소프트웨어 흐름 제어  XON/XOFF 문자를 데이터 흐름에 섞어 보낸다
                  선이 필요 없지만 그 문자를 데이터로 못 쓴다

언제 필요한가

고속 전송            115200bps 이상에서 수신 처리가 빠듯할 때
느린 소비자          받은 데이터를 플래시에 쓰는 등 시간이 걸릴 때
대량 전송            펌웨어 이미지 전송 같은 상황

대안

DMA + 큰 링 버퍼     대부분의 경우 이것으로 충분하다
프로토콜 수준 확인    한 블록마다 응답을 받고 다음을 보낸다

실무에서는 흐름 제어선을 배선하지 않은 경우가 많아, 링 버퍼와 DMA 로 버티다가 그래도 넘치면 상위 프로토콜에서 재전송하는 구조를 쓴다. 어느 쪽이든 데이터를 잃었다는 사실 자체는 반드시 감지해야 한다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — UART — 클럭 없이 약속으로 맞춘다