SlideShare a Scribd company logo
3
Most read
6
Most read
7
Most read
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ó.
Giao thức I2C.pptx
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

PDF
Lập trình C cho VĐK 8051
DOCX
Do an can_dien_tu_1185 (1)
PDF
8051 giao tiep lcd
PDF
Tài liệu kỹ thuật biến tần siemens G120C
PDF
Lập trình C cơ bản cho vi điều khiển
DOC
Chuong5 hoạt động port nối tiếp
PDF
Tài liệu tham khảo lập trình PLC Mitsubishi dòng IQ-R.pdf
PPT
STM32 MCU Family
Lập trình C cho VĐK 8051
Do an can_dien_tu_1185 (1)
8051 giao tiep lcd
Tài liệu kỹ thuật biến tần siemens G120C
Lập trình C cơ bản cho vi điều khiển
Chuong5 hoạt động port nối tiếp
Tài liệu tham khảo lập trình PLC Mitsubishi dòng IQ-R.pdf
STM32 MCU Family

What's hot (20)

PDF
Ly thuyet mach dao dong
PDF
Giáo trình lý thuyết điều khiển tự động.pdf
PDF
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
DOC
chỉnh lưu hình tia 3 pha.doc
PDF
Hop ngu mips
DOC
Chương 5: Khối thu phát
PPT
Vhdl
PDF
Cac lenh lap trinh ladder
PPT
Chuong 05 transistor bjt
PDF
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
PPT
BGKTMT Ch3 mức logic số
PDF
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
DOCX
He thong truyen dan PDH va SDH
PDF
Giới thiệu chung về plc s7 1200
DOC
Đề tài: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại, HAY
PDF
Đề tài: Thiết mạch điều chỉnh tốc độ động cơ một chiều, HAY
DOCX
Đề tài_ Thiết kế mạch nghịch lưu.docx
PPT
Tìm Hiểu Giao Tiếp USB (Universal Serial Bus)
PDF
Lập trình PLC S7 1200 tiếng Việt-Chuong 6 profinet
PDF
Huongdanthuchanh lcd
Ly thuyet mach dao dong
Giáo trình lý thuyết điều khiển tự động.pdf
BÁO CÁO ĐỒ ÁN MÔN HỌC MATRIX LED NHẬP TỪ BÀN PHÍM.pdf
chỉnh lưu hình tia 3 pha.doc
Hop ngu mips
Chương 5: Khối thu phát
Vhdl
Cac lenh lap trinh ladder
Chuong 05 transistor bjt
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
BGKTMT Ch3 mức logic số
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
He thong truyen dan PDH va SDH
Giới thiệu chung về plc s7 1200
Đề tài: Thiết kế mạch đếm sản phẩm dùng cảm biến hồng ngoại, HAY
Đề tài: Thiết mạch điều chỉnh tốc độ động cơ một chiều, HAY
Đề tài_ Thiết kế mạch nghịch lưu.docx
Tìm Hiểu Giao Tiếp USB (Universal Serial Bus)
Lập trình PLC S7 1200 tiếng Việt-Chuong 6 profinet
Huongdanthuchanh lcd
Ad

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

PDF
Bài 1 ĐO LƯỜNG VÀ ĐIỀU KHIỂN VỚI ARDUINO V2.pdf
PDF
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
PDF
Chuyen mach Cisco Switch
PDF
Vi xu ly_4_2
DOCX
Chuẩn truyền tín hiệu
PDF
Lập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểm
PDF
datasheet.pdf
PDF
418 giaotrinh avr
PDF
Giaotrinh avr tech24.vn
PDF
Giáo trình vi điều khiển avr
PDF
automationndslaknsdlkanskldna sdalkndalk askd
PDF
[123doc] - bao-cao-bai-tap-lon-mon-thiet-ke-he-thong-nhung.pdf
PDF
PPTX
KTMT-Chuong 6 - Phối ghép và Lập trình Điều khiển (1).pptx
DOC
De cuong thiet bi ngoai vi
PDF
Chuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdf
DOCX
An toan-mang
PPT
Họ vi xử lí 8086 intel
PDF
C23_Buoi3_UART _ I2Cdddddddddddddddd.pdf
DOCX
đê Cương vi mach sô
Bài 1 ĐO LƯỜNG VÀ ĐIỀU KHIỂN VỚI ARDUINO V2.pdf
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Chuyen mach Cisco Switch
Vi xu ly_4_2
Chuẩn truyền tín hiệu
Lập trình PLC S7 1200 tiếng Việt-Chuong 7 truyền thông điểm điểm
datasheet.pdf
418 giaotrinh avr
Giaotrinh avr tech24.vn
Giáo trình vi điều khiển avr
automationndslaknsdlkanskldna sdalkndalk askd
[123doc] - bao-cao-bai-tap-lon-mon-thiet-ke-he-thong-nhung.pdf
KTMT-Chuong 6 - Phối ghép và Lập trình Điều khiển (1).pptx
De cuong thiet bi ngoai vi
Chuong 5 - PPP ATM MPLS-PPP ATM MPLS.pdf
An toan-mang
Họ vi xử lí 8086 intel
C23_Buoi3_UART _ I2Cdddddddddddddddd.pdf
đê Cương vi mach sô
Ad

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