UART 는 기본적으로 상대 사정을 모른 채 계속 보낸다.
하드웨어 흐름 제어 RTS/CTS 신호선을 추가로 쓴다
수신 버퍼가 차면 선을 비활성으로 만들어 "멈춰" 를 알린다
소프트웨어 흐름 제어 XON/XOFF 문자를 데이터 흐름에 섞어 보낸다
선이 필요 없지만 그 문자를 데이터로 못 쓴다
언제 필요한가
고속 전송 115200bps 이상에서 수신 처리가 빠듯할 때
느린 소비자 받은 데이터를 플래시에 쓰는 등 시간이 걸릴 때
대량 전송 펌웨어 이미지 전송 같은 상황
대안
DMA + 큰 링 버퍼 대부분의 경우 이것으로 충분하다
프로토콜 수준 확인 한 블록마다 응답을 받고 다음을 보낸다
실무에서는 흐름 제어선을 배선하지 않은 경우가 많아, 링 버퍼와 DMA 로 버티다가 그래도 넘치면 상위 프로토콜에서 재전송하는 구조를 쓴다. 어느 쪽이든 데이터를 잃었다는 사실 자체는 반드시 감지해야 한다.