2.5.1. Chuẩn truyền thông UART
UART là viết tắt của Universal Asynchronous Receiver – Transmitter là kiểu truyền thông tin nối tiếp khơng đồng bộ thường là một mạch tích hợp. Mục đích của UART là giao tiếp giữa hai thiết bị có thể được thực hiện theo hai cách là giao tiếp dữ liệu nối tiếp và giao tiếp dữ liệu song song.
Hình 2.16 Gói dữ liệu truyền UART
- Packet: Một gói dữ liệu được truyền đi, bao gồm Start bit, khung truyền dữ liệu, Parity bit, Stop bit
27
- Start bit: 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 bit này từ cao xuống 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 sang thấp, nó bắt đầu đọc các bit trong khung dữ liệu ở tần số của tốc độ truyền.
- Khung dữ liệu: chứa dữ liệu được truyền, nó có thể dài từ 5 đến 8 bit nếu sử dụng một bit parity. Nếu khơng có bit parity nào được sử dụng, khung dữ liệu có thể dài 9 bit. Bit parity có tác dụng kiểm tra xem dữ liệu có bị thay đổi trong q trình truyền khơng bằng cách là kiểm tra tổng số bit 1 là chẵn hay lẻ rồi so sánh với dữ liệu. Nếu tổng số bit 1 là chắn mà bit parity bằng 0 thì q trình truyền khơng có lỗi và nếu bằng 1 thì đường truyền bị lỗi khiến dữ liệu bị thay đổi.
- Stop bit: để 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 bit.
Nguyên lý hoạt động:
- UART truyền sẽ nhận dữ liệu từ một bus dữ liệu. Dữ liệu được truyền từ bus dữ liệu sang UART truyền ở dạng song song rồi thêm start bit, parity bit và stop bit để tạo gói dữ liệu. Sau đó, gói dữ liệu được xuất ra dạng nối tiếp tuần tự ở chân Tx rồi truyền qua chân Rx của UART nhận. UART nhận đọc các gói dữ liệu nhận được rồi loại bỏ start bit, parity bit và stop bit. Sau đó chuyển đổi dữ liệu trở lại dạng song song. Cuối cùng, UART nhận chuyển gói dữ liệu song song qua bus dữ liệu.3
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:
2.5.2. Chuẩn giao tiếp I2C
I2C ( Inter – Integrated Circuit) là 1 giao thức giao tiếp nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau chỉ sử dụng hai đường truyền tín hiệu.
3 https://kysungheo.com/chuan-giao-tiep-uart/
28 Các bit dữ liệu sẽ được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi 1 tín hiệu đồng hồ.
Bus I2C thường được sử dụng để giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại vi điều khiển, cảm biến, EEPROM, … .
Đặc điểm giao tiếp I2C
I2C sử dụng 2 đường truyền tín hiệu:
SCL - Serial Clock Line : Tạo xung nhịp đồng hồ do Master phát đi SDA - Serial Data Line : Đường truyền nhận dữ liệu.
Hình 2.18 Quá trình truyền dữ liệu I2C
Giao tiếp I2C bao gồm quá trình truyền nhận dữ liệu giữa các thiết bị chủ tớ.
Thiết bị Master là 1 vi điều khiển, nó có nhiệm vụ điều khiển đường tín hiệu SCL và gửi nhận dữ liệu hay lệnh thông qua đường SDA đến các thiết bị khác.
Các thiết bị nhận các dữ liệu lệnh và tín hiệu từ thiết bị Master được gọi là các thiết bị Slave. Các thiết bị Slave thường là các IC, hoặc thậm chí là vi điều khiển.
29 Master và Slave được kết nối với nhau như hình trên. Hai đường bus SCL và SDA đều hoạt động ở chế độ Open Drain, nghĩa là bất cứ thiết bị nào kết nối với mạng I2C này cũng chỉ có thể kéo 2 đường bus này xuống mức thấp (LOW), nhưng lại không thể kéo được lên mức cao. Vì để tránh trường hợp bus vừa bị 1 thiết bị kéo lên mức cao vừa bị 1 thiết bị khác kéo xuống mức thấp gây hiện tượng ngắn mạch. Do đó cần có 1 điện trờ ( từ 1 – 4,7 kΩ) để giữ mặc định ở mức cao.4
Trình tự truyền bit trên đường truyền
- Thiết bị chủ tạo xung START
- Thiết bị chủ gửi địa chỉ của thiết bị tớ mà nó cần giao tiếp cùng với bit R/W= 0 ra bus và đợi xung ACK phản hồi từ con tớ
- Khi nhận được xung ACK báo đã nhận diện đúng thiết bị tớ, con chủ bắt đầu gửi dữ liệu đến con tớ theo từng byte một. Theo sau mỗi byte này đều là một xung ACK. Số lượng byte truyền là không hạn chế.
- Kết thúc quá trình truyền, con chủ sau khi truyền byte cuối sẽ tạo xung STOP báo hiệu kết thúc.
Truyền dữ liệu từ tớ đến chủ (đọc dữ liệu): Thiết bị chủ muốn đọc dữ liệu từ thiết bị tớ, quá trình thực hiện như sau:
- Khi bus rỗi, thiết bị chủ tạo xung START, báo hiệu bắt đầu giao tiếp
4 https://deviot.vn/blog/giao-tiep-i2c.05019305
30
- Thiết bị chủ gửi địa chỉ của thiết bị tớ càn giao tiếp cùng với bit R/W = 1 và đợi xung ACK từ phía thiết bị tớ. Sau xung ACK từ con tớ, thiết bị tớ sẽ gửi từng byte ra bus, thiết bị chủ sẽ nhận dữ liệu và trả về xung ACK. số lượng byte không hạn chế.
- Khi muốn kết thúc quá trình giao tiếp, thiết bị chủ gửi xung Not ACK và tạo xung STOP để kết thúc.5
31 CHƯƠNG 3 TÍNH TỐN VÀ THIẾT KẾ