일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 패턴인식
- 가상화
- 갤럭시탭S8울트라
- Neural Network
- NarwalFreo
- 신경망
- 동아리
- 신경회로망
- SSM
- 삼성
- Friendship
- 증강현실
- 멤버십
- 인공지능
- 구글 앱 엔진
- Google App Engine
- 물걸레자동세척로봇청소기
- BAM
- 삼성소프트웨어멤버십
- 하이퍼바이저
- Bidirectional Associative Memory
- 고려대학교
- hopfield network
- 나르왈프레오
- 패턴 인식
- 파이썬
- Python
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레로봇청소기추천
- 빅데이터
- Today
- Total
정보공간_1
[2기 전주 심경원] UART 통신을 이용한 프로세서 제어 본문
UART 통신을 이용한 프로세서 제어
1. 서론
마이크로프로세서를 이용한 프로젝트에서 UART통신이 많이 사용이 됩니다. UART 통신 프로토콜은 매우 간단하며 대부분의 마이크로프로세서에 내장되어있고 빠른 시간 내에 구현할 수 있어 사용하는 개발자들이 많다. 그러나 대부분 간단한 디버깅을 위한 통신이나 키워드 전송, 단순한 Serial을 반복적인 전송으로 프로세서를 제어하게 되는데, 이러한 통신 방법으로는 다양한 명령어를 전송하거나 데이터 전송, 소프트웨어와 하드웨어간의 동기화 등에 많은 문제점을 가지고 있습니다.
특히 UART통신은 비동기 통신이기 때문에 무선통신을 할 때에는 유선통신과는 달리 많은 데이터 손실과 Noise에 의한 잘못된 데이터가 발생할 수 있습니다.
UART 통신에서 이러한 문제점을 완벽히 해결할 수는 없지만 간단한 에러체크와 하드웨어간의 통신 프로토콜을 만들어 보완할 수 있는 방법을 다루고자 합니다.
2. 본론
2.1 소개 및 특징
UART는 Universal Asynchronous serial Receiver and Transmitter의 약자로 범용 비동기 통신입니다. UART같은 시리얼통신은 원거리 전송에 유리하며 실시간의 빠른 데이터 처리량이 요구되는 환경에 많이 이용됩니다. 단점으로는 2와이어의 직렬 통신이기 때문에 데이터 전송량이 적어 대용량 데이터 전송에는 취약합니다. 그래서 대부분 프로세서를 실시간 제어하거나 간단한 디버깅을 위한 프로세서 모니터링 등으로 많이 이용됩니다.
2.2 시리얼통신의 주요 용어
- Baud Rate와 BPS(비트/초)
Buad의 단위는 원래 변조율이나 1초간 통신선의 신호 변경회수를 가리키는 단위로서 사용되었습니다. 이것은 BPS와 항상 똑 같은 것은 아닙니다. 2개의 시리얼디바이스를 접속한 경우에는 Baud와 BPS는 사실상 똑같습니다. 만약 통신 속도를 19200BPS로 통신하고 있다면, 1초간에 19200회선을 통과한 신호가 변화한다고 말할 수 있습니다.
- 비트 단위 데이터 전송
시리얼통신에서는 1 바이트를 8개의 비트로 분리해서 한번에 1비트씩 통신선로로 전송합니다. 수신측 에서는 통신선로를 통해 수신한 비트들을 조립해서 1바이트를 만들어내야 하는데 이때 1바이트의 범위를 식별하기 위하여 사용하는 것이 스타트 비트와 스톱 비트입니다. 일단 스타트 비트를 송신하면 송신측 에서는 계속해서 데이터 비트를 송신합니다. 데이터 비트는 설정한 값에 따라 보통 5, 6, 7, 8의 어느 쪽입니다. 수신측 과 송신측은 이러한 데이터 비트 수와 보오레이트의 값을 일치하게 설정할 필요가 있습니다.
- 케이블 길이
RS232C 규격으로는 케이블 길이는 약 150cm로 되어 있습니다. 그러나 실제 고품질로 실드(shielded)된 케이블을 사용한다면 최장 3km정도 까지 향상시키는 것이 가능합니다.
2.3 명령어 프로토콜
UART 통신은 비트단위의 통신이 아닌 프로세서에서 전송된 비트들을 바이트로 조립 했을 때 이 데이터를 어떻게 처리하는가에 중점을 둡니다. 프로세서를 실시간으로 제어를 할 때 다양한 명령어를 이용하여 빠른 명령을 내리게 되는데 여기서 짧은 키워드로 이루어진 명령어를 보내더라도 빠르게 많이 보내게 되면 명령어가 아닌 연속된 데이터처럼 전송이 이루어집니다. 시뮬레이션과 동기를 맞추기 위해 실시간으로 연속적인 데이터를 전송함으로써 로봇을 제어할 수 있습니다. 이를 위해 PC와 H/W간에 명령어 프로토콜을 만들어 진행하였습니다.
STX |
Mode |
DL(Data Length) |
Data ... Data |
ETX |
0x02 |
table |
0~ |
data |
0x03 |
- STX (0x02) : 스타트 바이트로써 명령어의 처음을 알려주는 바이트입니다.
- Mode : 명령어의 mode에 대한 다양한 정보로 명령을 가지고 있습니다.
- DL(Data Length) : 각 명령어에 보내는 데이터 길이를 나타내는 바이트로서 사용한 명령어에서 전송되는 데이터 길이 정보 입니다.
- Data : 위에서 설명한 비트 단위 통신에서 스타트 비트를 보내는 것처럼 각 명령어의 시작을 알려주는 스타트 바이트를 넣어 명령어의 시작과 끝을 알 수 있습니다. 다음으로 명령어(키워드)를 넣어 보내게 되는데 보통 1바이트~2바이트를 보냅니다. 그리고 데이터의 끝을 알 수 있습니다다.
-ETX(0x03) : 데이터 전송의 끝을 나타냅니다.
이처럼 명령어 데이터 길이가 유동적으로 변화 하면서도 확실한 데이터 길이를 알게 되어 전송된 데이터의 정확한 전송 여부를 알 수 있습니다. 그렇지만 이러한 방법으로는 명령어 데이터 중간에 Noise가 발생하여 데이터 길이에는 변화가 없지만 데이터 자체가 변화하게 되었을 때 에는 잘못된 전송을 받을 수 있습니다.
이 문제를 해결하는 방법으로는 Check-Sum방식이 있다. ETX바이트 앞에 Check-Sum바이트를 넣어 전송하게 됩니다.
Check-Sum = ~(Mode + DL + Data… + …Data)
ex 명령 테이블
3. 결론
지금까지 UART통신을 이용하여 실시간으로 마이크로프로세서 제어할 때 유용한 방법을 알아보았습니다. 간단한 키워드를 전송하여 프로세서를 제어하거나 데이터 전송의 빈도수가 적을 때에는 이러한 방식이 오히려 데이터 전송시간, 데이터가 길어 짊으로써 생기는 Noise등으로 비효율적인 방법일 수도 있습니다. 그러나 실시간 제어를 위해 다양한 명령어를 연속으로 전송하거나, 데이터 손실이 많은 무선통신을 할 때에는 이와 같은 방법으로 디바이스 간의 통신 프로토콜을 설계하여 보다 안정적이고 정확한 데이터를 전송 할 수 있습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 강남 이광수] Micom Programming 의 세계 (1부) (0) | 2012.08.19 |
---|---|
[2기 강남 안병현] GoF 디자인패턴 - Adapter 패턴 (0) | 2012.08.19 |
[2기 대구 김길종] The Empty Base Class Optimization (EBCO) (0) | 2012.08.18 |
[2기 대구 최진원] C++ - Better C (0) | 2012.08.18 |
[2기 강남 권도일]손 영역 추적을 위한 루카스 카나데 템플릿 매칭 알고리즘에 대해 (0) | 2012.08.18 |