Làm thế nào để hai UARTS biết tốc độ baud nào sẽ sử dụng?


14

Tôi đang đọc về giao thức chuẩn cho UART và tôi nghĩ rằng nếu UART nhận không có bất kỳ ý tưởng nào về tốc độ truyền dữ liệu được truyền đi, sẽ có rất nhiều vấn đề. Nếu tốc độ baud giả định thấp hơn tốc độ baud mà dữ liệu được truyền đi, sẽ có các bit sẽ không được 'nhìn thấy' bởi UART nhận. Mặt khác, nếu tốc độ baud được sử dụng bởi người nhận cao hơn tốc độ baud mà dữ liệu được truyền đi, sẽ có các bit sẽ được tính hai lần và dẫn đến dữ liệu bị 'đọc' không chính xác.

Kiến thức của tôi xung quanh UART là khi dòng không hoạt động, nó được giữ ở mức '1', bit Bắt đầu là '0' và bit Dừng là '1'. Ngoài ra, bit Stop là '1' không có bất kỳ sự khác biệt nào với '1' khi dòng không hoạt động hoặc có cách nào để phân biệt?

Hai người giao tiếp đầu tiên của UART có đồng ý về tốc độ truyền nào họ sẽ sử dụng không? Nếu có, làm thế nào để họ làm điều đó?


"Bit dừng" cũng có thể được gọi là "trở về trạng thái không hoạt động", nhưng bằng cách làm cho nó một chút, nó có độ dài tối thiểu xác định, nhưng sau thời gian tối thiểu được đảm bảo đó, dòng sẽ vẫn ở trạng thái "1" cho đến khi nhân vật tiếp theo đi cùng.
Peter Bennett

Họ có thể ngẫu nhiên thay đổi tốc độ truyền thông thường cho đến khi một cái gì đó hoạt động XD.
Bradman175

3
Hayes đã khởi xướng một cách để cho UART trong các modem của chúng thiết lập tốc độ truyền giống như thiết bị đầu cuối nói chuyện với nó bằng cách sử dụng một chuỗi ký tự 'AT' khi bắt đầu các lệnh của chúng. Điều này thường không được giải mã bởi UART, nhưng bởi phần sụn thời gian thực sau đó sẽ cấu hình UART để nhận phần còn lại của dòng lệnh. Về cơ bản, nó đã phát hiện ra chiều rộng của bit start và cách đặt chẵn lẻ.
vào

@infix Vì vậy, nếu tôi có kế hoạch sửa đổi hoặc tạo mã Verilog cho UART, tôi có thể làm cho nó để nó phát hiện chuỗi 'AT' này và điều chỉnh tốc độ truyền của nó từ đó không? Tôi đã nghĩ đến việc khởi tạo nó ở tốc độ truyền cao nhất để nó nắm bắt mọi thứ và từ đó, tìm chuỗi 'AT'.
Batibot323

Một giao thức truyền thông dựa trên UART (được đặt tên là LIN) có thể thấy rất nhiều trong ngành công nghiệp ô tô có cơ chế phát hiện tự động baud, nhưng các nút chủ và nút phụ "phải khớp" về độ dài dữ liệu và độ dài bit dừng. Có nghĩa là, chỉ phát hiện tốc độ baud là không đủ.
Rohat Kılıç

Câu trả lời:


26

Các UART thông thường phải được cấu hình sẵn với tốc độ truyền mong muốn (cũng như độ dài từ, bit dừng, chẵn lẻ, v.v.) theo truyền thống của một người.

Trong nhiều thập kỷ nay, mặc dù đã có các triển khai phát hiện "baud tự động" được tìm thấy trong một số cài đặt, thường hoạt động bằng cách định thời các tính năng chính của dạng sóng để suy ra tốc độ truyền. Các phiên bản ban đầu cần một ký tự đã biết được truyền đi, nhưng các phiên bản tinh vi hơn có thể có thể tìm thấy tốc độ từ dữ liệu tùy ý hơn.

Một UART nhận thường có đồng hồ cục bộ chạy với tốc độ nhanh hơn - thường gấp 8 hoặc 16 lần tốc độ truyền. Điều này được sử dụng để lấy mẫu tín hiệu đến và phát hiện các bit trong một từ theo cách có thể chịu được một vài phần trăm lỗi. Ngay cả hai bộ tạo dao động tinh thể cũng không khớp với tốc độ một cách hoàn hảo, nhưng khả năng chịu lỗi có thể cho phép sử dụng một số nguồn kém chính xác hơn, đôi khi bao gồm cả bộ dao động trên chip, v.v. Nó cũng có thể giúp điều chỉnh thực tế rằng việc phân chia tần số dao động phổ biến chỉ có thể tạo ra một xấp xỉ không chính xác với tốc độ baud nhất định - vào thời xưa, đồng hồ chủ UART đôi khi cần tần số cụ thể để truy cập tốc độ baud phổ biến, ví dụ 11.0592 MHz trên họ 8051.


2
Giả thuyết của tôi về phát hiện baud tự động có thể là một bộ đếm thời gian và bộ đếm hoạt động đồng thời để tìm các cạnh và thời gian giữa các cạnh?
ammar.cma

1
Vấn đề là không có thuật toán nào có thể có dạng sóng "uart serial" tùy ý và xác định lại baudrate một cách ngẫu nhiên. Bạn có thể tìm thấy thời gian tối thiểu giữa các lần chuyển đổi đủ dễ dàng nhưng điều đó không đại diện cho một khoảng thời gian duy nhất.
Peter Green

Một thuật toán tồn tại (tôi đã nghe nói nó được gọi là "tự động bẻ khóa" ở nhiều nơi) nhưng khi được triển khai trong phạm vi giới hạn tài nguyên của chip UART, đôi khi cách duy nhất để thực hiện là sử dụng một số dữ liệu đã gửi và sử dụng nó để hiệu chuẩn sẽ tồn tại trong phần còn lại của phiên. Điều này thường không được mong muốn. Nếu được thực hiện trong phần mềm và cho phép một chút độ trễ thì việc thực hiện điều này mà không tốn dữ liệu (bằng cách lưu trữ tạm thời để phân tích) ít nhất là cho các comms tốc độ thấp (dưới 200KB / giây). Tốc độ cao hơn gặp khó khăn hơn nữa.
Wossname

8

Hai UARTS "đồng ý" về tốc độ baud bằng tài liệu và do người vận hành / người dùng thiết lập tốc độ baud bằng tay, bao gồm giao thức bắt tay, kích thước bit dừng, v.v.


1
..... cho cả hai đầu của giao diện.
Michael Karas

2

Phải, mọi thứ đều được thiết lập thủ công, điều này thường gây ra một chút khó khăn, đặc biệt là khi các hệ thống được ghi chép kém (Tôi đang nhìn vào bạn, mọi hệ thống nhúng từng có).

Tôi biết USB, SATA và hầu hết các giao thức dữ liệu hiện đại khác bắt đầu sau một số sự kiện thiết lập lại hoặc khởi tạo ở tốc độ thấp nhất với một số cấu hình mặc định được tiêu chuẩn hóa và đàm phán với mọi người khác (hoặc chỉ là chủ, tùy thuộc vào giao thức) với tốc độ cao hơn . Một số cũng sử dụng điện trở kéo lên hoặc kéo xuống trên đường dữ liệu / nguồn của chúng để biểu thị tốc độ được hỗ trợ.

Xem trang web này về đàm phán USB nếu bạn muốn tìm hiểu thêm một chút về các giao thức khác.

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.