SlideShare a Scribd company logo
1 of 16
Giao thức I2C
với STM32
I: Mạch tích hợp I2C là gì?
1: Định nghĩa
- I2C ( Inter- Integrated Circuit) là giao thức giao tiếp nối tiếp hai dây được sử dụng
giữa các mạch tích hợp để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC
trên cùng một board mạch.
2: Đặc điểm
- Tốc độ không cao
- Sử dụng 7 bit hoặc 10 bit địa chỉ
- Chỉ sử dụng 2 chân tín hiệu là SDA, SCL
- Có 2 tốc độ tiêu chuẩn là:
+ Standard Mode (100kbit/s)
+ Fast Mode (400kbit/s)
II: Kết nối vật lý của I2C:
- SDA ( Serial Data ): là dòng mà master và slave truyền hoặc nhận dữ liệu ( đường
truyền dữ liệu nối tiếp).
- SCL ( Serial Clock Line): là dòng để tạo xung nhịp đồng hồ do
thiết bị Master phát ra ( đường xung nhịp nối tiếp).
- Đối với chip STM32F1 hỗ trợ 2 bộ I2C lần lượt là I2C1, I2C2 tương ứng với các chân:
Các đường SDA và SCL cần được kéo lên bằng điện trở. Giá trị của các điện trở này
phụ thuộc vào chiều dài bus (điện dung bus) và tốc độ truyền.
Mô phỏng về I2C của mạch STM32F103VET6
III: Điều kiện bắt đầu và dừng của I2C
- Start Condition ( Điều kiện bắt đầu):
SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ
mức cao xuống mức thấp.
- Stop Condition ( Điều kiện dừng):
Master sẽ chuyển đổi đường SDA từ mức thấp sang mức cao sau khi chuyển đường
SCL từ mức thấp sang mức cao.
Cách hoạt động của I2C
=> Các bước truyền dữ liệu I2C:
1. Master gửi điều kiện khởi động đến mọi slave được kết nối bằng cách chuyển đường SDA từ
mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức
thấp.
2. Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn giao tiếp, cùng với bit
đọc / ghi.
3. Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ trùng
khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit. Nếu địa chỉ
từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao.
4.Master gửi hoặc nhận khung dữ liệu.
5. Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị
gửi để xác nhận đã nhận thành công khung.
6. Để dừng truyền dữ liệu, master gửi điều kiện dừng đến slave bằng cách chuyển đổi mức cao
SCL trước khi chuyển mức cao SDA.
- Read/Write bit:
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ó (bit 0) hay đọc dữ liệu từ nó (bit 1).
- ACK / NACK bit:
ACK / NACK bit (bit xác nhận) có trong mỗi lần liên lạc. Bit này có nhiệm vụ
đảm bảo việc truyền nhận dữ liệu bằng cách thay đổi mức điện áp trên dòng
SDA. Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công. Lúc
này một bit ACK sẽ được trả lại cho người gửi từ thiết bị nhận (bit 0 ACK khi
nhận xong dữ liệu, còn bit 1 NACK khi không đúng dữ liệu trả về).
- Khung địa chỉ:
Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác định slave khi master
muốn giao tiếp với nó.
Ví dụ thêm để hiểu về giao tiếp I2C:
IV: Một số hàm quan trọng của I2C HAL
Dựa trên các chức năng STM32Cube HAL, việc truyền dữ liệu I2C có thể được thực hiện ở 3
chế độ: Chế độ chặn, Chế độ ngắt hoặc Chế độ DMA.
* Chế độ chặn:
Hàm truyền dữ liệu I2C ở chế độ Master:
HAL_I2C_Master_Transmit (I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData ,
uint16_t Size, uint32_t Timeout):
Tham số: *hi2c: con trỏ trỏ tới cấu trúc khởi tạo I2C , nếu cấu hình là I2C1 thì là &hi2c1
DevAddress: địa chỉ của thiết bị muốn giao tiếp đến , Size: kích thước dữ liệu ,
pData: dữ liệu muốn gửi , Timeout: thời gian chờ.
HAL_I2C_Master_Receive()
HAL_I2C_Mem_Write(I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t
MemAddSize, uint8_t * pData, uint16_t Size, uint32_t Timeout)
=> Dùng để ghi một lượng dữ liệu ở chế độ blocking từ bộ nhớ có địa chỉ cụ thể.
Tham số: MemAddress : Địa chỉ bộ nhớ của Slave ; MemAddSize : Kích thước của địa chỉ bộ nhớ
HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,uint16_t
MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
=> Dùng để đọc một lượng dữ liệu ở chế độ blocking (hàm sẽ không return và chờ cho đến khi có 1
sự kiện hoặc khi có dữ liệu đến) từ bộ nhớ có địa chỉ cụ thể.
Sau đây, ta đi vào cấu hình để giao tiếp I2C với mạch STM32F103VET6 trên
STM32CubeMX.
Mô phỏng trực tiếp bằng mạch kết nối ADXL345 (cảm biến gia tốc) với mạch
STM32F103VET6 bằng giao thức I2C.
Bây giờ chúng ta chạy code trên Keil C:
Thank you for listening

More Related Content

Similar to Giao thức I2C.pptx

Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr
Ky Nguyen Ad
 
De cuong thiet bi ngoai vi
De cuong thiet bi ngoai viDe cuong thiet bi ngoai vi
De cuong thiet bi ngoai vi
ba191992
 
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdfBÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
Man_Ebook
 

Similar to Giao thức I2C.pptx (20)

Giaotrinh avr tech24.vn
Giaotrinh avr tech24.vnGiaotrinh avr tech24.vn
Giaotrinh avr tech24.vn
 
Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr Giáo trình vi điều khiển avr
Giáo trình vi điều khiển avr
 
Vi xu ly_4_2
Vi xu ly_4_2Vi xu ly_4_2
Vi xu ly_4_2
 
De cuong thiet bi ngoai vi
De cuong thiet bi ngoai viDe cuong thiet bi ngoai vi
De cuong thiet bi ngoai vi
 
Chuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdf
Chuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdfChuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdf
Chuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdf
 
An toan-mang
An toan-mangAn toan-mang
An toan-mang
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 intel
 
đê Cương vi mach sô
đê Cương vi mach sôđê Cương vi mach sô
đê Cương vi mach sô
 
Vi xu ly_4_2
Vi xu ly_4_2Vi xu ly_4_2
Vi xu ly_4_2
 
Co ban ve msp430
Co ban ve msp430Co ban ve msp430
Co ban ve msp430
 
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
 
OSPF
OSPFOSPF
OSPF
 
Zigbee2003
Zigbee2003Zigbee2003
Zigbee2003
 
Rs485
Rs485Rs485
Rs485
 
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCDĐồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khien
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
 
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdfBÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520
 
Bao cao tom tat nckh2015
Bao cao tom tat nckh2015Bao cao tom tat nckh2015
Bao cao tom tat nckh2015
 

Giao thức I2C.pptx

  • 2. I: Mạch tích hợp I2C là gì? 1: Định nghĩa - I2C ( Inter- Integrated Circuit) là giao thức giao tiếp nối tiếp hai dây được sử dụng giữa các mạch tích hợp để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch. 2: Đặc điểm - Tốc độ không cao - Sử dụng 7 bit hoặc 10 bit địa chỉ - Chỉ sử dụng 2 chân tín hiệu là SDA, SCL - Có 2 tốc độ tiêu chuẩn là: + Standard Mode (100kbit/s) + Fast Mode (400kbit/s)
  • 3. II: Kết nối vật lý của I2C: - SDA ( Serial Data ): là dòng mà master và slave truyền hoặc nhận dữ liệu ( đường truyền dữ liệu nối tiếp). - SCL ( Serial Clock Line): là dòng để tạo xung nhịp đồng hồ do thiết bị Master phát ra ( đường xung nhịp nối tiếp). - Đối với chip STM32F1 hỗ trợ 2 bộ I2C lần lượt là I2C1, I2C2 tương ứng với các chân:
  • 4. Các đường SDA và SCL cần được kéo lên bằng điện trở. Giá trị của các điện trở này phụ thuộc vào chiều dài bus (điện dung bus) và tốc độ truyền.
  • 5. Mô phỏng về I2C của mạch STM32F103VET6
  • 6. III: Điều kiện bắt đầu và dừng của I2C - Start Condition ( Điều kiện bắt đầu): SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp. - Stop Condition ( Điều kiện dừng): Master sẽ chuyển đổi đường SDA từ mức thấp sang mức cao sau khi chuyển đường SCL từ mức thấp sang mức cao.
  • 8. => Các bước truyền dữ liệu I2C: 1. Master gửi điều kiện khởi động đến mọi slave được kết nối bằng cách chuyển đường SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp. 2. Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn giao tiếp, cùng với bit đọc / ghi. 3. Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ trùng khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit. Nếu địa chỉ từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao. 4.Master gửi hoặc nhận khung dữ liệu. 5. Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công khung. 6. Để dừng truyền dữ liệu, master gửi điều kiện dừng đến slave bằng cách chuyển đổi mức cao SCL trước khi chuyển mức cao SDA.
  • 9. - Read/Write bit: 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ó (bit 0) hay đọc dữ liệu từ nó (bit 1). - ACK / NACK bit: ACK / NACK bit (bit xác nhận) có trong mỗi lần liên lạc. Bit này có nhiệm vụ đảm bảo việc truyền nhận dữ liệu bằng cách thay đổi mức điện áp trên dòng SDA. Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công. Lúc này một bit ACK sẽ được trả lại cho người gửi từ thiết bị nhận (bit 0 ACK khi nhận xong dữ liệu, còn bit 1 NACK khi không đúng dữ liệu trả về). - Khung địa chỉ: Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác định slave khi master muốn giao tiếp với nó.
  • 10.
  • 11. Ví dụ thêm để hiểu về giao tiếp I2C:
  • 12. IV: Một số hàm quan trọng của I2C HAL Dựa trên các chức năng STM32Cube HAL, việc truyền dữ liệu I2C có thể được thực hiện ở 3 chế độ: Chế độ chặn, Chế độ ngắt hoặc Chế độ DMA. * Chế độ chặn: Hàm truyền dữ liệu I2C ở chế độ Master: HAL_I2C_Master_Transmit (I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData , uint16_t Size, uint32_t Timeout): Tham số: *hi2c: con trỏ trỏ tới cấu trúc khởi tạo I2C , nếu cấu hình là I2C1 thì là &hi2c1 DevAddress: địa chỉ của thiết bị muốn giao tiếp đến , Size: kích thước dữ liệu , pData: dữ liệu muốn gửi , Timeout: thời gian chờ. HAL_I2C_Master_Receive() HAL_I2C_Mem_Write(I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t * pData, uint16_t Size, uint32_t Timeout) => Dùng để ghi một lượng dữ liệu ở chế độ blocking từ bộ nhớ có địa chỉ cụ thể. Tham số: MemAddress : Địa chỉ bộ nhớ của Slave ; MemAddSize : Kích thước của địa chỉ bộ nhớ HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) => Dùng để đọc một lượng dữ liệu ở chế độ blocking (hàm sẽ không return và chờ cho đến khi có 1 sự kiện hoặc khi có dữ liệu đến) từ bộ nhớ có địa chỉ cụ thể.
  • 13. Sau đây, ta đi vào cấu hình để giao tiếp I2C với mạch STM32F103VET6 trên STM32CubeMX.
  • 14. Mô phỏng trực tiếp bằng mạch kết nối ADXL345 (cảm biến gia tốc) với mạch STM32F103VET6 bằng giao thức I2C.
  • 15. Bây giờ chúng ta chạy code trên Keil C:
  • 16. Thank you for listening