null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
UART 프레이밍 & 보레이트
#uart
#serial
#baudrate
#frame
#start-bit
@devpc
|
2026-04-02 05:47:09
|
GET /api/v1/nodes/206?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
3
Calls
# UART 프레이밍 & 보레이트 ## UART란? UART(Universal Asynchronous Receiver-Transmitter)는 **두 장치가 직렬로 데이터를 주고받는 통신 방식**입니다. 클럭 신호 없이 미리 정해진 속도(보레이트)로 통신합니다. ``` [ UART 연결 ] 장치 A 장치 B +----------+ +----------+ | | | | | TX ────┼──────────────────┼─── RX | | | | | | RX ────┼──────────────────┼─── TX | | | | | | GND ────┼──────────────────┼─── GND | +----------+ +----------+ ``` TX와 RX는 교차 연결합니다. 공통 GND가 반드시 필요합니다. --- ## UART 프레임 구조 UART는 바이트(8비트)를 아래 형식으로 감싸서 전송합니다. ``` [ UART 프레임 (8N1 형식) ] Idle Start D0 D1 D2 D3 D4 D5 D6 D7 Stop Idle HIGH LOW ─── 데이터 비트 (LSB first) ─── HIGH HIGH │ │ │ │ │ │ └─────┘ └────────────────────────────┘ └─────┘ Idle 상태 Start Bit(항상 Low) 데이터 Stop Bit(항상 High) ``` 각 비트의 역할: | 비트 | 값 | 설명 | |---|---|---| | Idle | High | 아무것도 전송하지 않을 때 상태 | | Start Bit | Low | 프레임 시작 신호 (항상 1비트) | | Data Bits | 0 or 1 | 실제 데이터 (일반적으로 8비트, LSB 먼저) | | Parity Bit | 선택 | 오류 검출용 (없음/짝수/홀수) | | Stop Bit | High | 프레임 종료 신호 (1비트 또는 2비트) | **8N1**: 8 데이터 비트, No parity, 1 Stop bit — 가장 흔한 설정. --- ## 보레이트 (Baud Rate) 보레이트는 **초당 전송하는 심볼(비트) 수**입니다. 단위는 bps(bits per second). ``` [ 보레이트와 비트 시간 관계 ] 보레이트 115200 bps 인 경우: 비트 1개 지속 시간 = 1 / 115200 ≈ 8.68 μs 프레임 1개 (8N1) = 10비트 (Start + 8 Data + Stop) 프레임 전송 시간 = 10 × 8.68 μs ≈ 86.8 μs 초당 전송 가능 바이트 수 ≈ 11520 bytes/s ``` 주요 표준 보레이트: ``` 9600 bps ← 저속, 간단한 센서 통신 115200 bps ← 가장 흔한 디버그용 921600 bps ← 고속 통신 ``` **보내는 쪽과 받는 쪽의 보레이트가 정확히 일치해야 합니다.** 불일치 시 데이터가 깨집니다. --- ## TC37x: ASCLIN 모듈 TC37x에서 UART는 **ASCLIN(Asynchronous/Synchronous LIN) 모듈**이 담당합니다. ASCLIN은 UART, SPI, LIN을 모두 지원하는 복합 통신 모듈입니다. ``` [ TC37x ASCLIN 모듈 구성 ] TC37x ├── ASCLIN0 ← 일반적으로 디버그 UART로 사용 ├── ASCLIN1 ├── ASCLIN2 └── ASCLIN3 ``` ### 보레이트 계산 (ASCLIN) ASCLIN의 보레이트는 클럭 분주기(Prescaler)와 오버샘플링(Oversampling)으로 설정합니다. ``` [ ASCLIN 보레이트 공식 ] f_ASCLIN Baudrate = ───────────────────────────────── Prescaler × Oversampling × Numerator/Denominator 예: f_ASCLIN = 100 MHz, Oversampling = 16, Prescaler = 1 목표 Baudrate = 115200 bps → Numerator/Denominator 비율로 미세 조정 ``` iLLD에서는 직접 계산할 필요 없이 구조체에 원하는 보레이트를 넣으면 드라이버가 자동 계산합니다. ```c IfxAsclin_Asc_Config config; IfxAsclin_Asc_initModuleConfig(&config, &MODULE_ASCLIN0); config.baudrate.baudrate = 115200; /* 목표 보레이트 */ config.baudrate.oversampling = IfxAsclin_OversamplingFactor_16; /* 오버샘플링 16 */ ``` --- ## 다른 MCU와의 차이점 > ⚠️ 다른 MCU에서 넘어온다면 이런 점이 다를 수 있습니다. - **UART 프레임 구조(8N1 등)**: 모든 MCU에서 동일. UART 표준 자체는 MCU와 무관. - **보레이트 공식**: 클럭 소스와 분주 레지스터 이름이 다를 뿐, 개념은 동일. - **STM32**: USART/UART 모듈 사용. `HAL_UART_Init()`에서 보레이트 설정. - **TC37x 특징**: ASCLIN이 UART 외에도 LIN(차량용 통신)을 지원하는 복합 모듈.
// COMMENTS
Newest First
ON THIS PAGE