- Địa chỉ thiết bị: Mỗi thiết bị Slave trên một mạch I2C có một địa chỉ duy nhất, cho phép các thiết bị khác nhau truyền và nhận dữ liệu một cách độc lập.- Độ dài đường truyền: Chuẩn I2C
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA ĐIỆN - ĐIỆN TỬ
*********
BÁO CÁO CUỐI KỲ TÌM HIỂU GIAO THỨC I2C MÔN HỌC: KỸ THUẬT TRUYỀN SỐ LIỆU LỚP HỌC PHẦN: DACO430664_22_2_10 GVHD: THS NGUYỄN VĂN PHÚC
SINH VIÊN THỰC HIỆN:
TĂNG HỒNG TÂN - 21161415
ĐỖ HOÀNG THẮNG - 21161191
LÊ TRẦN THÁI - 21161190
Tp Hồ Chí Minh - 4/2023
Trang 2Độc Lập - Tự Do - Hạnh Phúc
Tp Hồ Chí Minh, tháng 01, năm 2022
DANH SÁCH THÀNH VIÊN Năm học: HỌC KỲ 2 2023–2024
Lớp học phần: DACO430664_22_2_10
Tên đề tài: “TÌM HIỂU GIAO THỨC I2C”
Giảng viên hướng dẫn: ThS Nguyễn Văn Phúc
STT Họ và tên sinh viên Mã số sinh viên Số điện thoại
BẢNG PHÂN CÔNG CÔNG VIỆC
thiện Chương 1: Cơ sở lý thuyết về chuẩn giao tiếp
I2C
Lê Trần Thái Tốt
Chương 2: Mô phỏng giao thức I2C trên nền tảng
ISE
Tăng Hồng Tân Tốt
Chương 3: Đánh giá và so sánh chuẩn giao tiếp
I2C
Chương 4: Ứng dụng và hướng phát triển của
I2C trong tương lai
Đỗ Hoàng Thắng Tốt
Trang 3MỤC LỤC
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VỀ CHUẨN GIAO TIẾP I2C -1
1.1 Tổng quan về I2C -1
1.2 Nguyên tắt hoạt động của chuẩn giao tiếp I2C -1
1.3 Các đặc tính kỹ thuật của I2C -3
1.4 Cách thức truyền - nhận -3
1.4.1 Truyền dữ liệu đến thiết bị Slave -3
1.4.2 Nhận dữ liệu từ Slave -4
CHƯƠNG 2: MÔ PHỎNG GIAO THỨC I2C TRÊN NỀN TẢNG ISE -5
2.1 CODE -5
2.1.1 Module Verilog -5
2.1.2 Verilog test fix ture -6
2.2 Dạng sóng -6
Chương 3: ĐÁNH GIÁ VÀ SO SÁNH CHUẨN GIAO TIẾP I2C -8
1.1 Đánh giá -8
1.1.1 Sự tiện lợi I2C mang lại -8
3.1.2 Những hạn chế của I2C -8
3.1.3 Kết quả -9
3.1.4 Nhận xét -9
3.2 So sánh -9
3.2.1 So sánh I2C với UART -9
3.2.2 Kết quả -10
3.2.3 Nhận xét -11
CHƯƠNG 4: ỨNG DỤNG VÀ HƯỚNG PHÁT TRIỂN CỦA I2C TRONG TƯƠNG LAI -12
4.1 Ứng dụng thực tiễn của I2C -12
4.2 Tương lai phát triển của I2C -12
TÀI LIỆU THAM KHẢO -14
Trang 4CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VỀ CHUẨN GIAO TIẾP I2C 1.1 Tổng quan về I2C
- I2C (Inter- Integrated Circuit) là một giao thức nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau Có thể kết nối nhiều slave với một master duy nhất và cũng có thể có nhiều master điều khiển một hoặc nhiều slave
- I2C chỉ sử dụng hai đường truyền tín hiệu để truyền dữ liệu giữa các thiết bị:
+ SDA (Serial Data) – đường truyền
dữ liệu nối tiếp, đường truyền cho
master và slave để gửi và nhận dữ
liệu
+ SCL (Serial Clock) – đường mang
tín hiệu xung nhịp nối tiếp
Hình 1.1 Sơ đồ khối I2C
- I2C là một giao thức truyền thông nối tiếp, các bit dữ liệu sẽ đượ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 1 tín hiệu đồng hồ Đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bởi một tín hiệu xung nhịp được chia sẽ giữa master và slave Tín hiệu xung nhịp luôn được điều khiển bởi master
-Tốc độ truyền dữ liệu: Giao tiếp I2C hỗ trợ nhiều tốc độ truyền dữ liệu khác nhau, từ các mức tốc độ thấp từ 100 kbps cho đến tốc độ cao hơn 400 kbps, 1 Mbps và 3.4 Mbps
- Địa chỉ thiết bị: Mỗi thiết bị Slave trên một mạch I2C có một địa chỉ duy nhất, cho phép các thiết bị khác nhau truyền và nhận dữ liệu một cách độc lập
- Độ dài đường truyền: Chuẩn I2C được thiết kế để truyền dữ liệu trên các đường truyền ngắn, thông thường là khoảng vài mét
- Điện áp: Chuẩn I2C thường được sử dụng với các mức điện áp thấp, bao gồm 3,3 V và
5 V
- Tốc độ truyền dữ liệu liệu: Chuẩn giao tiếp I2C
Trang 51.2 Nguyên tắc hoạt động của chuẩn giao tiếp I2C
Hình 1.2 Sơ đồ tin nhắn của chuẩn giao tiếp I2C
- Dữ liệu của I2C được truyền trong các tin nhắn Tin nhắn được chia thành các khung dữ liệu Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ slave và một hoặc nhiều khung dữ liệu chứa dữ liệu đang được truyền Thông điệp cũng bao gồm điều kiện khởi động
và điều kiện dừng, các bit đọc/ghi và các bit ACK/ NACK giữa mỗi khung dữ liệu:
- Start Condition: Khi một thiếu bị chủ quyết định một giao dịch,
nó sẽ chuyển mạch SDA từ mức điện áp cao xuống mức điện áp
thấp trước khi đường SCL chuyển từ mức điện áp cao xuống thấp
Khi điều kiện bắt đầu được gửi từ thiết bị Master, tất cả các thiết bị
Slave đều hoạt động ngay cả khi chúng ở chế độ ngủ (sleep mode)
và đợi bit địa chỉ
Hình 1.3 Điều kiện bắt đầu
- Address Frame: Nó bao gồm một chuỗi 7-bit hoặc 10-bit cho mỗi slave để phân biệt giữa
các slave Khi thiết bị Master một dữ liệu thì tất cả các thiết bị Slave trên I2C so sánh các bit địa chỉ này với bit địa chỉ của chúng để xác định slave mà Master muốn giao tiếp
- Bit Read/Write: Bit này dùng để xác định hướng truyền dữ liệu.
+ Nếu Master cần gửi dữ liệu đến thiết bị Slave, bit này được thiết lập mức điện áp thấp ‘0’.
+ Nếu Master cần nhận dữ liệu từ thiết bị Slave, bit này được thiết lập mức điện áp cao ‘1’.
- Bit ACK/NACK: ACK/NACK là viết tắt của từ Acknowledged/Not-Acknowledged Mỗi
khung trong một tin nhắn đều được theo sau bởi một bit ACK/NACK (xác nhận/ không xác nhận) Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công, một bit ACK sẽ được gửi lại cho thiết bị gửi từ thiết bị nhận
+ Khi địa chỉ vật lý của bất kỳ thiết bị Slave nào trùng với địa chỉ thiết bị Master phát, giá trị của bit này được set ‘0’ bởi thiết bị Slave
+ Khi thiết bị Slave không nhận được tín hiệu của Master thì nó vẫn ở mức logic ‘1’ (mặc định)
- Khung dữ liệu: Sau khi master phát hiện bit ACK từ slave (Slave đã nhận được tín hiệu từ
Master), khung dữ liệu đầu tiên đã được sẵn sàng được gửi Khung dữ liệu bao gồm 8 bit và đượ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 và được gửi với bit quan
2
Trang 6trọng trước Theo sau mỗi khung dữ liệu là một bit ACK/ NACK để xác minh khung dữ liệu
đã được nhận thành công Nếu nhận thành công thì thì bit này được set thành mức logic ‘0’ bởi bên nhận bằng cách kéo dòng SDA xuống một bit, nếu nhận không thành công thì nó vẫn
ở mức logic ‘1’ Bit ACK phải được nhận bởi thiết bị gửi master hoặc slave (tùy thuộc vào cái nào đang gửi dữ liệu) trước khi khung dữ liệu tiếp theo được gửi
- Stop Condition: Sau khi các khung dữ liệu cần thiết được truyền hết
qua đường SDA, thiết bị Master chuyển đường SDA từ mức điện áp
thấp lên mức điện áp cao trước khi đường SCL chuyển từ mức điện áp
cao xuống thấp
Hình 1.4 Điều kiện kết thúc
1.3 Các đặc tính kỹ thuật của I2C
- Chỉ sử dụng hai đường bus: SDA (đường truyền dữ liệu nối tiếp) và SCL (đường xung nhịp nối tiếp)
- Hoạt động theo cơ chế master - slave với cả master và slave đều có thể truyền và nhận dữ liệu Hỗ trợ nhiều thiết bị master với cơ chế phát hiện va chạm trên đường truyền và phân xử khi có va chạm tín hiệu để ngăn ngừa mất dữ liệu nếu hai hoặc nhiều master truyền tín hiệu cùng lúc
- Mỗi thiết bị kết nối vào bus được định duy nhất một địa chỉ bằng phần mềm
- Quá trình truyền dữ liệu nối tiếp 2 chiều 8-bit có định hướng có các chế độ truyền như: + Chế độ truyền thông thường - Standard mode (chế độ tiêu chuẩn): Chế độ này cho phép truyền dữ liệu với tốc độ lên đến 100kbps và sử dụng tín hiệu SCL để đồng bộ hóa các truyền thông
+ Chế độ truyền nhanh – Fast mode: Chế độ này cho phép truyền dữ liệu với tốc độ truyền dữ liệu lên đến 400kbps và sử dụng tín hiệu SCL để đồng bộ hóa các truyền thông
+ Chế độ truyền siêu nhanh - High speed mode: Chế độ này cho phép truyền dữ liệu với tốc
độ truyền dữ liệu lên đến 3.4Mbit/giây Tuy nhiên chỉ được hỗ trợ trên một số thiết bị và bắt buộc tuân thủ các điều kiện nghiêm ngặt
+ Chế độ đa Master- Multi Master mode: Chế độ này cho phép nhiều thiết bị điều khiển chính (master) truyền dữ liệu cùng trên một đường truyền I2C, cho phép các thiết bị truyền thông với nhau mà không cần đợi thiết bị khác truyền xong
+ Chế độ đa Slave- Multi Slave mode: Chế độ này cho phép nhiều thiết bị con (Slave) truyền
dữ liệu trên một đường truyền I2C, cho phép các thiết bị có thể nhận dữ liệu từ nhiều thiết bị khác nhau
Trang 7- Lọc nhiễu các xung nhọn trên đường bus để đảm bảo tính toàn vẹn dữ liệu.
- Số lượng IC tối đa có thể kết nối được trên bus I2C phụ thuộc vào sức chứa tối đa của bus
1.4 Cách thức truyền - nhận
1.4.1 Truyền dữ liệu đến thiết bị Slave
- Quá trình truyền dữ liệu từ thiết bị Master đến một thiết bị Slave cụ thể thông qua bus I2C diễn ra theo trình tự như sau:
+ Đầu tiên thiết bị Master gửi điều kiện bắt đầu (START) đến tất cả cả thiết bị Slave + Thiết bị Master gửi đi 7-bit địa chỉ của thiết bị Slave mà thiết bị Master muốn giao tiếp cùng với bit Read/Write
+ Mỗi thiết bị Slave so sánh địa chỉ được gửi từ thiết bị Master với địa chỉ riêng của nó Nếu địa chỉ trùng khớp, thiết bị Slave gửi về một bit ACK bằng cách hạ đường SDA xuống thấp
và bit ACK/NACK được thiết lập mức logic ‘0’ Nếu địa chỉ từ thiết bị Master không khớp
với địa chỉ riêng của thiết bị Slave thì đường SDA ở mức cao và bit ACK/NACK sẽ ở mức
‘1’ (mặc định)
+ Thiết bị Master gửi dữ liệu đến thiết bị Slave thì bit Read/Write là mức điện áp thấp ‘0’ + Khi khung dữ liệu được thiết bị Slave nhận thành công nó sẽ thiết lập bit ACK/NACK thành
‘0’ để báo cho thiết bị Master tiếp tục
- Sau khi tất cả dữ liệu được gửi đến thiết bị Slave thì thiết bị Master gửi điều kiện dừng bằng cách chuyển mức điện áp SDA từ mức điện áp thấp lên mức điện áp cao trước khi đường SCL chuyển từ mức điện áp cao xuống thấp để báo hiệu cho tất cả các thiết bị Slave biết rằng việc truyền dữ liệu đã kết thúc
Hình 1.5 Sơ đồ mô tả truyền dữ liệu từ Master đến Slave
1.4.2 Nhận dữ liệu từ Slave
- Quá trình nhận dữ liệu từ thiết bị Slave thông qua bus I2C tương tự như quá trình truyền dữ liệu từ Master đến Slave nhưng chỉ khác ở điểm bit Read/Write được thiết lập mức điện áp cao ‘1’
4
Trang 8CHƯƠNG 2: MÔ PHỎNG GIAO THỨC I2C TRÊN NỀN TẢNG ISE 2.1 CODE
2.1.1 Module Verilog
Hình 2.1 Code mô phỏng Master I2C Hình 2.2 Code mô phỏng I2C
Trang 9Hình 2.3 Code mô phỏng I2C
2.1.2 Verilog test fix ture
Hình 2.4 Code mô phỏng I2C
2.2 Dạng sóng
VD: Xét các dữ liệu sau
- Trạng thái ban đầu (IDLE = 1)
- START = 1
- ADDRESS = 7’h47 (7’b100_0111)
- W = 0 (WRITE = 0)
- SLAVE nhận được (ACK = 0)
- DATA = 8'h66 (8’b0110_0110)
- SLAVE không nhận được (ACK = 1)
- STOP = 1 Hình 2.5 Thông số mô phỏng thiết lập
Giải:
Dựa vào tính chất của chuẩn giao tiếp I2C ta có được chuỗi dữ liệu sau:
1 1 100011
1
0 0 0110011
0
IDL
E
STAR
T
K
DATA NAC
K
STO P
6
Trang 10Dạng sóng mô phỏng được
Hình 2.6 Kết quả mô phỏng thiết bị Master truyền dữ liệu
Ta thấy dạng sóng mô phỏng đúng với tính chất sóng của chuẩn giao tiếp I2C
Trang 11CHƯƠNG 3: ĐÁNH GIÁ VÀ SO SÁNH CHUẨN GIAO TIẾP I2C 1.1 Đánh giá
1.1.1 Sự tiện lợi I2C mang lại
- I2C rất tiện lợi trong việc kết nối các linh kiện điện tử với nhau bởi vì nó chỉ sử dụng hai dây để truyền thông (một dây dữ liệu và một dây đồng hồ), tiết kiệm không gian và chi phí
Hình 3.1 Sự tiện lợi của I2C + Thiết lập dễ dàng: I2C được thiết kế để thiết lập đơn giản hơn so với các giao thức khác + Tiết kiệm đường truyền: Các thiết bị có thể chia sẻ cùng một đường truyền, giúp tiết kiệm
số lượng dây kết nối
+ Tốc độ truyền thông nhanh: I2C có tốc độ truyền thông nhanh hơn nhiều so với các giao thức khác như SPI hoặc UART Với tốc độ truyền thông tối đa lên đến 3.4 Mbps
+ Điều khiển linh hoạt: I2C cho phép các thiết bị giao tiếp với nhau thông qua một số lệnh điều khiển, bao gồm đọc và ghi dữ liệu, đặt điều kiện, truyền thông qua nhiều thiết bị cùng một lúc, và nhiều hơn nữa
3.1.2 Những hạn chế của I2C
Hình 3.2 Những hạn chế của I2C
- Tuy nhiên, I2C cũng có một số hạn chế
+ I2C chỉ hỗ trợ truyền thông điểm đến điểm, nghĩa là chỉ có thể truyền thông giữa hai thiết bị trực tiếp kết nối với nhau
8
Trang 12+ I2C có thể gặp vấn đề về tốc độ truyền thông khi kết nối nhiều thiết bị với nhau, bởi vì tốc
độ truyền thông phải được chia đều cho tất cả các thiết bị
+ I2C không được tối ưu cho các ứng dụng yêu cầu truyền thông nhanh và liên tục, nhưng thay vào đó được thiết kế cho các ứng dụng cần truyền thông đồng bộ và kiểm soát chính xác + Giới hạn khoảng cách truyền thông: Vì I2C sử dụng đường dây chung cho cả dữ liệu và xung đồng hồ, nên khoảng cách truyền thông giới hạn trong một mạch nhúng hoặc mô-đun vi điều khiển
+ Tốc độ truyền thông giới hạn: Mặc dù tốc độ truyền thông của I2C nhanh hơn nhiều so với các giao thức khác như SPI và UART, tuy nhiên nó cũng có giới hạn tốc độ truyền thông tối
đa là 3.4 Mbps, do đó không phù hợp cho các ứng dụng đòi hỏi tốc độ truyền thông rất cao + Thiết bị truyền thông phải có địa chỉ riêng: Mỗi thiết bị truyền thông I2C phải có địa chỉ riêng để được nhận dữ liệu từ các thiết bị khác Nếu có quá nhiều thiết bị trên cùng một đường truyền I2C, thì việc quản lý địa chỉ trở nên khó khăn
+ Khó khăn trong việc xử lý lỗi: Khi có lỗi xảy ra trong quá trình truyền thông I2C, việc xác định lỗi và xử lý nó có thể khó khăn hơn so với các giao thức khác như SPI hoặc UART
3.1.3 Kết quả
- Tổng kết lại, I2C là một giao thức truyền thông tiện lợi và được sử dụng rộng rãi trong các ứng dụng nhúng và vi điều khiển Nó mang lại nhiều lợi ích như kết nối đơn giản, định danh địa chỉ dễ dàng và tốc độ truyền thông nhanh hơn so với các giao thức khác Tuy nhiên, I2C cũng có những hạn chế như giới hạn khoảng cách truyền thông, tốc độ truyền thông giới hạn, cần có địa chỉ riêng cho mỗi thiết bị và khó khăn trong việc xử lý lỗi
3.1.4 Nhận xét
- Vì những lý do này, I2C không phù hợp cho tất cả các ứng dụng, và cần được xem xét kỹ lưỡng trước khi sử dụng
- Trong phần đánh giá, chúng ta đã thấy rõ được ưu điểm và nhược điểm của giao thức này I2C là một giao thức truyền thông tiện lợi và được sử dụng rộng rãi trong các ứng dụng nhúng
và vi điều khiển Tuy nhiên, I2C cũng có những hạn chế như giới hạn khoảng cách truyền thông, tốc độ truyền thông giới hạn, cần có địa chỉ riêng cho mỗi thiết bị và khó khăn trong việc xử lý lỗi
- Vì vậy, khi thiết kế hệ thống sử dụng I2C, chúng ta cần xem xét kỹ lưỡng các yếu tố để đảm bảo tính hiệu quả và đáp ứng được các yêu cầu của ứng dụng Chúng ta cũng nên xem xét sự lựa chọn của các giao thức truyền thông khác như UART, SPI, CAN để chọn ra giao thức phù hợp nhất với ứng dụng của mình
- Tuy nhiên, với sự phát triển của công nghệ, I2C vẫn được cải tiến và sử dụng rộng rãi trong các ứng dụng nhúng Và trong tương lai, I2C vẫn sẽ được phát triển và cải tiến để đáp ứng được các yêu cầu của các ứng dụng mới và đáp ứng được các xu hướng công nghệ mới
Trang 133.2 So sánh
3.2.1 So sánh I2C với UART
- I2C và UART là hai giao thức truyền thông được sử dụng rộng rãi trong các ứng dụng nhúng
và vi điều khiển
+ Tốc độ truyền thông: I2C có tốc độ truyền thông chậm hơn UART, với tốc độ truyền thông tối đa chỉ là 3.4 Mbps, trong khi đó UART có thể đạt tới 10 Mbps Tuy nhiên, I2C có thể truyền thông với nhiều thiết bị cùng lúc, trong khi đó UART chỉ có thể truyền thông với một thiết bị duy nhất
+ Định danh địa chỉ: I2C có địa chỉ riêng cho mỗi thiết bị, trong khi đó UART không có định danh địa chỉ Điều này cho phép I2C có thể truyền thông với nhiều thiết bị cùng lúc, trong khi
đó UART chỉ có thể truyền thông với một thiết bị duy nhất
+ Điều khiển luồng dữ liệu: UART có khả năng điều khiển luồng dữ liệu (flow control) để đảm bảo tính tin cậy và độ chính xác trong truyền thông, trong khi đó I2C không có khả năng này
+ Độ dài cáp truyền thông: I2C có giới hạn về độ dài cáp truyền thông, khoảng 1-2 mét, trong khi đó UART có thể truyền thông qua cáp dài hơn
- Tóm lại:
+ I2C và UART đều có những ưu điểm và nhược điểm riêng Khi chọn giao thức truyền thông phù hợp cho ứng dụng, chúng ta nên xem xét kỹ lưỡng các yếu tố như tốc độ truyền thông, số lượng thiết bị, độ dài cáp truyền thông, tính tin cậy, độ chính xác để đảm bảo tính hiệu quả
và đáp ứng được các yêu cầu của ứng dụng
+ Tuy nhiên, điểm khác biệt lớn nhất giữa I2C và UART là cách thức truyền dữ liệu I2C là giao thức truyền thông đồng bộ, trong đó tín hiệu đồng hồ được sử dụng để đồng bộ hóa các thiết bị truyền thông trong khi UART là giao thức truyền thông không đồng bộ, nghĩa là không sử dụng đồng hồ để đồng bộ hóa các thiết bị truyền thông Điều này có nghĩa là I2C cung cấp một độ chính xác và đồng bộ hóa cao hơn cho truyền dữ liệu, trong khi UART có thể
có thời gian trễ và sai số đồng hồ do không đồng bộ hóa Tuy nhiên, UART có tốc độ truyền thông nhanh hơn và không gặp vấn đề về tốc độ khi kết nối nhiều thiết bị như I2C
3.2.2 Kết quả
(1 dây truyền & 1 dây nhận dữ
liệu)
2 dây
Chế độ truyền Full duplex (không phân biệt
master - slave)
Half duplex (nhiều master & slave) Tốc độ truyền Truyền không đồng bộ (tốc độ tự
đặt, tối đa khoảng 460kbps)
Truyền đồng bộ (hỗ trợ tốc
độ 100kbps, 400kbps, 3.4Mbps, 1Mbps)
10