0

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-duplexFull-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:

image.png

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 SDASCL.
    • 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.

image.png

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.
  • ...

image.png

Đ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

image.png

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 7bit 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.

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.

image.png

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí