UART 직렬 통신은 동기 비동기 통신을 지원하며 , SPI MASTER 로 동작하면서도 사용가능하다.
블록다이아 그램에서 보이듯이 클럭생성부 송신부 , 수신부로 이루어져 있으며
하단부에는 USART Control and Status Register A,B,C 로 USART 를 조절하는 3가지 종류의 레지스터를 가지고 있다.
1. Clock Generation
USART 는 4가지 MODE 를 지원한다.
Normal asynchronous,
double speed asynchronous,
master synchronous
slave synchronous mode.
동기 비동기 모드는 (UMSELn bit in UCSRnC)
double speed 모드는 (U2Xn found in the UCSRnA register)
에서 컨트롤 가능하다.
동기 모드에서만 Clock Generation 동작하는데 SLAVE 인지 MASTER 인지에 따라서 XCKn 핀의 방향을 조절 해야 한다.
마스터 모드의 경우 DDR_XCKn를 출력으로
슬레이브 모드의 경우 DDR_XCKn 을 입력으로
위에 다이아 그램을 보면 알 수 있다 싶이 클럭은
마스터 모드 , 비동기 모드에서 사용하는 내부 클럭 ,
슬레이브 모드 에서 사용하는 내부 클럭이 존재한다.
Internal Clock Generation – The Baud Rate Generator
내부 클럭은 시스템 클럭을 분주비로 나누어서 사용하는데 데이터 시트에는 이에 따른 보드레이트 공식이 표로 나와있다.
External Clock
외부 클럭은 슬레이브 모드에서 사용하며 , 외부 클럭은 안정성을 위해서
시스템 클럭보다 4배 이하여야 한다.
2. Frame Formats
UART 통신에서 데이터는 위와같은 형식을 가지고 있다.
처음 스타트 BIT 가 0 으로 들어가고 그후에
0 ~ 8 BIT 의 데이터가 전송된다
그후 데이터의 신뢰도를 높이기위해서 페리티 비트가 가고
1 ~ 2 BIT 의 스탑 비트가 1로 들어간다.
CF)
사실 2번째 스탑비트는 수신부에서는 무시한다. ( 그냥 수신부에 딜레이를 주는 용도로 사용)
때문에 첫번째 스탑비트에 문제가 생겼을때(0으로 들어 올때) 수신부는 이를 감지할 수 있다.
USART Initialization
USART 를 사용하기 전에는 여러가지 설정들을 초기화 해줘야한다.
초기화 순서로는
1. 보더레이트 셋팅
2. frame format
3. 송,수신 가능 여부
- 만약 인터럽를 이용하는 USART 를 구성할 경우 the global interrupt flag 를 CLEAR 해줘서 인터럽트가 발생하지 않도록 해주고 , 초기화를 진행하도록 하자
다시 설정을 바꿀때는 통신중에 일어나면 안되기 때문에 TXCn flag ,RXC flag 를 이용해서 송,수신이 끝났는지 확인하고
설정을 바꾸도록 한다.
Receiver Error Flags
usart 가 recever 로 동작할대 3개의 error flags 를 가진다.
Frame error (FEn),
data overrun (DORn)
parity error (UPEn).
위의 3가지 플레그는 UCSRnA. 에 저장되어 있다.
만약 위의 플레그를 살펴보고 싶다면
UDRn, 레지스터에서 데이터를 읽기전에 먼저 읽어야 한다.
위의 플레그들은 UDRn, 레지스터 를 읽으면 다음 데이터를 받기위해서 초기화 되기 때문이다.
Asynchronous Clock Recovery
비동기 모드에서는 데이터 셈플링할때 정확한 검출을 위해서 보드레이트의 16배 또는 5배 주파수를 이용해서 샘플링한다.
즉 1 bit 가 왔을때 이를 16번 샘플링 한다는 뜻이다. ( normal moder , 2 배속 모드에서는 8번)
위의 표를 보면 알수 있다싶이 1bit 가 갈때 16번 샘플링 되면 여기서 8,9,10 번째 데이터중에서 2차례 이상 검출된 값을 취한다.
이러한 recovery 동작 때문에 송신부와 수신부의 송,수신 속도가 달라도 어느정도 동작할 수 있다.
위의 공식은 송신부쪽(transtitter) 의 최고 , 최저 통신 속도를 나타낸것이다.
데이터 시트엔는 각각의 경우에 따른 최대 최소 전송속도 오류 범위를 표로 나타내고 있다.
'공부,일 > atmega328P' 카테고리의 다른 글
atmega 328p USART (3) 실습 (0) | 2021.08.02 |
---|---|
atmega 328p USART (2) 레지스터 (0) | 2021.08.02 |
질문 (0) | 2021.07.30 |
atmega 328p SPI(2) 실습 (0) | 2021.07.29 |
atmega 328p SPI(1) 기본개념 , 레지스터 (0) | 2021.07.29 |
댓글