UART (Universal Asynchronous Receiver/Transmitter) hay bộ thu phát không đồng bộ đa năng, là một trong những phương thức giao tiếp kỹ thuật số lâu đời và phổ biến nhất giữa các thiết bị điện tử. Bạn có thể tìm thấy UART trong các vi mạch tích hợp (IC) hoặc dưới dạng các thành phần độc lập. UART cho phép hai thiết bị giao tiếp với nhau thông qua một cặp dây dẫn tín hiệu và một dây nối đất chung.
Giao tiếp UART giữa 2 Arduino
UART là một giao thức giao tiếp nối tiếp linh hoạt, có thể được cấu hình để hoạt động với nhiều loại giao thức nối tiếp khác nhau. Nó được tích hợp vào các chip đơn từ những năm 1970, bắt đầu với WD1402A của Western Digital.
Mục Lục
Nguyên Lý Hoạt Động Của UART
Trong sơ đồ giao tiếp UART, chân Tx (truyền) của một chip kết nối trực tiếp với chân Rx (nhận) của chip kia và ngược lại. Thông thường, quá trình truyền dữ liệu diễn ra ở mức điện áp 3.3V hoặc 5V. UART hoạt động theo mô hình một master (chủ) và một slave (tớ), trong đó một thiết bị được thiết lập để giao tiếp duy nhất với một thiết bị khác.
Dữ liệu được truyền đến và đi từ UART song song với thiết bị điều khiển (ví dụ: CPU). Khi gửi dữ liệu trên chân Tx, UART sẽ chuyển đổi thông tin song song này thành dữ liệu nối tiếp và truyền đến thiết bị nhận. UART thứ hai nhận dữ liệu này trên chân Rx và chuyển đổi nó trở lại thành dữ liệu song song để giao tiếp với thiết bị điều khiển của nó.
UART hỗ trợ truyền dữ liệu nối tiếp theo ba chế độ:
- Full duplex (song công): Giao tiếp đồng thời theo cả hai hướng giữa master và slave.
- Half duplex (bán song công): Dữ liệu chỉ có thể đi theo một hướng tại một thời điểm.
- Simplex (đơn công): Chỉ giao tiếp một chiều.
Cấu Trúc Gói Dữ Liệu UART
Dữ liệu truyền qua UART được tổ chức thành các gói, mỗi gói bao gồm:
- Bit bắt đầu (Start bit): Báo hiệu bắt đầu truyền dữ liệu.
- Khung dữ liệu (Data frame): Chứa dữ liệu thực tế, từ 5 đến 9 bit.
- Bit chẵn lẻ (Parity bit) (tùy chọn): Dùng để kiểm tra lỗi trong quá trình truyền.
- Bit dừng (Stop bit): Báo hiệu kết thúc gói dữ liệu.
Cấu trúc gói dữ liệu UART
Bit Bắt Đầu
Trong trạng thái không truyền dữ liệu, đường truyền UART thường ở mức điện áp cao. Để bắt đầu truyền, UART truyền sẽ kéo đường truyền từ mức cao xuống mức thấp trong một chu kỳ clock. Khi UART nhận phát hiện sự chuyển đổi điện áp này, nó bắt đầu đọc các bit trong khung dữ liệu ở tần số tương ứng với tốc độ truyền (baud rate).
Khung Dữ Liệu
Khung dữ liệu chứa dữ liệu thực tế được truyền. Độ dài của khung dữ liệu có thể từ 5 đến 8 bit nếu sử dụng bit chẵn lẻ. Nếu không sử dụng bit chẵn lẻ, khung dữ liệu có thể dài 9 bit. Trong hầu hết các trường hợp, dữ liệu được gửi với bit ít quan trọng nhất (LSB – Least Significant Bit) trước tiên.
Bit Chẵn Lẻ
Bit chẵn lẻ là một phương pháp để UART nhận kiểm tra xem dữ liệu có bị thay đổi trong quá trình truyền hay không. Các bit có thể bị thay đổi do nhiễu điện từ, tốc độ truyền không khớp hoặc truyền dữ liệu trên khoảng cách xa. Sau khi UART nhận đọc khung dữ liệu, nó sẽ đếm số bit có giá trị là 1 và kiểm tra xem tổng số là số chẵn hay lẻ.
Nếu bit chẵn lẻ là 0 (tính chẵn), thì tổng các bit 1 trong khung dữ liệu phải là một số chẵn. Nếu bit chẵn lẻ là 1 (tính lẻ), tổng các bit 1 trong khung dữ liệu phải là một số lẻ. Khi bit chẵn lẻ khớp với dữ liệu, UART sẽ biết rằng quá trình truyền không có lỗi. Ngược lại, nếu bit chẵn lẻ không khớp, UART sẽ biết rằng dữ liệu đã bị thay đổi.
Bit Dừng
Để báo hiệu sự kết thúc của gói dữ liệu, UART truyền sẽ điều khiển đường truyền dữ liệu từ điện áp thấp lên điện áp cao trong khoảng thời gian tương ứng với ít nhất 1 hoặc 2 bit.
Tóm Tắt Quá Trình Truyền Dữ Liệu UART
Quá trình truyền dữ liệu UART diễn ra dưới dạng các gói dữ liệu, bắt đầu bằng một bit bắt đầu (kéo đường truyền từ mức cao xuống mức thấp). Tiếp theo là khung dữ liệu chứa từ 5 đến 9 bit dữ liệu, sau đó là bit chẵn lẻ tùy chọn để kiểm tra tính toàn vẹn của dữ liệu. Cuối cùng, một hoặc nhiều bit dừng được truyền để báo hiệu kết thúc gói dữ liệu (đường truyền ở mức cao).
Tốc Độ Truyền (Baud Rate)
UART là giao thức không đồng bộ, có nghĩa là không có đường clock chung để điều chỉnh tốc độ truyền dữ liệu. Do đó, người dùng phải cấu hình cả hai thiết bị (truyền và nhận) để giao tiếp ở cùng một tốc độ, được gọi là tốc độ truyền (baud rate), tính bằng bit trên giây (bps). Tốc độ truyền có thể thay đổi đáng kể, từ 9600 baud đến 115200 baud hoặc cao hơn.
Sự khác biệt về tốc độ truyền giữa UART truyền và nhận chỉ được phép trong khoảng 10% trước khi xảy ra lỗi do sai lệch thời gian của các bit.
Ưu Điểm và Nhược Điểm Của UART
Mặc dù là một giao thức cũ, UART vẫn được sử dụng rộng rãi nhờ tính đơn giản và linh hoạt của nó. Dưới đây là một số ưu điểm và nhược điểm của UART:
Ưu Điểm
- Chỉ sử dụng hai dây dẫn để truyền dữ liệu.
- Không yêu cầu tín hiệu clock.
- Có bit chẵn lẻ để kiểm tra lỗi.
- Cấu trúc gói dữ liệu có thể được tùy chỉnh (số bit dữ liệu, bit chẵn lẻ, bit dừng).
- Được sử dụng rộng rãi và có nhiều tài liệu hỗ trợ.
- Dễ dàng thiết lập và cấu hình.
Nhược Điểm
- Kích thước khung dữ liệu bị giới hạn tối đa 9 bit.
- Không hỗ trợ nhiều slave hoặc nhiều master.
- Tốc độ truyền của các UART phải tương đồng (trong khoảng 10%).
- Phạm vi giao tiếp bị giới hạn so với các giao thức khác.
Ứng Dụng Của UART
UART thường được sử dụng trong các dự án vi điều khiển và giao tiếp giữa các thiết bị điện tử khác nhau, bao gồm:
- Kết nối máy tính với các thiết bị ngoại vi (ví dụ: máy in, modem).
- Giao tiếp giữa các module trong hệ thống nhúng.
- Truyền dữ liệu từ cảm biến đến bộ xử lý.
- Debug và lập trình vi điều khiển.
Mặc dù UART có thể là một phần của hệ thống mà bạn sử dụng hàng ngày mà không nhận ra, nhưng nó vẫn là một công cụ giao tiếp mạnh mẽ và linh hoạt trong lĩnh vực điện tử.