Blog-Elecfarm

Giao tiếp UART

Giao tiếp UART là một trong những giao thức truyền thông giữa các thiết bị giản và lâu đời nhất. UART được dùng để giao tiếp giữa hai module bằng cách sử dụng một cặp dẫn và một nối đất chung. Hãy cùng Elecfarm tìm hiểu qua bài viết sau.

1. Định nghĩa

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ộ do không có tín hiệu clock để đồng bộ các bit đầu ra từ thiết bị truyền đi đến bên nhận.

UART khác với chuẩn giao tiếp SPI hoặc I2C, những chuẩn này chỉ là giao tiếp phần mềm.

Trong giao tiếp UART, hai thiết bị 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 cổng UART nhận. Sau đó, dữ liệu được chuyển đổi nối tiếp trở lại thành dữ liệu song song cho thiết bị nhận.

Chuẩn giao tiếp UART sử dụng 2 dây để truyền và nhận dữ liệu giữa các thiết bị:

  • TX (Transmiter) – Dây truyền dữ liệu
  • RX (Receiver) – Dây nhận dữ liệu
Kết nối trong UART
Kết nối trong UART

2. Nguyên lý hoạt động

UART sẽ truyền dữ liệu nhận được từ một bus dữ liệu (Data Bus). Bus dữ liệu được sử dụng để gửi dữ liệu đến UART bởi một thiết bị khác như CPU, bộ nhớ hoặc vi điều khiển. Dữ liệu được chuyển từ bus dữ liệu đến UART truyền ở dạng song song. Sau khi UART truyền nhận dữ liệu song song từ bus dữ liệu, nó 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 của nó. 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.

Truyền data dạng song song trong giao tiếp UART
Truyền data dạng song song trong giao tiếp UART

Dữ liệu truyền qua UART được tập hợp thành gói (packet). Mỗi gói chứa 1 bit start, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), một bit chẵn lẻ (parity bit) tùy chọn và 1 hoặc 2 bit stop.

Khung dữ liệu UART
Khung dữ liệu UART

Start bit:

Đường truyền dữ liệu thường được giữ ở mức điện áp cao khi nó không truyền dữ liệu.

Để bắt đầu truyền dữ liệu, UART truyền 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 cao xuống thấp, nó bắt đầu đọc các bit trong khung dữ liệu ở tần số của tốc độ truyền (Baud rate).

Cách truyền bit-start trong giao tiếp UART
Cách truyền bit-start trong giao tiếp UART

Data Frame (khung dữ liệu)

+Khung dữ liệu chứa dữ liệu thực tế đang được truyền. Nó có thể dài từ 5 bit đế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. Thông thường, dữ liệu được truyền với bit có trọng số bé nhất (LSB – Least Significant Bit) trước tiên.

Parity bit (bit chẵn lẻ)

Tính chẵn lẻ mô tả tính chẵn hoặc lẻ của một số. Bit chẵn lẻ là một 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 đường dài.

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 parity là 0 (even parity – parity chẵn), thì tổng số bit 1 trong khung dữ liệu phải là chẵn. Nếu bit parity là 1 (odd parity – parity lẻ) thì số tổng bit 1 trong khung dữ liệu là lẻ.

Khi bit chẵn lẻ khớp với dữ liệu, UART 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, thì UART biết rằng các bit trong khung dữ liệu đã thay đổi.

Stop Bit (Bit kết thúc)

Để 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 nhận dữ liệu song song từ bus dữ liệu: Dữ liệu sẽ là song song ở đầu vào. Sau đó sẽ được chuyển thành nối tiếp để truyền trên dây TX.

Truyền dữ liệu vào UART
Truyền dữ liệu vào UART

Bước 2. UART truyền thêm bit start, bit chẵn lẻ và bit dừng vào khung dữ liệu.

Thêm bit kiểm tra vào khung dữ liệu UART
Thêm bit kiểm tra vào khung dữ liệu UART

Bước 3. Toàn bộ gói được gửi nối tiếp từ UART truyền đến UART nhận. UART nhận lấy mẫu đường dữ liệu ở tốc độ truyền được định cấu hình trước.

Truyền khung dữ liệu trong giao tiếp UART
Truyền khung dữ liệu trong giao tiếp UART

Bước 4. UART nhận loại bỏ bit start, bit chẵn lẻ và bit stop khỏi khung dữ liệu.

Loại bỏ bit kiểm tra trong giao tiếp UART
Loại bỏ bit kiểm tra trong giao tiếp UART

Bước 5. UART nhận chuyển đổi dữ liệu nối tiếp trở lại thành song song và chuyển nó đến bus dữ liệu ở đầu nhận.

Chuyển dữ liệu nhận về dnajg song song trong giao tiếp UART
Chuyển dữ liệu nhận về dnajg song song trong giao tiếp UART

Lúc này việc truyền dữ liệu qua giao tiếp UART đã hoàn thành.

3. Các tham số kĩ thuật

Các tham số của giao tiếp UART như sau:

  • Kích thước của khung dữ liệu được giới hạn tối đa là 9 bit phụ thuộc vào UART.
  • Chỉ kết nối với 1 UART nhận duy nhất.
  • Baud rate (tốc độ baud): Khoảng thời gian để 1 bit được truyền đi. Phải được cài đặt giống nhau ở cả phần gửi và nhận. Thông thường, tốc độ truyền là 9600 bps đến 115200 bps. Tốc độ phụ thuộc vào một bộ tạo tốc độ baud.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *