Giao tiếp UART là gì? Cách thức hoạt động, ưu nhược điểm và các ứng dụng
Nội dung chính [Hiện]
Giao thức UART (Universal Asynchronous Receiver/Transmitter) là một giao thức truyền thông đồng bộ bán song song giữa hai thiết bị. Giao thức này được sử 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ư vi điều khiển, máy tính, cảm biến và thiết bị ngoại vi khác.
Chuẩn giao tiếp UART hoạt động theo cơ chế truyền dữ liệu bất đồng bộ (asynchronous), tức là không có một tín hiệu đồng hồ chung giữa hai thiết bị để đồng bộ việc truyền nhận dữ liệu. Thay vào đó, giao thức UART sử dụng hai tín hiệu riêng biệt là RX (Receiver) và TX (Transmitter) để truyền và nhận dữ liệu giữa các thiết bị.
Giao thức UART đảm bảo tính tin cậy và hiệu quả trong truyền thông dữ liệu bằng cách sử dụng các bit stop và bit parity. Bit stop được sử dụng để đảm bảo rằng dữ liệu được truyền hết, trong khi bit parity được sử dụng để kiểm tra lỗi truyền thông. Giao thức này có thể được sử dụng với nhiều tốc độ truyền khác nhau, từ vài baud đến hàng trăm baud. Với tốc độ truyền dữ liệu cao hơn, các giao thức truyền thông đồng bộ khác như SPI hay I2C thường được sử dụng thay thế UART.
Xem thêm: Tìm hiểu về mạch điện tử PCB
Tổng quát lại, UART là một giao thức truyền thông đơn giản và hiệu quả, được sử 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ị.
Giao tiếp UART là gì?
UART là viết tắt của "Universal Asynchronous Receiver/Transmitter", là một giao thức truyền thông không đồng bộ (Asynchronous) được sử dụng để truyền dữ liệu giữa các thiết bị điện tử, chẳng hạn như vi điều khiển (microcontroller), cảm biến, module truyền thông và các thiết bị khác.
Giao thức UART đơn giản và phổ biến, gồm hai đường truyền dữ liệu độc lập là TX (truyền) và RX (nhận). Dữ liệu được truyền và nhận qua các khung dữ liệu chuẩn, bao gồm start bit, số bit dữ liệu, parity bit và stop bit. Tốc độ truyền của UART được đặt theo chuẩn như 9600, 19200, 38400, 57600, 115200 baud và các tốc độ khác. Tốc độ truyền này xác định số lượng bit truyền mỗi giây. Các tốc độ truyền khác nhau thường được sử dụng tùy thuộc vào ứng dụng và hệ thống sử dụng.
UART được sử dụng rộng rãi trong các ứng dụng như truyền thông dữ liệu giữa các thiết bị nhúng, điều khiển động cơ, truyền thông không dây, v.v.
Cách thức hoạt động của UART
UART hoạt động theo cơ chế truyền và nhận thông tin dữ liệu dưới dạng các chuỗi bít (bits) qua các đường truyền tương tự (UART chỉ được sử dụng trên kênh truyền tương tự). Cụ thể, khi một thiết bị gửi một tin nhắn, nó sẽ chuyển đổi dữ liệu thành một chuỗi bít và gửi qua đường truyền. Thiết bị nhận sẽ tiếp nhận các chuỗi bít đó, tách nó thành các ký tự (nếu được gửi với ký tự), và sau đó xử lý thông tin được gửi.
UART sử dụng một tín hiệu đồng hồ chung giữa thiết bị gửi và thiết bị nhận để đồng bộ hóa quá trình truyền và nhận dữ liệu. Khi các thiết bị không đồng bộ, ví dụ như khi chuyển từ trạng thái gửi sang trạng thái nhận, UART sử dụng một tín hiệu đặc biệt gọi là "start bit" để đồng bộ hóa quá trình. Sau khi nhận được "start bit", thiết bị nhận sẽ đọc các bit tiếp theo và đảm bảo chúng tuân theo định dạng được xác định trước (bao gồm số bit dữ liệu, bit stop và các tham số khác).
Khi truyền dữ liệu, thiết bị gửi sẽ đợi cho tín hiệu đồng hồ phát sinh, sau đó chuyển đổi các bit dữ liệu thành các mức tín hiệu điện tương ứng trên đường truyền. Khi gửi xong các bit, thiết bị gửi sẽ đặt tín hiệu trên đường truyền ở trạng thái cao (hoặc thấp, tuỳ thuộc vào thiết kế), và thiết bị nhận sẽ đọc bit stop này để xác định kết thúc quá trình truyền.
Trong UART, tốc độ truyền dữ liệu được đo bằng baud rate, tức là số lần mỗi giây tín hiệu được thay đổi trên đường truyền. Baud rate càng cao thì tốc độ truyền dữ liệu càng nhanh, nhưng cũng đòi hỏi nhiều tài nguyên hệ thống hơn.
Trong giao thức UART, có ba chế độ truyền dữ liệu khác nhau:
-
Chế độ đồng bộ (Synchronous mode): Trong chế độ này, các thiết bị truyền và nhận dữ liệu phải được đồng bộ hóa với nhau. Điều này đòi hỏi sự trao đổi thông tin trước đó để các bên có thể điều chỉnh tốc độ truyền và đồng bộ hóa với nhau.
-
Chế độ không đồng bộ (Asynchronous mode): Đây là chế độ được sử dụng phổ biến nhất trong giao thức UART. Trong chế độ này, mỗi khung dữ liệu được gửi với một khoảng thời gian cố định giữa các bit, được gọi là bit đồng bộ hóa. Không cần trao đổi trước đó giữa các thiết bị để điều chỉnh tốc độ truyền.
-
Chế độ đa chủ (Multi-drop mode): Trong chế độ này, nhiều thiết bị có thể chia sẻ cùng một đường truyền và truyền thông với nhau. Mỗi thiết bị được định danh bằng một địa chỉ duy nhất, và các thiết bị khác sẽ bỏ qua các khung dữ liệu được gửi đến địa chỉ không phù hợp.
Mỗi chế độ truyền dữ liệu có ưu điểm và hạn chế riêng, và sẽ phù hợp hơn với các ứng dụng khác nhau. Chế độ không đồng bộ được sử dụng rộng rãi trong các ứng dụng như truyền thông dữ liệu với các thiết bị nhúng và cảm biến, trong khi chế độ đồng bộ được sử dụng trong các ứng dụng truyền tải dữ liệu trên khoảng cách xa hơn và đòi hỏi độ chính xác cao hơn. Chế độ đa chủ được sử dụng trong các ứng dụng liên lạc truyền thông giữa nhiều thiết bị trên một mạng.
Trong một sơ đồ giao tiếp UART:
Giao thức UART là một giao thức đơn giản và phổ biến trong việc truyền và nhận dữ liệu giữa hai thiết bị, với 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, tín hiệu truyền qua UART sử dụng các mức điện áp 3.3V hoặc 5V.
UART hoạt động dưới dạng một master (thiết bị điều khiển) và một slave (thiết bị nhận). Một thiết bị được cấu hình để giao tiếp chỉ với một thiết bị khác.
Dữ liệu được truyền và nhận qua UART theo nguyên tắc song song với thiết bị điều khiển. Khi tín hiệu được gửi trên chân Tx, UART đầu tiên sẽ chuyển đổi nó từ dạng song song sang dạng nối tiếp và truyền đến thiết bị nhận. Chân Rx của UART thứ hai sẽ chuyển đổi nó trở lại dạng song song để giao tiếp với thiết bị điều khiển.
Dữ liệu truyền qua UART được đóng gói thành các khung dữ liệu (data frame). Mỗi khung dữ liệu bao gồm một bit bắt đầu (start bit), một số bit dữ liệu (tùy thuộc vào đặc điểm của UART, có thể là 5 bit, 8 bit hoặc 9 bit), một bit kiểm tra chẵn lẻ (parity bit) tùy chọn, và một hoặc hai bit dừng (stop bit). Cấu trúc của gói dữ liệu được mô tả như hình vẽ ở bên dưới.
| Start bit | Data bits | Parity bit | Stop bit(s) |
Bit bắt đầu
Trong giao thức UART, bit bắt đầu (start bit) là một bit đặc biệt để báo hiệu cho bộ thu biết rằng một khung dữ liệu (data frame) sắp được truyền. Bit bắt đầu luôn có giá trị logic 0 và có thể được kết nối với các tín hiệu trên mạch như DTR (Data Terminal Ready) hoặc RTS (Request to Send) để điều khiển truyền dữ liệu.
Sau khi bit bắt đầu được gửi, các bit dữ liệu được truyền theo đúng thứ tự từ bit thấp nhất đến bit cao nhất, sau đó là bit chẵn lẻ (parity bit) tùy chọn và một hoặc hai bit dừng (stop bit). Các bit dừng có giá trị logic 1 và giúp đồng bộ hóa tín hiệu trên mạch giữa bộ truyền và bộ nhận.
Khung dữ liệu
Trong giao thức UART, khung dữ liệu (data frame) là một chuỗi các bit dữ liệu được truyền qua kết nối UART giữa bộ truyền và bộ nhận. Khung dữ liệu bao gồm các thành phần sau:
-
Bit bắt đầu (start bit): Đây là một bit có giá trị logic 0 được gửi trước khi truyền khung dữ liệu để báo hiệu bắt đầu của khung dữ liệu.
-
Bit dữ liệu: Các bit này chứa thông tin dữ liệu được truyền qua kết nối UART.
-
Bit chẵn lẻ (parity bit): Đây là một bit được sử dụng để kiểm tra lỗi dữ liệu. Bit này có thể có giá trị logic 0 hoặc 1, tùy thuộc vào cách xác định lỗi được chọn.
-
Bit dừng (stop bit): Đây là một hoặc hai bit có giá trị logic 1 được gửi sau khi truyền khung dữ liệu để đồng bộ hóa tín hiệu trên mạch giữa bộ truyền và bộ nhận.
Kích thước của khung dữ liệu UART phụ thuộc vào cài đặt UART cụ thể được sử dụng. Các kích thước phổ biến bao gồm 7 bit dữ liệu và một bit chẵn lẻ hoặc lẻ, hoặc 8 bit dữ liệu và không có bit chẵn lẻ hoặc lẻ.
Bit chẵn lẻ
Trong giao thức UART, bit chẵn lẻ (parity bit) là một bit được sử dụng để kiểm tra lỗi dữ liệu trong quá trình truyền. Bit chẵn lẻ hoặc lẻ được tính toán bằng cách đếm số bit có giá trị logic 1 trong khung dữ liệu. Nếu số bit có giá trị logic 1 là số lẻ, bit chẵn lẻ sẽ được đặt thành giá trị logic 1 để đảm bảo rằng tổng số bit có giá trị logic 1 trong khung dữ liệu là số chẵn. Nếu số bit có giá trị logic 1 là số chẵn, bit chẵn lẻ sẽ được đặt thành giá trị logic 0.
Khi bộ nhận nhận được khung dữ liệu, nó sẽ tính toán lại bit chẵn lẻ hoặc lẻ từ khung dữ liệu và so sánh với giá trị của bit chẵn lẻ hoặc lẻ được truyền trong khung dữ liệu. Nếu giá trị tính toán của bit chẵn lẻ hoặc lẻ khác với giá trị được truyền, bộ nhận sẽ báo lỗi.
Việc sử dụng bit chẵn lẻ hoặc lẻ không bắt buộc trong giao thức UART, và nó có thể được tắt hoặc bật tùy thuộc vào cài đặt UART cụ thể được sử dụng.
Bit dừng trong giao tiếp UART
Trong giao thức UART, bit dừng (stop bit) là một hoặc hai bit có giá trị logic 1 được gửi sau khi truyền khung dữ liệu để đồng bộ hóa tín hiệu trên mạch giữa bộ truyền và bộ nhận.
Sau khi truyền các bit dữ liệu và bit chẵn lẻ hoặc lẻ, bit dừng được sử dụng để đánh dấu kết thúc của một khung dữ liệu và cho phép bộ nhận sẵn sàng để tiếp nhận khung dữ liệu tiếp theo. Khi bộ nhận nhận được một bit dừng, nó sẽ chuyển đổi sang chế độ chờ đợi để nhận khung dữ liệu tiếp theo.
Kích thước của bit dừng phụ thuộc vào cài đặt UART cụ thể được sử dụng, thường là một hoặc hai bit dừng. Bit dừng thêm vào khung dữ liệu một khoảng thời gian nhỏ để đảm bảo bộ nhận có đủ thời gian để xử lý các bit dữ liệu trước khi bắt đầu nhận khung dữ liệu mới.
Việc sử dụng một hoặc hai bit dừng phụ thuộc vào tốc độ truyền dữ liệu và cài đặt UART. Với tốc độ truyền dữ liệu cao, sử dụng hai bit dừng có thể giúp tăng độ chính xác của dữ liệu truyền đi. Tuy nhiên, đôi khi chỉ sử dụng một bit dừng cũng đủ để đảm bảo tính chính xác của dữ liệu truyền đi.
Những ưu điểm và nhược điểm của UART
Dưới đây là một số ưu điểm và nhược điểm của UART
Ưu điểm của UART:
-
Tính tương thích cao: UART được sử dụng rộng rãi trong vi mạch điện tử bởi vì nó có tính tương thích cao với các giao thức truyền thông khác. Nó có thể hoạt động trên các tốc độ truyền khác nhau và có thể được sử dụng để truyền dữ liệu giữa các thiết bị khác nhau.
-
Tiết kiệm chi phí: UART là một thành phần điện tử đơn giản và rẻ tiền. Nó có thể được tích hợp vào nhiều loại vi mạch khác nhau và không đòi hỏi nhiều tài nguyên tính toán.
-
Độ tin cậy cao: UART được sử dụng phổ biến trong các ứng dụng điện tử bởi vì nó đơn giản và có độ tin cậy cao. Nó thường được sử dụng trong các ứng dụng như đọc cảm biến, điều khiển máy in, máy tính và các thiết bị điện tử khác.
-
Tính năng điều khiển lỗi: UART có thể xử lý các lỗi truyền thông như lỗi ngắt kết nối, lỗi dữ liệu, lỗi đồng bộ và lỗi kiểm soát.
Nhược điểm của UART:
-
Tốc độ truyền tải chậm: UART không thể truyền dữ liệu với tốc độ cao như các giao thức truyền thông khác như SPI hoặc I2C.
-
Độ dài tối đa của đường truyền giới hạn: Độ dài tối đa của đường truyền UART là giới hạn về khoảng cách truyền tải dữ liệu và không thể được sử dụng cho các khoảng cách truyền dài.
-
Không hỗ trợ nhiều thiết bị: UART là giao thức truyền thông hai chiều và chỉ hỗ trợ kết nối đến một thiết bị duy nhất một cách trực tiếp.
-
Không hỗ trợ phát hiện xung đột: UART không hỗ trợ phát hiện xung đột và không thể phát hiện xung đột khi có nhiều thiết bị cố gắng truyền dữ liệu đến cùng một thời điểm.
Ứng dụng của giao tiếp UART
Giao tiếp UART được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau. Dưới đây là một số ứng dụng phổ biến của giao tiếp UART:
-
Truyền thông giữa các vi điều khiển (MCUs): UART được sử dụng để truyền dữ liệu giữa các vi điều khiển trong hệ thống nhúng, cho phép các vi điều khiển giao tiếp với nhau hoặc với các module ngoại vi.
-
Giao tiếp giữa máy tính và các thiết bị ngoại vi: UART được sử dụng để kết nối máy tính với các thiết bị ngoại vi như cảm biến, màn hình LCD, đầu đọc thẻ nhớ, module điều khiển motor, và nhiều thiết bị khác.
-
Giao tiếp giữa các module trong hệ thống nhúng: UART được sử dụng để truyền dữ liệu giữa các module trong hệ thống nhúng, cho phép chúng giao tiếp với nhau và thực hiện các chức năng như đọc dữ liệu, điều khiển, hoặc truyền thông tin điều kiện làm việc.
-
Giao tiếp với các thiết bị ngoại vi không có giao diện khác: UART được sử dụng để giao tiếp với các thiết bị ngoại vi không có giao diện khác, chẳng hạn các module RF (radio frequency), GPS (Global Positioning System), hoặc các thiết bị điều khiển từ xa.
-
Giao tiếp trong các ứng dụng IoT (Internet of Things): UART được sử dụng trong các ứng dụng IoT để truyền dữ liệu giữa các thiết bị thông minh, máy chủ và nền tảng đám mây, cho phép giao tiếp và kiểm soát các thiết bị từ xa.
-
Giao tiếp trong các ứng dụng viễn thông: UART được sử dụng trong các ứng dụng viễn thông, chẳng hạn trong việc truyền dữ liệu giữa các thiết bị mạng, truyền dữ liệu qua đường dây điện thoại hoặc cáp quang.
Tuy nhiên, đây chỉ là một số ví dụ phổ biến về ứng dụng của giao tiếp UART, và giao tiếp UART còn được sử dụng trong nhiều lĩnh vực khác nhau tùy thuộc vào yêu cầu cụ thể của từng ứng dụng.