#2_Chuẩn giao tiếp UART
Nắm rõ lý thuyết về chuẩn giao tiếp UART sẽ giúp chúng ta hiểu rõ bản chất và thuận lợi cho thực hiện các dự án sau này…
Chúng ta sẽ cùng tìm hiểu phần lý thuyết trước khi thực hành trên vi điều khiển …
Phần cơ bản
Với thế hệ 9x, lúc máy tính mới ra đời, bạn có để ý máy in, chuột, bàn phím được kết nối với máy tính bằng những đầu nối khổng lồ không? Những đầu nối đấy dùng chuẩn giao tiếp UART mà chúng ta sắp tìm hiểu dưới đây.
Chuẩn giao tiếp UART là 1 trong những chuẩn giao tiếp thường gặp của vi điều khiển. Nó không được phổ biến bằng giao tiếp USB (được dùng ở các cáp nối của điện thoại hiện nay như Type C, Micro…).
Tìm hiểu Giao tiếp USB.
Cách truyền dữ liệu nó có thể hiểu đơn giản như sau: từ 1 khung dữ liệu cần truyền, ta sẽ đưa thêm vào đầu và cuối của khung này bit bắt đầu, bit chẵn lẻ (để kiểm tra xem dữ liệu có gửi đủ không), bit kết thúc. Khi đó 1 khung truyền sẽ được hình thành và đưa lên đường dây TX và bắt đầu quá trình truyền nối tiếp.
Phần nâng cao
Chuẩn giao tiếp UART
UART là viết tắt của Universal Asynchronous Receiver / Transmitter. UART hoàn toàn khác biệt với chuẩn giao tiếp SPI hoặc I2C, những chuẩn này chỉ đơn tuần là giao tiếp phần mềm. Mục đích chính của UART là truyền và nhận dữ liệu nối tiếp.
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
Số dây sử dụng | 2 |
Tốc độ | Từ 9600 bps -> 115200 bps |
Phương thức truyền dữ liệu | Không đồng bộ |
Kiểu truyền dữ liệu | Nối tiếp |
Số lượng Master (thiết bị chủ) | 1 |
Số lượng Slave (thiết bị tớ) | 1 |
Cách truyền dữ liệu của chuẩn giao tiếp UART
Để tiện cho việc phân tích ta gọi UART1 là bên truyền dữ liệu và UART2 là bên nhận dữ liệu.
Các UART sẽ truyền và nhận dữ liệu 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ư vi điều khiển. Dữ liệu được chuyển từ bus dữ liệu đến UART 1 ở dạng song song.
Sau khi UART1 nhận dữ liệu song song từ bus dữ liệu, nó sẽ thêm một bit Start, một bit Parity (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 2 đọc gói dữ liệu từng bit tại chân Rx của nó. Sau đó UART 2 chuyển đổi dữ liệu trở lại dạng song song và loại bỏ bit Start, bit Parity và bit Stop. Cuối cùng, UART2 chuyển gói dữ liệu song song với bus dữ liệu ở đầu nhận:
Dữ liệu được truyền trong giao tiếp UART được tổ chức thành các gói (Packets). Mỗi Packets chứa 1 bit Start, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), 1 bit Parity và 1 hoặc 2 bit Stop.
Start bit (bit khởi đầu)
Đường truyền dữ liệu trong giao tiếp UART 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 sẽ kéo đường truyền từ mức cao xuống mức thấp trong một chu kỳ đồng hồ.
Khi UART 2 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).
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 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.
Parity bit (bit chẵn lẻ)
Trong giao tiếp UART, Bit Parity mô tả tính chẵn hoặc lẻ của một số. bit Parity là một cách để UART 2 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 tốc độ truyền không khớp hoặc truyền dữ liệu khoảng cách xa,… Sau khi UART 2 đọ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ẻ.
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 dữ liệu trong chuẩn giao tiếp UART
- 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. Tốc độ baud thiết lập từ trước ở phần cấu hình.
- UART truyền thêm bit bắt đầu, bit chẵn lẻ và (các) bit dừng vào khung dữ liệu:
- Toàn bộ gói tin đượ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:
Trong quá trình này các bit trong khung truyền lần lượt được đẩy lên đường dây TX của UART1 (truyền) và đưa tới dây RX của UART2 (nhận).
- UART nhận loại bỏ bit bắt đầu, bit chẵn lẻ và bit dừng khỏi khung dữ liệu:
Quá trình này sẽ bỏ các bit điều kiện đi, sau đó chỉ còn Data Frame (khung dữ liệu). Cuối cùng dữ liệu cần truyền sẽ tiếp tục được xử lý trong Slave (thiết bị tớ).
- 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 data Bus
Lúc này việc truyền dữ liệu qua giao tiếp UART đã hoàn thành
Ưu, nhược điểm của chuẩn giao tiếp UART
Không có giao thức truyền thông nào là hoàn hảo, nhưng UART thực hiện khá tốt công việc của chúng. Dưới đây là một số ưu và nhược điểm của chuẩn giao tiếp UART. Mong rằng chúng có thể hỗ trợ cho dự án của bạn.
Ưu điểm
- Chỉ sử dụng hai dây
- Không cần tín hiệu đồng hồ
- Có một bit chẵn lẻ để cho phép kiểm tra lỗi
- Cấu trúc của gói dữ liệu có thể được thay đổi
- Phương pháp được ghi chép rõ ràng và được sử dụng rộng rãi
Nhược điểm
- Kích thước của khung dữ liệu được giới hạn tối đa là 9 bit
- Không hỗ trợ nhiều hệ thống phụ hoặc nhiều hệ thống chính
- Tốc độ truyền của mỗi UART phải nằm trong khoảng 10% của nhau
Phần tổng kết
Ta đã cùng nhau tìm hiểu cơ bản về lý thuyết của chuẩn giao tiếp UART, đây là 1 khởi đầu tốt đẹp trước khi bắt đầu thực hành. Kiến thức về giao tiếp UART được tóm tắt lại như sau:
- Chỉ sử dụng 2 dây TX và RX
- Giao tiếp UART có kiểu truyền dữ liệu nối tiếp (trên 1 dây TX)
- Phương thức truyền không đồng bộ (do không cần tín hiệu đồng hồ)
- Ngoài dữ liệu ra trong 1 lần truyền còn nhét thêm các Start bit, Stop bit, Parity bit. Các bit thêm vào này giúp cho Slave nhận biết, kiểm tra và nhận được đúng tín hiệu.
Việc tìm hiểu các chuẩn giao tiếp thường gặp khác lúc này sẽ trở nên rất dễ dàng. Bạn có thể đọc thêm các chuẩn giao tiếp khác:
- #1_Giao tiếp I2C | Giao tiếp điện tử cơ bản
- #3_Giao tiếp SPI | Giao tiếp điện tử cơ bản
- #4_Giao tiếp CAN | Giao tiếp điện tử cơ bản
Bạn có thắc mắc gì trong bài viết không?
Đánh giá và để lại bình luận bên dưới nhá.
Có bạn nào biết khả năng kéo cáp UART tối đa được bao xa cho mình biết với.
Xin cảm ơn.