Giao thức trong embedded
I. Các kiểu giao tiếp
Hệ thống truyền thông song công sử dụng phương pháp truyền tín hiệu hai chiều, cho phép các thiết bị trên mạng hoặc bus giao tiếp với nhau theo các hướng ngược nhau. Có 2 kiểu giao tiếp đó là: Half-duplex và Full-duplex.
- Half-duplex: hay còn gọi là bán song công. Dữ liệu được truyền theo 2 chiều giữa các thiết bị. Nhưng dữ liệu chỉ có thể truyền theo một hướng tại một thời điểm nhất định.
- Full-duplex: hay còn gọi là song công toàn phần. Dữ liệu cũng dược truyền theo 2 chiều giữa các thiết bị và có thể truyền theo 2 chiều tại cùng thời điểm.
II. I2C
Tham khảo:
- https://www.analog.com/en/resources/technical-articles/i2c-primer-what-is-i2c-part-1.html
- https://www.youtube.com/watch?v=zrX5-s5sWXA&t=69s
- https://dammedientu.vn/gioi-thieu-chuan-giao-tiep-i2c
1. Đặc điểm
- Giao tiếp kiểu Half-duplex
- Đồng bộ
- 2 dây: SCL (Xung clock) và SDA (dữ liệu).
2. Điều kiện START và STOP
- Cả 2 điều kiện được thực hiện bởi master để đánh thức các slave nằm trên bus và kết thúc quá trình truyền dữ liệu.
- Dựa vào quá trình thay đổi trạng thái của SDA và SCL.
- START: SDA chuyển từ mức HIGH sang LOW, trong khi SCL đang ở mức HIGH.
- STOP: SDA chuyển từ mức LOW sang HIGH, trong khi SCL đang ở mức HIGH.
3. Điều kiện Repeated Start
Điều kiện bắt đầu có thể được lắp lại trong quá trình truyền mà không cần phải có điều kiện STOP. Đây là một trường hợp đặc biệt, được gọi là Repeated Start và được sử dụng để:
- Thay đổi hướng truyền dữ liệu. (👉 Vd: master -> slave thành slave -> master)
- Giao tiếp với slave khác.
- ...
Điều kiện Repeated Start về cơ bản là điều kiện START ở giữa quá trình truyền I2C mà không có điều kiện STOP trước đó.
4. Cấu trúc của packet
a. Byte địa chỉ của slave
- Gồm 2 định dạng: 7 bit (commonly used) và 10 bit.
- Khi master gửi byte địa chỉ để tìm slave với cấu trúc của byte: 7 bit cao + 1 bit thấp.
- 7 bit cao (
bit 7
→bit 1
): chứa địa chỉ của slave, tìm được trong datasheet. - 1 bit thấp (
bit 0
) hay còn gọi là R/W bit để biểu thị trạng thái là master muốn ghi/đọc với slave.
- 7 bit cao (
b. ACK/NACK bit
Một hình thức phản hồi, sau mỗi lần truyền byte, slave sẽ gửi một bit ACK hoặc NACK.
Bit ACK
: được tạo ra bởi slave bằng cách giữ SDA ở mức LOW trong khi SCL ở mức HIGH.Bit NACK
: được tạo ra khi slave rời bus và được kéo lên mức HIGH nhờ điện trở kéo lên.
ACK (bit = 0
) được sử dụng để biểu thị rằng một byte (địa chỉ hoặc dữ liệu) đã được truyền và nhận thành công và quá trình truyền có thể tiếp tục chuyển byte tiếp theo, điều kiện STOP hoặc điều kiện Repeate Start.
NACK (bit = 1
) được sử dụng bởi slave để cho biết có lỗi xảy ra trong quá trình truyền hay không. Master sẽ đưa ra quyết định như STOP hoặc gửi lại dữ liệu bằng Repeate Start.
Trong quá trình đọc, master có thể gửi bit ACK hoặc NACK:
Bit ACK (0)
: muốn đọc tiếp dữ liệu từ slave.Bit NACK (1)
: không muốn đọc dữ liệu từ slave nữa.
Một số câu hỏi phỏng vấn: I2C
III. SPI
IV. UART
🌏 Tham khảo
All rights reserved