Tốc độ đồng hồ nhận UART


14

Tôi đã cố gắng để hiểu các nguyên tắc cơ bản của UART. Nó được hiểu rằng

  • Đó là một giao thức truyền thông không đồng bộ và do đó đồng hồ TX và RX độc lập với nhau
  • Việc nhận dữ liệu được đảm bảo bằng việc sử dụng bit start và một hoặc nhiều bit stop. Thông thường, người nhận phải nhận thức được tốc độ dữ liệu để tạo đồng hồ phù hợp để điều khiển thanh ghi SIPO được sử dụng để nhận.

Các câu hỏi ở đây là

Nó được đề cập rằng thông thường một đồng hồ 16X tốc độ bit được sử dụng để khôi phục dữ liệu. Vậy làm thế nào để chuyển đổi bps sang tần số đồng hồ có thể? Vui lòng cung cấp cho tôi một số tài liệu tham khảo để nghiên cứu cơ chế đồng hồ được sử dụng trong bộ thu UART.

Câu trả lời:


18

Đồng hồ máy phát và máy thu độc lập với nhau, theo cách chúng được tạo độc lập, nhưng chúng phải được kết hợp tốt để đảm bảo truyền đúng.

T0T0T0×T0là cạnh rơi của bit start. Trong khi lấy mẫu bit bắt đầu không thực sự cần thiết (bạn biết nó thấp) thật hữu ích để xác định rằng cạnh bắt đầu không phải là một đột biến.

nhập mô tả hình ảnh ở đây

×

Nếu tôi nhớ lại chính xác, 68HC11 đã lấy một vài mẫu ở đầu, ở giữa và cuối một chút, đầu tiên và cuối cùng có lẽ sẽ đồng bộ lại nếu có thay đổi cấp độ (không được đảm bảo).

Đồng hồ lấy mẫu không xuất phát từ tốc độ bit, nó ngược lại. Đối với 9600 bps, bạn sẽ phải đặt đồng hồ lấy mẫu thành 153 600 Hz, bạn sẽ lấy được thông qua bộ đếm trước từ tần số xung nhịp của vi điều khiển. Sau đó, đồng hồ bit được bắt nguồn từ đó bởi một phân chia khác bởi 16.

đồng hồ chưa từng có
Đây là điều sẽ xảy ra nếu đồng hồ của người nhận không đồng bộ với máy phát:

nhập mô tả hình ảnh ở đây

Đồng hồ của máy thu chậm 6,25% và bạn có thể thấy rằng việc lấy mẫu cho mỗi bit tiếp theo sẽ muộn hơn và muộn hơn. Một truyền UART thông thường bao gồm 10 bit: 1 bit start, tải trọng 8 bit dữ liệu và 1 bit stop. Sau đó, nếu bạn lấy mẫu ở giữa một bit, bạn có thể đủ khả năng để giảm một nửa ở bit cuối cùng, bit stop. Một nửa bit trên mười bit là 5%, vì vậy với độ lệch 6,25% của chúng tôi, chúng tôi sẽ gặp vấn đề. Điều đó thể hiện rõ trong hình: đã có ở bit dữ liệu thứ ba mà chúng ta đang lấy mẫu gần rìa.


Tôi đánh giá cao sự giúp đỡ. Cảm ơn !! Không nên lấy mẫu bit bắt đầu ở T0 + 104us thay vì T0 + 52us?
Vivek Maran

1
@ Vivek27 - không, bởi vì 104 chúng tôi là thời lượng của bit start, và sau đó bạn sẽ lấy mẫu ở cuối của nó, thay vì ở giữa. Nếu bạn cho tôi vài phút tôi sẽ cập nhật hình ảnh của tôi. :-)
stevenvh

1
@Vivek: Thật ra bit start không thực sự "được lấy mẫu" chút nào. Toàn bộ mục đích của nó là cung cấp sự chuyển đổi ban đầu từ dòng nhàn rỗi mà phần còn lại của nhân vật được tính thời gian so với. "Giá trị" của nó luôn ở trạng thái không hoạt động và không chứa dữ liệu.
Olin Lathrop

7
@Olin - Tôi sẽ lấy mẫu bit bắt đầu, chỉ để kiểm tra xem cạnh bắt đầu không phải là một đột biến.
stevenvh

1
@downvoter - Nếu bạn cho chúng tôi biết có gì sai ở đây, tôi có thể sửa nó. Nhưng sau đó bạn phải nói với chúng tôi điều gì đó . (Bạn có phải là người cũng đánh giá thấp câu trả lời khác của tôi ngày hôm nay không?)
stevenvh

11

Hãy lùi lại một chút và nói về giao thức báo hiệu mức thấp được sử dụng bởi UARTs. TX và RX là các dòng dữ liệu, không phải đồng hồ. Các đồng hồ chỉ ở bên trong mỗi UART, đó là lý do tại sao phải có thỏa thuận trước về tốc độ truyền.

Khi không truyền được dòng còn lại ở trạng thái không hoạt động. Để truyền một byte (ví dụ, độ rộng dữ liệu khác là có thể), đầu tiên máy phát sẽ gửi bit start . Máy thu sử dụng thời gian của cạnh đầu của bit start và tốc độ truyền đã biết để sau đó giải mã phần còn lại của ký tự. Hãy nói đơn giản rằng 100 kBaud đang được sử dụng. Điều đó có nghĩa là mỗi bit thời gian dài 10 lần. Điều này bao gồm bit start, bit dữ liệu và bit stop. Do đó, phần giữa của bit dữ liệu đầu tiên sẽ ở mức 15 sau khi cạnh đầu của bit bắt đầu, phần thứ hai ở 25 Lời, v.v.

Miễn là đồng hồ máy thu và máy phát giống nhau, điều này có thể diễn ra mãi mãi. Tuy nhiên, chúng sẽ không bao giờ giống hệt nhau nên nó không thể tiếp tục mãi mãi. Để cho phép đồng bộ hóa lại đồng hồ của máy thu với đồng hồ của máy phát, ký tự dữ liệu kết thúc, dòng không hoạt động một chút, sau đó quá trình được lặp lại. Lỗi thời gian tích lũy bắt đầu từ cạnh đầu của bit start, do đó độ trôi tối đa là ở bit cuối cùng. Khi ký tự đó kết thúc, người nhận đặt lại chờ bit bắt đầu tiếp theo và quá trình lặp lại.

Với 8 bit dữ liệu, trường hợp xấu nhất về thời gian là lấy mẫu bit cuối cùng. Đó là 8,5 bit lần so với tham chiếu thời gian, là cạnh hàng đầu của bit start. Nếu máy thu bị tắt 1/2 bit trở lên thì nó sẽ lấy mẫu bit cuối cùng trong một bit khác. Rõ ràng đó là xấu. Điều này xảy ra ở tần số xung nhịp không đúng 1/2 bit trong 8 1/2 bit, tương đương 5,9%. Đó là sự đảm bảo để không phù hợp. Về độ tin cậy, bạn thường muốn đảm bảo máy thu khớp với máy phát trong vòng một nửa, hoặc 2,9%. Điều đó thể hiện lỗi thời gian 1/4 bit ở bit cuối cùng.

Tuy nhiên, nó không hoàn toàn đơn giản. Trong kịch bản được mô tả ở trên, máy thu về cơ bản bắt đầu một đồng hồ bấm giờ ở cạnh đầu của bit start. Về lý thuyết điều đó có thể được thực hiện trong các thiết bị điện tử tương tự, nhưng điều đó sẽ phức tạp và tốn kém và không dễ tích hợp vào các chip kỹ thuật số. Thay vào đó, hầu hết các triển khai UART kỹ thuật số có đồng hồ bên trong chạy ở tốc độ bit dự kiến ​​16 lần. "Đồng hồ bấm giờ" sau đó đếm các chu kỳ 16x này. Điều đó có nghĩa là có một lỗi có thể xảy ra là 1/16 bit được thêm vào tất cả các lần lấy mẫu bit, giống như một lỗi không khớp khác .7% ở bit cuối cùng.

Hy vọng rằng điều này cho thấy rõ bit stop là gì, thời gian bit hoạt động như thế nào và đồng hồ 16x là gì. Tôi chủ yếu bỏ qua các bit stop, nhưng có lẽ bạn có thể tự mình nhìn thấy tại sao cần ít nhất một bit stop. Về cơ bản, các bit dừng là thời gian nhàn rỗi được thực thi tối thiểu giữa các ký tự. Đây là thời gian mà người nhận đã hoàn thành việc nhận một ký tự và sẵn sàng cho cạnh đầu tiếp theo của bit start. Nếu không có bit stop, thì bit dữ liệu cuối cùng có thể có cùng cực với bit start và bộ thu sẽ không có cạnh để khởi động đồng hồ bấm giờ.

Từ lâu, giao thức này đã được giải mã bằng cam, đòn bẩy và bánh xe quay. Hai bit stop thường được sử dụng để cho phép cơ chế thiết lập lại. Ngày nay, mọi thứ đều được thực hiện theo logic kỹ thuật số và 1 bit stop được sử dụng khá phổ biến. Bạn thường thấy giao thức cấp thấp được viết tốc ký là 8-N-1, nghĩa là 8 bit dữ liệu, không có bit chẵn lẻ (hãy quên đi, chúng hiếm khi được sử dụng ngày nay) và 1 bit stop. Bit bắt đầu được ngụ ý vì không có tùy chọn ở đó.

Sử dụng 8-N-1, một byte dữ liệu 8 bit thực sự mất 10 lần để gửi. Đây là một lý do có sự phân biệt giữa "tốc độ bit" và "tốc độ truyền". Tốc độ Baud đề cập đến thời gian báo hiệu bit riêng lẻ, bao gồm các bit start và stop. Ở tốc độ 100 kBaud, mỗi bit được truyền sẽ mất 10 bit, bao gồm các bit bắt đầu và dừng. Do đó, toàn bộ nhân vật mất 100 mật khẩu, nhưng chỉ có 8 bit dữ liệu thực được truyền. Tốc độ truyền là 100 k, nhưng tốc độ bit truyền dữ liệu theo quan điểm của các mức cao hơn chỉ là 80 kBits / s.


5

Tốc độ bit để truyền là tốc độ xung nhịp chia cho (như bạn nói, thông thường) 16. Bạn cũng có một số bit không dữ liệu cho các bit khung (bắt đầu, chẵn lẻ, dừng). Vì vậy, đối với đồng hồ 16000Hz, bạn nhận được 1000 bit mỗi giây, nhưng sau khi các bit khung tối thiểu được chèn chỉ có 800 bit dữ liệu hoặc 100 byte mỗi giây.

Để nhận, người nhận đếm từ giữa đồng hồ bit bắt đầu 16 và lấy mẫu dòng gọi là "bit dữ liệu đầu tiên". nó lặp lại số đếm này và lấy mẫu đủ số lần để đọc toàn bộ ký hiệu, sau đó xác nhận sự hiện diện của bit stop và bắt đầu chờ bit bắt đầu tiếp theo.

Miễn là đồng hồ thu gần với tốc độ của đồng hồ máy phát, việc lấy mẫu sẽ đạt đúng các phần của tín hiệu truyền.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.