UART hiện là 1 trong những giao thức truyền thông giữa thiết bị với thiết bị được sử dụng nhiều nhất trong các ứng dụng điện tử. Vậy khái niệm UART là gì? Nguyên lý hoạt động của UART và ứng dụng trong thực tế như thế nào? Cùng tìm hiểu trong bài viết dưới đây của Etinco.
UART là gì?
UART (Universal Asynchronous Receiver-Transmitter) là một giao thức truyền thông phần cứng sử dụng giao tiếp nối tiếp không đồng bộ với tốc độ có thể cấu hình. Không đồng bộ có nghĩa là không có tín hiệu đồng hồ để đồng bộ hóa đầu ra của các bit từ UART truyền đến việc lấy mẫu các bit bởi UART nhận. Thay vào đó, UART truyền thêm các bit start và stop vào gói dữ liệu được chuyển. Các bit này xác định điểm bắt đầu và điểm kết thúc của gói dữ liệu để UART nhận biết khi nào bắt đầu đọc các bit.
Bản chất không đồng bộ trên chính là nền tảng cho tính linh hoạt của UART, do các thiết bị có tốc độ xung nhịp khác nhau vẫn có thể giao tiếp hiệu quả.
Hiểu đơn giản, trong giao tiếp UART, 2 UART giao tiếp trực tiếp với nhau. UART truyền chuyển đổi dữ liệu song song từ một thiết bị điều khiển như CPU thành dạng nối tiếp, truyền nối tiếp đến UART nhận, sau đó chuyển đổi dữ liệu nối tiếp trở lại thành dữ liệu song song cho thiết bị nhận.
Hai đường dây mà mỗi thiết bị UART sử dụng để truyền dữ liệu đó là:
- Transmitter (Tx)
- Receiver (Rx)
Dữ liệu được truyền và nhận qua các đường truyền này dưới dạng khung dữ liệu có cấu trúc chuẩn, với 1 bit bắt đầu, 1 số bit dữ liệu, 1 bit kiểm tra chẵn lẻ và 1 hoặc nhiều bit dừng. Tốc độ truyền của UART được đặt ở 1 số chuẩn, ví dụ như 9600, 38400, 19200, 57600 bps & các tốc độ khác (biểu thị bằng bps – bit per second). Tốc độ truyền giữa UART truyền và nhận chỉ có thể chênh lệch khoảng 10% trước khi thời gian của các bit bị lệch quá xa, đồng thời cả hai UART cũng phải được cấu hình để truyền và nhận cùng một cấu trúc gói dữ liệu.
Truyền thông UART được sử dụng nhiều trong các ứng dụng để giao tiếp với các module như: Wifi, Bluetooth, Xbee, module đầu đọc thẻ RFID với Raspberry Pi, Arduino hoặc vi điều khiển khác. Đây cũng là chuẩn giao tiếp thông dụng và phổ biến trong công nghiệp.
Nguyên lý hoạt động của UART
UART truyền dữ liệu nhận được từ một bus dữ liệu (Data Bus) được gửi từ một thiết bị khác như CPU, bộ nhớ hoặc vi điều khiển. Dữ liệu này được truyền ở dạng song song nên sau khi truyền đến UART truyền nhận dữ liệu, UART sẽ thêm một bit start, một bit chẵn lẻ và một bit stop, tạo ra gói dữ liệu. Tiếp theo, gói dữ liệu được xuất ra nối tiếp từng bit tại chân Tx. UART nhận đọc gói dữ liệu từng bit tại chân Rx. UART nhận sau đó chuyển đổi dữ liệu trở lại dạng song song và loại bỏ bit start, bit chẵn lẻ và bit stop. Cuối cùng, UART nhận chuyển gói dữ liệu song song với bus dữ liệu ở đầu nhận.
Giao thức truyền dữ liệu nối tiếp của UART được thực hiện theo một trong ba chế độ sau đây:
- Full duplex: Giao tiếp đồng thời đến và đi từ mỗi master và slave.
- Half duplex: Dữ liệu đi theo một hướng tại một thời điểm.
- Simplex: Chỉ giao tiếp một chiều.
Dữ liệu truyền qua UART được tổ chức thành các gói. Mỗi gói chứa 1 bit bắt đầu, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), một bit chẵn lẻ tùy chọn và 1 hoặc 2 bit dừng.
Bit bắt đầu
Đường truyền dữ liệu trong giao tiếp UART thường được giữ ở mức điện áp cao khi không truyền dữ liệu. Để bắt đầu truyền dữ liệu, UART truyền sẽ kéo đường truyền từ mức cao xuống mức thấp trong một chu kỳ xung nhịp. Khi UART nhận phát hiện sự chuyển đổi điện áp cao xuống thấp sẽ bắt đầu đọc các bit trong khung dữ liệu ở tần số của tốc độ truyền (Baud rate).
Khung dữ liệu
Khung dữ liệu chứa dữ liệu thực tế đang được truyền, có thể dài từ 5 bit đến 8 bit nếu sử dụng bit Parity (bit chẵn lẻ). Nếu không sử dụng bit Parity, 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 LSB (bit có trọng số thấp nhất) trước tiên.
Bit chẵn lẻ
Bit chẵn lẻ là cách để UART nhận cho biết liệu có bất kỳ dữ liệu nào đã thay đổi trong quá trình truyền hay không. Bit có thể bị thay đổi bởi bức xạ điện từ, tốc độ truyền không khớp hoặc truyền dữ liệu khoảng cách xa.
Sau khi UART nhận đọc khung dữ liệu, 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ẻ), các bit 1 trong khung dữ liệu sẽ tổng thành 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. Nhưng nếu bit chẵn lẻ là 0 và tổng là số lẻ; hoặc bit chẵn lẻ là 1 và tổng số là chẵn, UART sẽ biết rằng các bit trong khung dữ liệu đã thay đổi.
Bit dừng
Để báo hiệu sự kết thúc của gói dữ liệu, UART gửi sẽ điều khiển đường truyền dữ liệu từ điện áp thấp đến điện áp cao trong ít nhất hai khoảng thời gian bit.
Các bước truyền UART
Bước 1: UART truyền dữ liệu song song với bus dữ liệu.
Bước 2: UART truyền dữ liệu sẽ thêm bit bắt đầu, bit chẵn lẻ và bit dừng vào khung dữ liệu.
Bước 3: Toàn bộ gói tin được gửi tuần tự bắt đầu từ bit bắt đầu đến bit dừng từ UART truyền đến UART nhận. UART nhận lấy mẫu đường dữ liệu ở tốc độ truyền được cấu hình trước.
Bước 4: UART nhận sẽ loại bỏ bit bắt đầu, bit chẵn lẻ và bit dừng khỏi khung dữ liệu.
Bước 5: UART nhận sẽ chuyển đổi dữ liệu nối tiếp trở lại thành song song và truyền dữ liệu đó đến bus dữ liệu ở đầu nhận.
Ưu, nhược điểm của truyền thông UART
Ưu điểm | Nhược điểm |
Chỉ cần dùng 2 dây truyền dữ liệu | Kích thước của khung dữ liệu giới hạn tối đa là 9 bit, khá nhỏ so với nhu cầu sử dụng |
Không cần tín hiệu clock | Không được hỗ trợ nhiều hệ thống master và slave |
Có 2 bit chẵn lẻ nên có thể kiểm tra lỗi dễ dàng | Tốc độ truyền của mỗi giao tiếp UART chỉ được chênh lệch nhau khoảng 10% |
Cấu trúc gói dữ liệu có thể thay đổi được, miễn là cả 2 UART đều được thiết lập để giao tiếp với nhau |
Ứng dụng của UART
UART được ứng dụng rộng rãi trong các ứng dụng điện tử để truyền dữ liệu giữa các thiết bị như máy tính, vi điều khiển, cảm biến,...
Giao tiếp giữa các vi xử lý và thiết bị ngoại vi
UART được sử dụng để giao tiếp giữa vi xử lý và thiết bị ngoại vi như: màn hình LCD, cảm biến, máy in, máy quét mã vạch,… giúp vi xử lý truy cập và điều khiển các chức năng của thiết bị ngoại vi.
Kết nối máy tính với thiết bị ngoại vi
Trong 1 số trường hợp, UART còn được dùng để kết nối máy tính với thiết bị ngoại vi thông qua cổng nối tiếp trên máy tính hoặc qua bộ chuyển đổi USB sang UART, cho phép máy tính giao tiếp với các thiết bị ngoại vi như: mạch Arduino, mạch phát triển, mạch Raspberry Pi,…
Truyền dữ liệu không dây
UART ngày nay được sử dụng rộng rãi trong các mô đun Bluetooth & Wifi để truyền dữ liệu không dây giữa các thiết bị. Trong trường hợp này, dữ liệu được truyền qua song radio hoặc sóng vô tuyến.
Hệ thống đo lường
UART được dùng để kết nối thiết bị đo lường với các thiết bị khác nhằm gửi dữ liệu về các thông số đo được qua UART & thiết bị nhận có thể hiển thị hoặc tiếp tục xử lý dữ liệu này.
Điều khiển robot
Các thiết bị như bộ điều khiển và các mô-đun điều khiển robot có thể sử dụng giao thức UART để gửi và nhận dữ liệu từ nhau.
Mặc dù hiện nay đã xuất hiện nhiều phương thức truyền thông mới hiện đại và nhanh chóng hơn, tuy nhiên không thể phủ nhận sự đơn giản, linh hoạt và hiệu quả của giao tiếp UART. Đây là nguyên nhân chính khiến UART trở thành lựa chọn hàng đầu cho nhiều ứng dụng điện tử.
Hy vọng kiến thức chúng tôi tổng hợp được về UART đã giúp bạn có cái nhìn tổng quan về phương thức truyền thông này. Những kiến thức khác liên quan đến ngành điện, bạn có thể tìm hiểu tại: https://etinco.vn/tin-tuc/kien-thuc/