UART 주파수는 얼마나 중요합니까?


17

16 MIPS (PLL 4x, 2 사이클 명령)에서 마이크로 컨트롤러를 실행하기 위해 8 MHz 크리스털을 사용할 것입니다. 그러나 8 MHz는 UART 주파수 AFAIK로 나뉘 지 않습니다. 그렇다면이 주파수는 얼마나 중요합니까? 115,200 보드를 사용할 계획입니다.

UART를 ± 1 % 내에서 실행할 수 있습니까? 이것이 작동하지 않으면 어떤 주파수를 사용해야합니까? (최대 처리 속도를 위해 가능한 한 16 MIPS에 가까워지고 싶습니다.) 중요한 경우 PIC24FJ64GA004를 사용하고 있습니다.

답변:


13

1 % 이내이면 괜찮을 것입니다.

UART가 16x 오버 샘플링 클록을 사용한다고 가정합니다. 예를 들어, 1,843,200Hz ~ 16x 오버 샘플 115,200bps로 설정할 수 있습니다. UART는 시작 비트의 하강 에지에서 8 개의 오버 클럭을 카운트 오프 할 수 있으므로 비트 셀의 중심을 오버 클록의 +/- 1주기 내에서 찾을 수 있습니다. 데이터를 샘플링 할시기를 결정하기 위해 오버 클럭의 16주기를 카운트 오프합니다.

시작 비트의 중심에 도달 할 수 있다고 가정하면 8 데이터 비트에 걸쳐 올바른 비트 셀에서 직렬 데이터 샘플링을 유지하려면 클럭 주파수가 (8-0.5) / 8에서 (8 + 0.5) 사이에 있어야합니다 ) / 8 또는 의도 된 비트 전송률의 +/- 6.25 % 오버 클럭킹이 높을수록 시작 비트의 중심을 타격하는 이상적인 조건에 더 가까워 지지만 일반적으로 8x 또는 16x는 5 %의 불일치가 작동한다고 가정 할 수있을 정도로 가깝습니다.

그러나 다른 쪽에서는 주파수를 완벽하게 계산할 수 없습니다. 4 % 빠른 장치를 4 % 느린 장치에 연결하면 문제가 발생합니다. 적어도 한 가지 경우는 PC가 조금 느리게 실행되고 장치가 약간 빠르며 같은 장치는 다른 PC와는 괜찮지 만 PC는 다른 PC와는 괜찮지 만 조금씩 통신 할 수있었습니다. 장치. (약 112kbps와 119kbps에서 O- 스코프) 공칭 주파수를 최대한 가깝게 치는 것이 좋습니다. 공칭 값의 2 % 내에서 문제가있는 것을 본 적이 없습니다.

일반적으로해야 할 일은 의도 된 UART 오버 샘플링 속도와 전송 속도의 정수배를 제공하는 마스터 클럭 속도를 사용하는 것입니다. 예를 들어, 약 8MHz에서 실행되는 CPU를 원한다면 7.3728MHz 발진기를 4로 나눠 1.8432MHz를 얻을 수 있으며 이는 정확히 115 배의 16 배입니다.


8MHz는 69로 나눠서 115,942를 얻었으며 이는 ± 1 % 이내입니다. PIC가 전송 속도 생성기를 위해 이러한 유형의 분할을 지원하는지 궁금합니다. 나는 그렇게 바라고 있지만 나는 그렇게 생각하지 않습니다.
Thomas O

PIC에는 전송 속도 생성기가 있습니다. 그것은 잘 작동하지만 9600과 같은 낮은 전송 속도에서만 작동하고 115,200과 같은 높은 전송 속도에서는 작동하지 않으며 너무 정확하지 않습니다.
Thomas O

7.3728MHz 크리스털을 사용할 수 있다고 생각하십니까? (정밀도를 원하기 때문에 내부 7.37MHz 오실레이터를 사용하지 않겠습니다.) 64로 나누면 115,200의 UART 주파수를 얻을 수 있습니다. 높은 내성을 가지고 갈 수있는 것이 가장 빠릅니다.
Thomas O

1
UART가 지원하는 경우 시작 비트를 오버 샘플링하고 비트 셀의 중심을 찾을 수 있도록 오버 클럭 (16x와 같은)을 제공하는 것이 바람직하지만, 115K의 16x를 1 % 내에서 얻는 것은 어려운 일이 아닙니다. 당신은 보드 멀티 크리스탈을 사용합니다.
JustJeff

4

@JustJeff가 언급 한 1 %는 필요하지 않습니다. 대부분의 UART는 마지막 비트에서 반 비트 오류를 ​​허용합니다. 프레임은 대부분 1 개의 시작 비트, 8 개의 데이터 비트 및 1 개의 정지 비트로 구성되며 총 10 비트입니다. 10 비트의 반 비트는 5 %입니다 (JustJeff의 6.25 %는 시작 및 정지 비트를 고려하지 않습니다).


1
나를 잘못 인용하지 마십시오. "1 %"로, 나의 진술은 이것이 달성하기 어려울 수 있다는 것이었다. "6.25 %"는 시작 비트의 중심에 도달 했다고 가정 한 것으로 , 이러한 조건에서 수신기 대 송신기 클록 속도 의 최대 허용 차이 가 될 것 입니다.
JustJeff

1

JustJeff는 시작 비트를 잊어 버렸지 만 Stevenh는 정지 비트를 추가했습니다. 8 개의 데이터 비트, 1 개의 시작 비트 및 패리티 비트가없는 (정지 비트 수는 중요하지 않음) 공통 프로토콜을 가정하면 시작 비트의 선행 에지부터 마지막 데이터 비트. 일반적으로 수신기는 1/4 비트 시간 내에이 마지막 비트를 샘플링하기를 원합니다. 1/2 비트는 실패 임계 값을 보장합니다. 전기 노이즈와 지터가 항상 있기 때문에 근처에있는 것은 신뢰할 수 없습니다.

1/4을 8 1/2 = 2.94 %로 나눈 값입니다.

JustJeff가 언급했듯이 대부분의 UART 구현은 실제로 비동기 16x 클록으로 수신 데이터를 샘플링합니다. 시작 비트의 리딩 엣지를 측정 할 수있는 오차이기 때문에 1/16 비트 시간 불확실성이 추가됩니다. 8 1/2 비트 중 1/16 비트 시간이 또 다른 .74 %입니다. 그것은 앞서 계산 된 오류 예산에서 나온 것입니다. 수신기가 중앙의 1/4 비트 시간 내에 마지막 비트를 샘플링 할 수 있도록 2.2 % 허용 클록 불일치가 발생합니다.

다른 사람들이 말했듯이 정확한 전송 속도가 필요한 경우 7.3728MHz 크리스털을 사용하는 것이 일반적입니다. 일반적으로 수정 오류 내에서 UART 전송 속도에 도달하는 동안 최대 속도 근처에서 CPU를 실행하도록 조정할 수 있습니다.


나는 정지 비트가 중요하지 않다는 것에 동의하지 않습니다. 에서 이 질문에 정지 비트가 잘못 낮은 수준으로 설정 되었기 때문에 통신에 실패했습니다.
stevenvh

전체 통신이 작동하려면 정지 비트가 있어야하지만 대부분의 UART에 대한 오류 예산 계산에는 들어 가지 않습니다. UART는 마지막 데이터 비트 이후 다음 시작 비트의 다음 리딩 엣지 이전에 약간의 시간이 필요합니다. 이것이 바로 정지 비트 시간입니다. 이 시간이 충족되지 않으면 "프레이밍 오류"가 발생합니다. 아마도 데이터 비트처럼 샘플링되었지만 다른 방식으로 처리 된 경우를 알고 있습니다. 구식 텔레타이프에는 기계적인 메커니즘에 다음 문자를 잡을 준비를하기 위해 2 개의 정지 비트가 필요했습니다.
Olin Lathrop

시작 비트를 세 번 언급했는데 그렇지 않습니까?
JustJeff

@OlinLathrop : 정지 비트는 그 MSB이다 바이트를 보낼 때 제로가됩니다 것을 보장 할 필요가 있을 다음 시작 비트의 하강 에지. 데이터 라인이 예상보다 낮아지는 경우에는 다른 장치가 다르게 동작하지만, 정지 비트가없는 경우 전송 된 0 바이트 시퀀스에는 유용한 타이밍 정보가 포함되지 않습니다. 이러한 요구 사항은 25 % 미만의 고정 프레임 오버 헤드로 다른 수단을 통해 충족 될 수 있지만, 그렇게하는 사람은 아무도 모릅니다.
supercat

1

아직 언급되지 않은 한 가지 점은 일부 장치는 수신하는 모든 데이터 바이트마다 데이터 바이트를 전송해야한다는 것입니다. 이러한 장치에 데이터가 지속적으로 공급되는 경우 전송 속도보다 전송 속도가 0.1 % 느리고 약간 줄어든 정지 비트를 보낼 수있는 기능이 없으면 연속 1000 회마다 출력이 1 바이트 줄어 듭니다. 디바이스가 16 바이트의 버퍼링으로 제한되는 경우, 대략 16,000 개를 전달한 후 1 바이트의 데이터를 삭제하고 그 후 1,000 개당 약 1 바이트를 삭제합니다. 소위 "1200 baud"모뎀은 실제로 이러한 이유로 정확하게 1200 비트 / 초보다 약간 높은 속도 (약 1202라고 생각합니다)로 작동한다는 점에 주목할 가치가 있습니다. 있다,

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.