UART 수신기 클럭 속도


14

UART 기초를 이해하려고했지만

  • 비동기 통신 프로토콜이므로 TX와 RX 클럭은 서로 독립적입니다.
  • 데이터 수신은 시작 비트 와 하나 이상의 정지 비트를 사용하여 보장됩니다. 또한 수신기는 수신에 사용되는 SIPO 레지스터 를 구동하기에 적합한 클럭을 생성하기 위해 데이터 속도를 알고 있어야합니다 .

여기에 질문이 있습니다

일반적으로 비트 전송률 16X 의 클럭 이 데이터를 복구하는 데 사용됩니다. 그렇다면 어떻게 bps클럭 주파수로 변환 할 수 있습니까? UART 수신기에 사용 된 클럭킹 메커니즘을 연구하기위한 참고 자료를 제공해주십시오.

답변:


18

송신기와 수신기 클럭은 독립적으로 생성되는 방식으로 서로 독립적이지만 적절한 전송을 보장하기 위해 잘 맞아야합니다.

시작 비트 (낮음)와 중지 비트 (높음)는 2 바이트 사이에서 수신기가 동기화 할 수있는 항상 높고 낮은 전이를 보장하지만 그 이후에는 자체적으로 작동합니다. 더 이상 시간이 없습니다. 연속 비트를 구별하는 데 사용할 수있는 신호. 그것이 가진 모든 것은 자신의 시계입니다. 따라서 가장 간단한 작업은 시작 비트 샘플부터 시작하여 각 비트를 중간에 시작하는 것입니다. 예를 들어 9600bps에서 비트 시간은 104µs이고 시작 비트는 + 52µs 에서 시작 하고 첫 번째 데이터 비트는 T 0 + 52µs + 104µs에서 두 번째 데이터 비트는 T 0 + 52입니다. µs + 2 × 104 µs 등. T 0000×0시작 비트의 하강 에지입니다. 시작 비트를 샘플링하는 것은 정말 필요는 없지만 (당신은 알고 는 시작 가장자리 스파이크 아니라는 것을 확인하기 위해 유용 그것의 저를).

여기에 이미지 설명을 입력하십시오

52µs 타이밍의 경우 9600bps 클럭 주파수 또는 19200Hz의 두 배가 필요합니다. 그러나 이것은 기본적인 탐지 방법 일뿐입니다. 더 진보 된 (읽기 : 더 정확한) 방법은 한 번의 스파이크에 부딪치지 않도록 여러 샘플을 연속으로 가져옵니다. 그런 다음 비트 당 16 틱을 얻기 위해 실제로 16 9600Hz 클럭이 필요할 수 있습니다. 비트 당 중간에 있어야하는 5 개 정도를 사용할 수 있습니다. 그리고 투표 시스템을 사용하여 읽거나 낮춰야하는지 확인하십시오.×

올바르게 기억한다면 68HC11은 처음, 비트 중간 및 끝에서 몇 가지 샘플을 가져와 레벨 변경이있을 경우 처음과 마지막으로 다시 동기화해야합니다 (보증되지 않음).

샘플링 클럭은 비트 전송률에서 파생 된 것이 아니며 다른 방법입니다. 9600bps의 경우 샘플링 클럭을 153600Hz로 설정해야하며, 마이크로 컨트롤러의 클럭 주파수에서 프리스케일러를 통해 파생됩니다. 그런 다음 비트 클럭은 16으로 다른 나눗셈에서 파생됩니다.

타의 추종을 불허하는 클럭
이 수신기의 시계가 송신기의 동기식없는 경우 무슨 일이 일어날 것입니다 :

여기에 이미지 설명을 입력하십시오

수신기의 클럭은 6.25 % 느리고, 다음 비트마다 샘플링이 늦게 진행될 것임을 알 수 있습니다. 일반적인 UART 전송은 10 비트로 구성됩니다. 1 개의 시작 비트, 8 개의 데이터 비트의 페이로드 및 1 개의 정지 비트. 그런 다음 비트 중간에서 샘플링하면 마지막 비트, 정지 비트에서 비트를 절반으로 줄일 수 있습니다. 10 비트에서 반 비트는 5 %이므로 6.25 % 편차로 인해 문제가 발생합니다. 그림에서 명확하게 보여줍니다. 이미 세 번째 데이터 비트에서 가장자리 근처에서 샘플링하고 있습니다.


도움을 주셔서 감사합니다. 감사합니다 !! 시작 비트를 T0 + 52us 대신 T0 + 104us에서 샘플링 할 수 없습니까?
Vivek Maran

1
@ Vivek27-아니오. 104 us는 시작 비트의 지속 시간이므로 중간이 아닌 끝에서 샘플링을 수행합니다. 몇 분만 주시면 사진을 업데이트하겠습니다. :-)
stevenvh

1
@Vivek : 실제로 시작 비트는 실제로 "샘플링"되지 않습니다. 그 목적은 나머지 캐릭터가 상대적으로 시간이 초과되는 라인 유휴 상태에서 초기 전환을 제공하는 것입니다. "값"은 항상 라인 유휴 상태이며 자체적으로 데이터를 포함하지 않습니다.
Olin Lathrop

7
@Olin - 나는 , 시작 비트를 샘플링 할 경우에만 시작 가장자리 스파이크 아니라는 것을 확인 할 수 있습니다.
stevenvh

1
@ downvoter-여기서 잘못된 점을 알려 주시면 문제를 해결할 수 있습니다. 그러나 당신은 우리에게 무언가 를 말해야 합니다 . (당신도 오늘 내 다른 대답을 downvoted 같은 일이 있습니까?)
stevenvh

11

조금 뒤로 물러서서 UART가 사용하는 저수준 신호 프로토콜에 대해 이야기합시다. TX와 RX는 클럭이 아닌 데이터 라인입니다. 클럭은 각 UART 내부에만 있기 때문에 전송 속도에 대한 사전 동의가 필요합니다.

전송하지 않으면 회선이 유휴 상태로 유지됩니다. 바이트를 전송하기 위해 (예를 들어, 다른 데이터 폭이 가능), 송신기는 먼저 시작 비트를 전송합니다 . 수신기는 시작 비트의 선행 에지 시간과 알려진 전송 속도를 사용하여 나머지 문자를 디코딩합니다. 100kBaud를 사용하고 있다는 것을 간단히 말해 보겠습니다. 이는 각 비트 시간이 10 µs 길이임을 의미합니다. 여기에는 시작 비트, 데이터 비트 및 중지 비트가 포함됩니다. 따라서 첫 번째 데이터 비트의 중간은 시작 비트의 선행 에지 이후 15µs, 두 번째 데이터 비트는 25µs 등입니다.

수신기와 송신기 클럭이 동일한 한, 이것은 영원히 지속될 수 있습니다. 그러나 그것들은 정확히 동일하지 않으므로 영원히 지속될 수 없습니다. 수신기의 클록을 송신기의 클록으로 재 동기화하기 위해, 데이터 문자는 종료되고, 라인은 비트 동안 유휴 상태로 남은 다음, 프로세스가 반복된다. 타이밍 오류는 시작 비트의 선행 에지에서 시작하여 누적되므로 최대 드리프트는 마지막 비트입니다. 해당 문자가 끝나면 수신기는 다음 시작 비트를 기다리는 동안 재설정하고 프로세스가 반복됩니다.

8 데이터 비트의 경우 타이밍에 대한 최악의 경우는 마지막 비트를 샘플링하는 것입니다. 시작 타이밍의 리딩 엣지 인 타이밍 레퍼런스에서 8.5 비트 시간입니다. 수신기가 1/2 비트 이상 꺼져 있으면 다른 비트 동안 마지막 비트를 샘플링합니다. 분명히 그것은 나쁘다. 이는 8 1/2 비트 또는 5.9 %에서 1/2 비트의 클록 주파수 불일치에서 발생합니다. 그것은 불일치가 보장됩니다. 안정성을 위해 일반적으로 수신기가 송신기를 절반 또는 2.9 % 이내로 일치 시키십시오. 이는 마지막 비트에서 1/4 비트 시간 오류를 나타냅니다.

그러나 그렇게 간단하지 않습니다. 전술 한 시나리오에서, 수신기는 본질적으로 시작 비트의 전연에서 스톱워치를 시작한다. 이론적으로는 아날로그 전자 장치에서 수행 될 수 있지만 복잡하고 비싸며 디지털 칩에 쉽게 통합 할 수 없습니다. 대신 대부분의 디지털 UART 구현에는 예상 비트 전송률의 16 배로 실행되는 내부 클럭이 있습니다. 그런 다음 "스톱워치"는이 16 배주기를 계산합니다. 이는 모든 비트 샘플링 시간에 1/16 비트의 추가 가능한 오류가 있음을 의미하며, 이는 마지막 비트의 다른 .7 % 클록 불일치와 같습니다.

잘만되면 이것은 정지 비트가 무엇인지, 비트 타이밍이 어떻게 작동하는지, 그리고 16x 클록이 무엇인지 명확하게합니다. 나는 대부분 정지 비트를 건너 뛰었지만 적어도 하나 이상의 정지 비트가 필요한 이유를 지금 알 수 있습니다. 기본적으로 정지 비트는 문자 사이의 최소 강제 행 유휴 시간입니다. 이것은 수신기가 문자 수신을 마치고 시작 비트의 다음 리딩 엣지를 준비하는 시간입니다. 정지 비트가 없다면, 마지막 데이터 비트는 시작 비트와 동일한 극성 일 수 있으며 수신기는 스톱워치를 시작할 에지가 없습니다.

오래 전에이 프로토콜은 캠, 레버 및 물레로 해독되었습니다. 메커니즘을 재설정하기 위해 두 개의 정지 비트가 종종 사용되었습니다. 요즘에는 모든 것이 디지털 논리로 이루어지며 1 스탑 비트는 거의 보편적으로 사용됩니다. 로우 레벨 프로토콜은 8-N-1로 약칭되어 있으며, 이는 8 데이터 비트, 패리티 비트 없음 (이것은 잊어 버리고 오늘날 거의 사용되지 않음) 및 1 정지 비트를 의미합니다. 옵션이 없으므로 시작 비트가 암시됩니다.

8-N-1을 사용하면 8 비트 바이트 데이터는 실제로 10 비트 시간이 걸립니다. 이것이 "비트 레이트"와 "보드 레이트"가 구별되는 이유 중 하나입니다. 전송 속도는 시작 및 중지 비트를 포함한 개별 비트 신호 시간을 나타냅니다. 100kBaud에서 전송되는 각 비트는 시작 및 중지 비트를 포함하여 10µs가 걸립니다. 따라서 전체 문자는 100 µs가 걸리지 만 8 비트의 실제 데이터 만 전송됩니다. 전송 속도는 100k이지만 더 높은 수준의 관점에서 데이터 전송 비트 전송률은 80kBits / s에 불과합니다.


5

전송을위한 비트 레이트는 클럭 레이트를 (일반적으로 말했듯이) 16으로 나눈 값입니다. 프레이밍 비트 (시작, 패리티, 정지)에 대한 비 데이터 비트도 있습니다. 따라서 16000Hz 클럭의 경우 초당 1000 비트를 얻지 만 최소 프레이밍 비트는 800 데이터 비트 또는 초당 100 바이트 만 삽입됩니다.

수신을 위해, 수신기는 시작 비트 16 클럭의 중간부터 카운트하고 라인이 "첫 번째 데이터 비트"를 보는 것을 호출합니다. 이 카운트를 반복하고 전체 심볼을 읽기에 충분한 시간을 샘플링 한 다음 정지 비트의 존재를 확인하고 다음 시작 비트를 기다리기 시작합니다.

수신기 클록이 송신기 클록의 속도에 가까운 한 샘플링은 전송 된 신호의 정확한 부분에 부딪칩니다.

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