You are on page 1of 26

CHƯƠNG 5

I2C
Nội dung chương 1

1 Tổng quan
Giới thiệu chi tiết về I2C

NỘI DUNG
2 Function
CHÍNH So sánh với các giao thức khác.

3 Cài đặt
Làm thế nào để có thể sử dụng GPIO được trên STM32

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 2


Tổng quan
GIỚI THIỆU

 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.
 I2C chỉ sử dụng hai dây và hoạt động như mô hình
master – slave.
 Ngoài ra , I2C còn là giao thức đồng bộ với xung CLK.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 4


CẤU TẠO

 I2C cho phép 1 master kết nối được nhiều slave cùng lúc và có
thể nhiều master và nhiều slave cùng lúc.
 Chế độ truyền dữ liệu Serial thông qua dây SDA.
 Cơ chế truyền nhận dữ liệu Half-duplex

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 5


CẤU TẠO

 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 để
đồng bộ tín hiệu truyền.
 SDA - Serial Data Line : Đường truyền nhận dữ liệu giữa master và slave.
 Có hai tốc đột truyền :
 Standard : 100kbps
 Fast : 400kbps

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 6


CẤU TẠO

 Lưu ý : để tránh xảy ra hiện tượng ngắn mạch, SDA vừa bị kéo
lên 1 và vừa bị kéo xuống 0. Cần sử dụng thêm trở kéo lên ( từ 1
– 4,7 kΩ), để giá trị mặc định của đường truyền là 1, master và
slave chỉ có thể kéo xuống 0.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 7


DATA PACKET

 Lưu ý : Vì I2C là giao thức truyền Serial cho nên từng frame sẽ
được truyền và nhận liên tục.
 Khi MASTER truyền xong một frame , SLAVE sẽ phản hồi lại frame
ACK/NACK.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 8


DATA PACKET

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 9


DATA PACKET

 Bit bắt đầu này được set up bởi MASTER. Khi bit này được set,
sẽ bắt đầu quá trình truyền dữ liệu một gói tin.
 Master sẽ chuyển mạch SDA từ mức điện áp cao xuống mức điện
áp thấp trong khi SCL ở mức cao ngay trước khi đường SCL
chuyển từ cao xuống thấp.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 10


DATA PACKET

 Mỗi IC hay phần cứng hỗ trợ giao tiếp I2C sẽ đều có địa chỉ cố
định ( xem ở datasheet của IC đó ).
 Giúp phân biệt các SLAVE trong mô hình.
 Frame này được MASTER truyền đi đến các SLAVE.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 11


DATA FRAME

 Sau frame địa chỉ là chế độ Đọc / Ghi lên thanh ghi của SLAVE.
 Nếu Master gửi dữ liệu đi thì ứng với bit này bằng ‘0’, và ngược
lại, nhận dữ liệu khi bit này bằng ‘1’.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 12


DATA PACKET

 Acknowledged / Not Acknowledged. Dùng để so sánh bit địa chỉ


vật lý của thiết bị so với địa chỉ được gửi tới. Nếu trùng thì Slave
sẽ được đặt bằng ‘0’ và ngược lại, nếu không thì mặc định bằng
‘1’.
 Ngoài ra bit này còn được dung để phản hồi xem frame có truyền
thành công hay không.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 13


DATA PACKET

 Frame data chỉ có kích thước tối đa là 8bit.


 Sau mỗi frame data luôn là bit ACK/NACK để kiểm tra data có
được truyền thành công hay không.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 14


DATA PACKET

SDA

SCL

 Sau khi truyền xong một gói tin, MASTER sẽ set bit stop và quá
trình truyền nhận dữ liệu sẽ kết thúc.
 MASTER sẽ lần lượt kéo chân SCL và chân SDA lên mức cao.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 15


FUNCTION
FUNCTION

 Trước khi truyền và nhận các gói tin, ta cần kiểm tra xem
đường truyền có sẵn sàng chưa :

HAL_I2C_IsDeviceReady (I2C_HandleTypeDef *hi2c,


uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)

Trong đó : hi2c là i2c tương ứng


- DevAddress là địa chỉ của thiết bị , CẦN DỊCH TRÁI 1 BIT.
- Trials là số lần thử lại.
- Timeout là thời gian giới hạn phản hồi.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 17


FUNCTION

 Trong I2C hỗ trợ hai chế độ truyền :


 IO mode : dữ liệu khi được gửi đên hoặc truyền đi đều sẽ được
lưu trong thanh ghi data ( DR ).
 MEM mode : hỗ trợ ghi trực tiếp giá trị dô một địa chỉ của bộ
nhớ

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 18


FUNCTION

 Trong IO mode, để truyền nhận gói tin :

HAL_I2C_Master_Transmit (……)

HAL_I2C_Master_Recieve (……)

HAL_I2C_Slave_Transmit (……)

HAL_I2C_Slave_Recieve (……)

Lưu ý : STM32 luôn hỗ trợ ba phương thức là normal, Interupt, DMA.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 19


FUNCTION

 Trong MEM mode, để truyền nhận gói tin :

HAL_I2C_Mem_Write (……)

HAL_I2C_Mem_Read (……)

Lưu ý : STM32 luôn hỗ trợ ba phương thức là normal, Interupt, DMA.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 20


Cài đặt
CÀI ĐẶT

 Bước 1: Khởi tạo project


CubeMX, sau đó chọn
cổng nạp dữ liệu Serial
Wire, setup các thông số
như đã hướng dẫn ở bài
trước.

 Bước 2: Cài đặt chân


PA0 là chân GPIO_Input

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 22


CÀI ĐẶT

 Bước 3: Cài đặt chân PC13 là chân GPIO_Output.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 23


CÀI ĐẶT

 Bước 4: Đổi lại tên bằng cách chuột phải vào port và chọn
“Enter User Label”

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 24


CÀI ĐẶT

 Bước 5: Vào “GPIO”


đổi chức năng của
PA0 thành “pull-up”.

 Bước 6: Sau khi thực


hiện xong, nhấn Save
và Generate Code.

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 25


THẢO LUẬN
mời các bạn đặt câu hỏi?

03/26/2024 Copyrights 2020 CE-UIT. All Rights Reserved. 26

You might also like