임베디드 설계 노트 (5/6) — RS485 통신 설계: 방향 제어 타이밍과 4계층
DE/RE 핀 제어, 링버퍼 구조, 종단 저항까지 산업용 통신의 핵심 설계 포인트
핵심 요약
- RS485의 핵심은 DE/RE 핀으로 송신/수신 방향을 전환하는 타이밍 제어다
- 방향 전환은 반드시 TC(Transmission Complete) 인터럽트 시점에 해야 한다 — TXE에서 전환하면 마지막 바이트가 깨진다
- 선로 양 끝단에 120 Ohm 종단 저항과 Fail-safe Bias 저항이 필수다
배경
RS485는 RS232와 달리 송신기와 수신기가 같은 선을 공유한다. "지금 보낼 차례인가, 들을 차례인가?"를 결정하는 DE(Drive Enable)/RE(Receiver Enable) 핀 제어가 아키텍처의 성패를 좌우한다. 송신 전환이 너무 빠르면 마지막 바이트가 깨지고, 너무 느리면 마스터 응답의 앞부분을 놓친다.
본문
4계층 아키텍처
| 계층 | 역할 | 처리 내용 |
|---|---|---|
| COMM (App) | 프로토콜 해석 | Modbus, LGAP 등 프레임 파싱 및 응답 생성 |
| DD (Driver) | 버퍼 관리 | 링버퍼 운영, 타임아웃 기반 패킷 경계 판단 |
| HAL (Hardware) | 레지스터 제어 | UART 바이트 송수신, DE/RE 방향 전환 |
| Physical | 전기적 신호 | 종단 저항(120 Ohm), 트위스트 페어 임피던스 매칭 |
Single Writer와 링버퍼
RX ISR(인터럽트 서비스 루틴)은 UART 수신 데이터를 즉시 링버퍼에 저장하고 인덱스만 갱신한다. 해석은 Main Loop에서 여유 있을 때 프레임 단위로 처리한다. 인터럽트는 기록만 하고, 처리는 메인 루프가 담당하는 구조다.
방향 전환의 정밀도
전송 완료 인터럽트(TC, Transmission Complete)를 활용해야 한다. TXE(Transmit Data Register Empty) 시점에 방향을 바꾸면 마지막 바이트가 시프트 레지스터에서 채 나가기도 전에 송신기가 꺼진다.
종단 저항과 바이어스
선로가 길어지면 신호 반사로 에러가 급증한다. 양 끝단에 120 Ohm 종단 저항을 달고, Fail-safe Bias 저항을 추가해야 한다.
타임아웃 기반 프레임 분리
마지막 바이트 수신 후 일정 시간(보통 1.5~3.5 character time) 동안 데이터가 없으면 하나의 프레임이 끝난 것으로 판단하는 사일런스 타임아웃 로직을 DD 계층에 반드시 포함시켜야 한다.
시행착오 / 주의사항
- TXE에서 방향 전환해서 마지막 바이트가 계속 깨지는 문제를 겪었다. TC 인터럽트로 전환하면서 해결.
- 종단 저항 없이 긴 선로를 운영하면 에러율이 급격히 상승한다. 기본 원칙이지만 현장에서 자주 빠뜨린다.
마무리
RS485 아키텍처는 단순 데이터 송수신이 아니라, 인터럽트와 메인 루프 간의 정밀한 동기화와 하드웨어 타이밍에 대한 깊은 이해가 결합된 작업이다. TC 인터럽트 활용, 링버퍼 구조, 종단 저항 — 이 세 가지가 핵심이다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기