Download as pdf or txt
Download as pdf or txt
You are on page 1of 38

Tổng quan về giao

tiếp ngoại vi I2C

www.lumi.vn
Nội dung
01
Tổng quan về giao tiếp ngoại vi I2C

02
Nguyên lý hoạt động của I2C

03
Cấu hình cho I2C
MỤC TIÊU BÀI HỌC
● Biết được giao thức I2C và so sánh với giao thức SPI.
● Hiểu được bus tín hiệu SCL, SDA và các chế độ I2C.
● Hiểu được các điều kiện START, STOP, ACK và NACK
● Hiểu được quá trình truyền dữ liệu của ngoại vi I2C
● Hiểu được điều kiện lặp START.
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ TỔNG QUAN
I2C
(Inter-Integrated Circuit)

Giao tiếp ngoại vi nối tiếp I2C

• Một chuẩn đồng bộ nối tiếp truyền dữ liệu giữa bộ xử lý trung


tâm với nhiều IC trên cùng một board mạch.

• Sử dụng 2 đường truyền tín hiệu:


o SCL và SDA
• Kiểu Master và Slave: Có thể sử dụng nhiều Master và nhiều
Slave
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ TỔNG QUAN
I2C
(Inter-Integrated Circuit)

I2C thường được sử dụng giao tiếp với:


• Vi điều khiển, cảm biến, các thiết bị hiển thị, thiết bị IoT, bộ nhớ EEPROM,…
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ BUS TÍN HIỆU SCL VÀ SDA

Bus I2C bao gồm 2 dây:


• Serial Clock Line (SCL): Tạo xung nhịp đồng hồ do Master phát đi
• Serial Data Line (SDA): Đường truyền dữ liệu
Lưu ý:
• Master sẽ tạo xung Clock để đồng bộ hoạt động với các Slave
• Slave không có khả năng tạo xung Clock
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ BUS TÍN HIỆU SCL VÀ SDA

• Chân SDA của Master và các Slave sẽ được nối với nhau
• Chân SCL của Master và các Slave sẽ được nối với nhau
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ BUS TÍN HIỆU SCL VÀ SDA

Lưu ý: SDA và SCL đều hoạt động ở chế độ Open-drain


• Bất kỳ thiết bị / IC có thể kéo SDA và SCL xuống mức thấp, nhưng không thể
kéo chúng lên mức cao.
Sử dụng một điện trở kéo lên (khoảng 1 kΩ đến 4,7 kΩ) cho mỗi đường bus,
để giữ cho chúng ở mức cao (ở điện áp dương) theo mặc định.
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ BUS TÍN HIỆU SCL VÀ SDA

Tại sao lại phải cấu hình SDA và SCL ở chế độ Open-drain?

• Tránh xảy ra hiện tượng ngắn mạch, điều này có thể xảy ra khi một
thiết bị cố gắng kéo đường dây lên cao và một số thiết bị khác cố
gắng kéo đường dây xuống thấp.
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ ĐẶC ĐIỂM CỦA NGOẠI VI I2C

• Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên
mạng I2C
• Không cần thỏa thuận trước về tốc độ truyền dữ liệu. Vì vậy, tốc độ truyền dữ
liệu có thể được điều chỉnh bất cứ khi nào cần thiết
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ ĐẶC ĐIỂM CỦA NGOẠI VI I2C

• Cơ chế đơn giản để xác thực dữ liệu được truyền


• Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
• Các mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối đơn giản với
hai đường bus chung I2C
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ ĐẶC ĐIỂM CỦA NGOẠI VI I2C

• I2C là một loại giao thức đồng bộ nối tiếp:

Các bit dữ liệu đượ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 một tín hiệu xung Clock
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ CHẾ ĐỘ HOẠT ĐỘNG CỦA I2C

Các chế độ hoạt động của I2C:


• Standard Mode với tốc độ 100 KBit/s.
• Fast Mode với tốc độ 400Kbit/s
• Fast Mode+ với tốc độ 1Mbits/s
• High Speed Mode với tốc độ 3.4Mbits/s (Không hỗ trợ cho STM32F4x)
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ CHẾ ĐỘ HOẠT ĐỘNG CỦA I2C

Lưu ý :
• Thiết bị ở chế độ Standard-mode không thể giao tiếp với các thiết bị ở chế độ
Fast mode hoặc cao hơn.
• Thiết bị ở chế độ Fast mode có thể giao tiếp với thiết bị ở chế độ
Standard-mode
TỔNG QUAN VỀ GIAO TIẾP NGOẠI VI I2C
❖ SO SÁNH SPI VÀ I2C
Đặc điểm SPI I2C

Số lượng dây 4 dây 2 dây


Số lượng tăng khi thiết bị tăng
Chế độ truyền Full duplex, Half duplex, Simplex Half duplex

Tốc độ truyền Truyền đồng bộ Truyền đồng bộ


(Tốc độ khoảng 10Mbps đến 20Mbps) (Hỗ trợ tốc độ 100kbps,
1Mbps, 3.4Mbps)

Khoảng cách Trên bo mạch Trên bo mạch

Số thiết bị Số lượng hạn chế Lên đến 127 thiết bị


Giao tiếp bằng chân chọn chip Giao tiếp bằng địa chỉ
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C

Giao thức ngoại vi nối tiếp SPI sẽ sử dụng chân CS để chọn Slave nó muốn giao tiếp.

Có rất nhiều Slave được kết nối trên mạng I2C. Vậy làm thế nào để Master có thể
lựa chọn được Slave nó muốn giao tiếp?
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C

Mỗi thiết bị Slave sẽ có địa chỉ. Và Master sẽ sử dụng địa chỉ này để có thể giao
tiếp với Slave có địa chỉ tương ứng.
Lưu ý: Địa chỉ của các Slave sẽ không trùng nhau
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave

Khác với SPI


• Chuẩn giao tiếp I2C , dữ liệu được truyền dưới dạng các khung dữ liệu.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

Bắt đầu:
• Khi SCL đang ở mức cao, SDA chuyển từ mức
cao xuống mức thấp.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

• 7-bit địa chỉ: Master gửi địa chỉ của slave mà nó muốn liên lạc với
mọi slave được kết nối với nó. Sau đó, mỗi slave sẽ so sánh địa chỉ
được gửi từ master với địa chỉ của chính nó.

o Nếu địa chỉ phù hợp, slave sẽ gửi một bit (ACK = 0) trở lại master.
o Nếu địa chỉ không khớp, slave không làm gì và dòng SDA giữa 2 thiết
bị đó vẫn sẽ ở mức cao.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

Bit Read/Write gồm một bit duy nhất ở sau khung địa chỉ. Nó cho
slave biết master muốn ghi dữ liệu vào nó hay nhận dữ liệu từ nó.

R/W

Master gửi dữ liệu đến slave 0

Master yêu cầu nhận dữ liệu từ slave 1


NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

• ACK / NACK bit


o Nếu địa chỉ vật lý của bất kỳ thiết bị Slave nào trùng với địa chỉ được
thiết bị Master phát, giá trị của bit này được set là ‘0’ bởi thiết bị
Slave. Ngược lại, nó vẫn ở mức logic ‘1’ (mặc định).
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

8-bit dữ liệu: được thiết lập bởi bên gửi, với các bit dữ liệu cần truyền tới
bên nhận.

Theo sau bởi một bit ACK/NACK R/W

Nhận thành công dữ liệu 0

Không nhận được dữ liệu 1


NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

Lưu ý: Sự kết hợp của khối dữ liệu theo sau bởi bit ACK / NACK được lặp lại
cho đến quá trình truyền dữ liệu được hoàn tất.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHUNG TRUYỀN I2C
7-bit địa Bit Bit 8-bit dữ Bit
Bắt đầu Kết thúc
chỉ Read/Write ACK/NACK liệu ACK/NACK

Master Slave Vị trí hiện tại

• Sau khi tất cả dữ liệu đã được gửi đến Slave thành công

Kết thúc:
• SCL đang ở mức cao, SDA chuyển từ mức thấp lên mức cao
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ REPEATED START(ĐIỀU KIỆN START LẶP LẠI)

Repeated Start (Sr):


Thay vì điều kiện STOP, master có thể tạo điều kiện START (Sr) lặp lại .
• Giống như điều kiện START, để tạo Sr, thiết bị master thay đổi dòng SDA
từ mức CAO xuống THẤP, trong khi đường SCL là CAO (đánh dấu màu đỏ)
• Nếu bus I2C đang bận. Để chuẩn bị Sr, master sẽ kéo đường SDA thành
lên mức CAO trong khi đường SCL ở mức THẤP (đánh dấu màu xanh lá)
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ REPEATED START(ĐIỀU KIỆN START LẶP LẠI)

Repeated Start (Sr) và Start có điều kiện giống nhau vậy sử dụng Sr trong
trường hợp nào?
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ KHI NÀO NÊN SỬ DỤNG REPEATED START
Slave Bit Bit Slave Bit Bit
Start
Address
W ACK/NACK
data
ACK/NACK
Sr
Address
R ACK/NACK
data
ACK/NACK
Stop

• Để tiếp tục truyền với slave đó theo hướng ngược lại.


o Sau khi Sr, Master sẽ gửi cùng một địa chỉ tới Slave, theo sau là một
bit theo hướng khác (Truyền(W) => Nhận(R)).
o Để tiếp tục truyền hay nhận từ một thiết bị Slave khác. Sau Sr,
Master gửi địa chỉ của Slave khác muốn giao tiếp.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ DỮ LIỆU HỢP LỆ

• Dữ liệu trên đường SDA phải ổn định (không được thay đổi) trong khi
xung clock ở mức CAO
• Mức CAO và THẤP của đường SDA chỉ có thể thay đổi khi tín hiệu xung
Clock ở mức thấp.
NGUYÊN LÝ HOẠT ĐỘNG CỦA I2C
❖ MỘT SỐ CHÚ Ý
Slave Bit Bit Slave Bit Bit
Start
Address
W ACK/NACK
data
ACK/NACK
Sr
Address
R ACK/NACK
data
ACK/NACK
Stop

• Điều kiện bắt đầu và điều kiện kết thúc sẽ được đưa ra bởi master
• Sau điều kiện kết thúc đường Bus I2C sẽ ở chế độ rảnh (idle). Một thiết
bị master khác có thể nhận Bus I2C
• Bus sẽ vẫn ở trạng thái bận khi sử dụng Repeated Start(Sr) thay vì dùng
điều kiện kết thúc (Stop)
CẤU HÌNH CHO I2C
❖ CÁC BƯỚC CẤU HÌNH CHO I2C

• Bước 1: Khởi tạo các chân GPIO với các chân SCL và SDA với
mode Alternate Function và Output Type là Open-drain
CẤU HÌNH CHO I2C
❖ CÁC BƯỚC CẤU HÌNH CHO I2C

• Bước 2: Khởi tạo ngoại vi I2C


BÀI TẬP THỰC HÀNH

Thực hành luyện tập cấu hình sử dụng ngoại vi I2C:


• Bài 1: Thực hành truyền và nhận dữ liệu giữa ngoại vi I2C1 và I2C3
TỔNG KẾT BÀI HỌC
Giao tiếp I2C:
• Giao tiếp ngoại vi nối tiếp
• Sử dụng 2 dây kết nối: SDA, SCL
• Chế độ truyền:Half duplex (bán song công).
• Sử dụng khung truyền để truyền dữ liệu với tín hiệu
xung Clock.
TỔNG KẾT BÀI HỌC

Ưu điểm
• Chỉ sử dụng hai dây
• Hỗ trợ nhiều master và nhiều slave
• Bit ACK / NACK xác nhận rằng mỗi khung dữ liệu
hay địa chỉ được gửi (hoặc nhận) thành công
• Phần cứng ít phức tạp hơn với giao tiếp UART
• Giao thức nổi tiếng và được sử dụng rộng rãi
TỔNG KẾT BÀI HỌC

Nhược điểm
• Tốc độ truyền dữ liệu giao tiếp I2C chậm hơn so với
giao tiếp SPI
• Kích thước của khung dữ liệu được giới hạn ở 8 bit
• Cần phần cứng phức tạp hơn để triển khai so với
giao tiếp SPI
TÀI LIỆU THAM KHẢO
● Giao tiếp SPI
Thanks for Watching!

Công ty Cổ phần Lumi


Việt Nam

You might also like