HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA KĨ THUẬT ĐIỆN TỬ 1 =====o0o===== BÁO CÁO ĐỀ TÀI TÌM HIỂU I2CSPI Giảng viên hướng dẫn Trần Thị Thuý Hà Môn học Thiết kế ngoại vi và kỹ thuật ghép nối Nhóm môn học 02 Nhóm bài tập lớn 02 Sinh viên thực hiện Đào Văn Nghĩa B18DCDT174 Chu Minh Đạo B18DCDT041 Trần Ngọc Khiêm B18DCDT115 HÀ NỘI, 02 2022 ⁃⁃⁃⁃‹‹‹﴾֍﴿›››⁃⁃⁃⁃ NHÓM 2 2 2 I2CSPI Phụ lục Phần I I2C 3 1 I2C là gì ? 3 2 Bus vật lý I2C 3 3 Giao thức truyền dữ liệu 4 4 Các chế độ hoạt động của I²C 6.
Trang 1KHOA KĨ THUẬT ĐIỆN TỬ 1
=====o0o=====
BÁO CÁO
ĐỀ TÀI:
TÌM HIỂU I2C/SPI
Giảng viên hướng dẫn : Trần Thị Thuý Hà
Môn học : Thiết kế ngoại vi và kỹ thuật ghép nối Nhóm môn học : 02
Nhóm bài tập lớn : 02
Sinh viên thực hiện Đào Văn Nghĩa B18DCDT174
Chu Minh Đạo B18DCDT041 Trần Ngọc Khiêm B18DCDT115
HÀ NỘI, 02 / 2022 -⁃⁃⁃⁃‹‹‹﴾֍﴿›››⁃⁃⁃⁃ -
Trang 2NHÓM 2 2
Phụ lục
Phần I: I2C 3
1 I2C là gì ? 3
2 Bus vật lý I2C 3
3 Giao thức truyền dữ liệu 4
4 Các chế độ hoạt động của I²C 6
Phần II: SPI 9
1. SPI là gì ? 9
2. BUS vật lý SPI 10
3. Giao thức truyền 11
4. Chế độ hoạt động SPI 14
5. Cấu hình SPI 15
Phần III: So sánh I2C và SPI 18
Trang 3
NHÓM 2 3
Phần I: I2C
1 I2C là gì ?
I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit” Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để 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 chỉ sử dụng hai đường truyền tín hiệu
I2C là một giao thức truyền thông nối tiếp, vì vậy dữ liệu được truyền từng bit dọc theo một đường duy nhất (đường SDA)
Giống như SPI, I2C là đồng bộ, do đó đầ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
2 Bus vật lý I2C
✓ Giao tiếp I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:
• SDA (Serial Data) - đườ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
✓ Dữ liệu được truyền đi được gửi qua dây SDA và được đồng bộ với tín hiệu đồng hồ (clock) từ SCL
Tất cả các thiết bị / IC trên mạng I2C được kết nối với cùng đường SCL và SDA như sau:
Trang 4NHÓM 2 4
Cả hai đường bus I2C (SDA, SCL) đều hoạt động như các bộ lái cực máng hở
(open drain) Nó có nghĩa là bất kỳ thiết bị / IC trên mạng I2C có thể lái SDA và
SCL xuống mức thấp, nhưng không thể lái chúng lên mức cao Vì vậy, một điện
trở kéo lên (khoảng 1 kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus, để giữ
cho chúng ở mức cao (ở điện áp dương) theo mặc định
Lý do sử dụng một hệ thống cực máng hở (open drain) là để không 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
3 Giao thức truyền dữ liệu
Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bị Master và các
thiết bị Slave để truyền dữ liệu giữa chúng
Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một
đường dữ liệu SDA duy nhất, thông qua các chuỗi có cấu trúc gồm các số 0 và 1
(bit) Mỗi chuỗi số 0 và 1 được gọi là giao dịch (transaction) và dữ liệu trong
mỗi giao dịch có cấu trúc như sau:
Điều kiện bắt đầu (Start Condition)
Trang 5NHÓM 2 5
Bất cứ khi nào một thiết bị chủ / IC quyết định bắt đầu 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ừ cao xuống thấp
Khi điều kiện bắt đầu được gửi bởi 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ỉ
Khối địa chỉ
Nó bao gồm 7 bit và được lấp đầy với địa chỉ của thiết bị Slave đến / từ đó thiết
bị Master cần gửi / nhận dữ liệu Tất cả các thiết bị Slave trên bus I2C so sánh các bit địa chỉ này với địa chỉ của chúng
Bit Read / Write
Bit này xác định hướng truyền dữ liệu Nếu thiết bị Master / IC cần gửi dữ liệu đến thiết bị Slave, bit này được thiết lập là ‘0’ Nếu IC Master cần nhận dữ liệu
từ thiết bị Slave, bit này được thiết lập là ‘1’
Bit ACK / NACK
ACK / NACK là viết tắt của Acknowledged/Not-Acknowledged 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)
Khối dữ liệu
Trang 6NHÓM 2 6
Nó bao gồm 8 bit và chúng đượ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 Khối này được theo sau bởi một bit ACK / NACK và được set thành ‘0’ bởi bên nhận nếu nó nhận thành công dữ liệu Ngược lại, nó vẫn ở mức logic ‘1’
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
Điều kiện kết thúc (Stop condition)
Sau khi các khung dữ liệu cần thiết được truyền qua đường SDA, thiết bị Master chuyển đường SDA từ mức điện áp thấp sang mức điện áp cao trước khi đường SCL chuyển từ cao xuống thấp
4 Các chế độ hoạt động của I²C
Dựa vào tốc độ ta chia làm 2 loại
• Chế độ chuẩn (standard mode) hoạt động ở tốc độ 100 Kbit/s
• Chế độ tốc độ thấp (low-speed mode) hoạt động ở tốc độ 10 Kbit/s Nếu chia theo quan hệ chủ tớ:
• Một Master một Slave
• Một Master nhiều Slave
• Nhiều Master nhiều Slave
Trang 7NHÓM 2 7
Một master với nhiều slave
Vì I2C sử dụng định địa chỉ nên nhiều slave có thể được điều khiển từ một
master duy nhất Với địa chỉ 7 bit sẽ có 128 (2 mũ 7) địa chỉ duy nhất Việc sử dụng địa chỉ 10 bit không phổ biến, nhưng nó cung cấp 1.024 (2 mũ 10) địa chỉ duy nhất Để kết nối nhiều slave đến một master duy nhất, bạn có thể đấu dây như thế này, với điện trở kéo lên 4,7K Ohm kết nối đường SDA và SCL với Vcc:
Nhiều master với nhiều slave
Nhiều master có thể được kết nối với một slave hoặc nhiều slave Sự cố với nhiều master trong cùng một hệ thống xảy ra khi hai master cố gắng gửi hoặc nhận dữ liệu cùng một lúc qua đường SDA Để giải quyết vấn đề này, mỗi
master cần phải phát hiện xem đường SDA thấp hay cao trước khi truyền tin nhắn Nếu đường SDA thấp, điều này có nghĩa là một master khác có quyền điều khiển bus và master đó phải đợi để gửi tin nhắn Nếu đường SDA cao thì có thể truyền tin nhắn an toàn Để kết nối nhiều master với nhiều slave, hãy sử
Trang 8NHÓM 2 8
dụng sơ đồ sau, với các điện trở kéo lên 4,7K Ohm kết nối các đường SDA và SCL với Vcc:
Trang 9NHÓM 2 9
Phần II: SPI
1 SPI là gì ?
Giao tiếp ngoại vi nối tiếp SPI (Serial Peripheral Interface) là một loại giao thức kiểu Master – Slave cung cấp một giao diện chi phí đơn giản và chi phí thấp giữa vi điều khiển và các thiết bị ngoại vi của nó
Bus giao tiếp SPI thường được sử dụng để giao tiếp vi xử lý hoặc vi điều khiển với bộ nhớ như EEPROM, RTC (Đồng hồ thời gian thực), ADC (Analog to Digital Converter – Bộ chuyển đổi tương tự sang số), DAC (Digital-to-Analog Converter – Bộ chuyển đổi số sang tương tự), thiết bị hiển thị như màn hình LCD, IC âm thanh, các loại cảm biến như nhiệt độ và áp suất, thẻ nhớ như
MMC hoặc thẻ SD hoặc thậm chí các bộ vi điều khiển khác
Đối với giao tiếp khoảng cách ngắn, giao tiếp nối tiếp đồng bộ sẽ là lựa chọn tốt hơn và trong đó giao tiếp ngoại vi nối tiếp hoặc SPI nói riêng là lựa chọn tốt nhất Khi chúng ta nói truyền thông khoảng cách ngắn, nó thường có nghĩa là giao tiếp với một thiết bị hoặc giữa các thiết bị trên cùng một board mạch in (PCB)
Trang 10NHÓM 2 10
2 BUS vật lý SPI
MOSI (đầu ra master / đầu vào slave) - đường truyền cho master gửi dữ liệu đến slave
MISO (đầu vào master / đầu ra slave) - đường cho slave gửi dữ liệu đến master
SCLK (clock) - đường cho tín hiệu xung nhịp
SS / CS (Slave Select / Chip Select) - đường cho master chọn slave nào để gởi tín hiệu
SPI là một kiểu truyền thông nối tiếp kiểu đồng bộ tức là nó sử dụng tín hiệu đồng hồ chuyên dụng để đồng bộ hóa bộ phát và bộ thu hoặc Master và Slave
Bộ phát và bộ thu được kết nối với dữ liệu riêng biệt và tín hiệu đồng hồ sẽ giúp
bộ thu khi tìm kiếm dữ liệu trên bus
Trang 11NHÓM 2 11
Tín hiệu đồng hồ phải được cung cấp bởi Master tới Slave (hoặc tất cả các Slave trong trường hợp thiết lập nhiều Slave) Có hai loại cơ chế kích hoạt trên tín hiệu đồng hồ được sử dụng để báo cho bên nhận biết về dữ liệu: Kích hoạt cạnh và kích hoạt mức
Kích hoạt thường được sử dụng nhất là kích hoạt cạnh và có hai loại: cạnh lên (chuyển đổi từ thấp lên cao trên đồng hồ) và cạnh xuống (chuyển đổi từ cao xuống thấp) Tùy thuộc vào cách bộ thu được cấu hình, lên trên phát hiện các cạnh, bộ thu sẽ tìm kiếm dữ liệu trên bus dữ liệu từ bit tiếp theo
Bởi vì cả tín hiệu đồng hồ và dữ liệu được gửi bởi Master (hoặc bộ phát), chúng
ta không cần phải lo lắng về tốc độ truyền dữ liệu
Điều làm cho SPI trở nên phổ biến trong các giao thức truyền thông đồng bộ nối tiếp khác (hoặc bất kỳ giao tiếp nối tiếp nào) là nó cung cấp tốc độ truyền dữ liệu bảo mật cao với phần cứng khá đơn giản giống như thanh ghi dịch với chi phí tương đối thấp
3 Giao thức truyền
SPI hoặc giao tiếp ngoại vi nối tiếp được Motorola phát triển vào những năm
1980 như một giao diện tiêu chuẩn, chi phí thấp và đáng tin cậy giữa vi điều khiển (Vi điều khiển của Motorola lúc đầu) và các IC ngoại vi của nó
Nhờ giao diện đơn giản, linh hoạt và dễ sử dụng, SPI đã trở thành một tiêu
chuẩn và các nhà sản xuất bán dẫn khác bắt đầu sử dụng giao thức này trong các chip của mình
Trang 12NHÓM 2 12
Trong giao thức SPI, các thiết bị được kết nối trong một mối quan hệ Master – Slave trong một giao diện đa điểm Trong loại giao diện này, một thiết bị được coi là Master của bus (thường là một vi điều khiển) và tất cả các thiết bị khác (IC ngoại vi hoặc thậm chí các vi điều khiển khác) đều được coi là Slave
Trong giao thức SPI, có thể chỉ có một thiết bị Master nhưng nhiều thiết bị Slave
Bus SPI bao gồm 4 tín hiệu hoặc chân Chúng là
• Master – Out / Slave – In (MOSI hay SI): cổng ra của bên Master,
cổng vào của bên Slave, dành cho việc truyền dữ liệu từ thiết bị Master đến thiết bị Slave
• Master – In / Slave – Out (MISO hay SO): cổng vào của bên Master,
cổng ra của bên Slave, dành cho việc truyền dữ liệu từ thiết Slave đến thiết bị Master
• Serial Clock (SCK hay SCLK): xung giữ nhịp cho giao tiếp SPI
• Chip Select (CS) hay Slave Select (SS): chọn chip
Lưu ý: Các nhà sản xuất khác nhau sử dụng thuật ngữ khác nhau cho bus SPI
Tham khảo datasheet để biết thông tin chính xác
Bởi vì bus SPI được thực hiện bằng cách sử dụng 4 tín hiệu hay 4 dây nên đôi khi nó được gọi là chuẩn giao tiếp 4 dây (four-wire) Đầu tiên chúng ta hãy xem một giao diện đơn giản giữa một Master và một Slave được kết nối bằng giao thức SPI và sau đó chúng ta sẽ tìm hiểu về 4 dây này
Hình ảnh sau mô tả một thiết bị Master (Bộ xử lý) được kết nối với thiết bị Slave (Ngoại vi) sử dụng bus SPI
Master – Out / Slave – In hay MOSI, như tên cho thấy, là dữ liệu được tạo ra bởi Master
và nhận bởi Slave Do đó, các chân MOSI trên cả Master và Slave được kết nối với nhau
Trang 13NHÓM 2 13
Master – In / Slave – Out hay MISO là dữ liệu được tạo ra bởi Slave và phải
được truyền tới Master.Các chân MISO trên cả Master và Slave được kết nối với nhau Mặc dù tín hiệu trong MISO được tạo ra bởi Slave, đường tín hiệu này được điều khiển bởi Master
Master tạo tín hiệu đồng hồ SCLK và được cung cấp cho đầu vào đồng hồ của
Slave Xung này có chức năng giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi Sự tồn tại của xung SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc
độ truyền của SPI có thể đạt rất cao
Chip Select (CS) hoặc Slave Select (SS) được sử dụng để chọn một Slave cụ thể
bởi Master Nếu Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó
Vì đồng hồ được tạo ra bởi Master, luồng dữ liệu được điều khiển bởi Master Với mỗi chu kỳ đồng hồ, một bit dữ liệu được truyền từ Master đến Slave và một bit dữ liệu được truyền từ Slave đến Master
Quá trình này xảy ra đồng thời và sau 8 chu kỳ đồng hồ, một byte dữ liệu được truyền theo cả hai hướng và do đó, SPI là một giao tiếp song công toàn phần (full – duplex)
Nếu dữ liệu phải được truyền bởi chỉ một thiết bị, thì thiết bị kia phải gửi một cái gì đó (dữ liệu giả) và nó phụ thuộc vào thiết bị cho dù dữ liệu được truyền là
dữ liệu thực tế hay không
Điều này có nghĩa là đối với mỗi bit được truyền bởi một thiết bị, thiết bị kia phải gửi dữ liệu một bit, tức là Master truyền dữ liệu đồng thời trên MOSI và nhận dữ liệu từ Slave trên đường MISO
Nếu Slave muốn truyền dữ liệu, Master phải tạo ra tín hiệu đồng hồ cho phù hợp bằng cách biết khi nào Slave muốn gửi dữ liệu trước Nếu một Master được kết nối với nhiều Slave thì sơ đồ kết nối như hình ảnh sau đây
Trang 14NHÓM 2 14
Mặc dù nhiều Slave được kết nối với Master trong bus SPI, ở một thời điểm bất
kỳ thì chỉ có một Slave hoạt động Để chọn Slave, Master sẽ kéo đường SS (Slave Select) hoặc CS (Chip Select) của Slave tương ứng xuống mức thấp
Do đó, phải có một chân CS riêng trên Master tương ứng với từng thiết bị Slave Chúng ta cần phải kéo xuống đường SS hoặc CS xuống thấp để chọn Slave bởi
vì đường này tích cực mức thấp
4 Chế độ hoạt động SPI
Chúng ta đã thấy rằng công việc của thiết bị Master là tạo ra tín hiệu đồng hồ và phân phối nó tới Slave để đồng bộ dữ liệu giữa Master và Slave Công việc của Master không chỉ dừng lại ở việc tạo tín hiệu đồng hồ ở tần số cụ thể
Trong thực tế, Master và Slave phải đồng ý về các giao thức đồng bộ hóa nhất định Đối với điều này, hai đặc điểm của xung đồng hồ là cực tính đồng hồ (Clock Polarity – CPOL hoặc CKP) và pha đồng hồ (Clock Phase – CPHA) được đưa vào để xem xét
Clock Polarity (CPOL hoặc CKP) xác định trạng thái của đồng hồ Khi CPOL ở mức thấp, xung đồng hồ được tạo bởi Master tức là SCK sẽ ở mức thấp khi nhàn rỗi (idle) và chuyển sang mức cao trong trạng thái hoạt động (trong khi truyền
dữ liệu) Tương tự, khi CPOL ở mức cao, SCK ở mức cao khi nhàn rỗi và
chuyển sang mức thấp trong trạng thái hoạt động
Phase Clock (CPHA) xác định quá trình chuyển đổi trạng thái của xung đồng hồ tức là lên (thấp lên cao) hoặc xuống (cao xuống thấp), tại đó dữ liệu được truyền
đi Khi CPHA bằng 0, dữ liệu được truyền ở cạnh lên của xung đồng hồ Dữ liệu được truyền ở cạnh xuống khi CPHA là 1
Trang 15NHÓM 2 15
Tùy thuộc vào các giá trị của Clock Polarity (CPOL) và Clock Phase (CPHA),
có 4 chế độ hoạt động của SPI
Mode 0:
Mode 0 xảy ra khi Clock Polarity và Clock Phase là 0 (CPOL = 0 và CPHA =
0) Trong Mode 0, truyền dữ liệu xảy ra trong khi cạnh lên của xung đồng hồ
Mode 1:
Mode 1 xảy ra khi Clock Polarity là 0 và Clock Phase là 1 (CPOL = 0 và CPHA
= 1) Trong mode 1, việc truyền dữ liệu xảy ra trong khi cạnh xuống của xung
đồng hồ
Mode 2:
Mode 2 xảy ra khi Clock Polarity là 1 và Clock Phase là 0 (CPOL = 1 và CPHA
= 0) Trong mode 2, truyền dữ liệu xảy ra trong khi cạnh lên của xung đồng hồ
Mode 3:
Mode 3 xảy ra khi Clock Polarity là 1 và Clock Phase là 1 (CPOL = 1 và CPHA
= 1) Trong mode 3, truyền dữ liệu xảy ra trong khi cạnh lên của xung đồng hồ
5 Cấu hình SPI
Có hai loại cấu hình trong đó các thiết bị SPI có thể được kết nối trong một bus
SPI Đó là:
Trang 16NHÓM 2 16
• Cấu hình Master và các Slave độc lập (Independent Slave
Configuration) và
• Cấu hình Daisy Chain (Daisy Chain Configuration)
Trong cấu hình Master và các Slave độc lập, Master đã dành riêng các đường Slave Select cho tất cả các Slave và mỗi Slave có thể được chọn riêng lẻ Tất cả tín hiệu đồng hồ của các Slave được kết nối chung với SCK của Master
Tương tự, tất cả các chân MOSI của tất cả các SLave được kết nối với chân MOSI của Master và tất cả các chân MISO của tất cả các Slave được kết nối với chân MISO của Master
Trong cấu hình Daisy Chain, chỉ có một đường Slave Select được kết nối với tất
cả các Slave MOSI của Master được kết nối với MOSI của Slave 1 MISO của Slave 1 được kết nối với MOSI của Slave 2 và v.v MISO của Slave cuối cùng được kết nối với MISO của Master
Giả sử Master truyền đi 3 byte dữ liệu lên bus SPI Byte đầu tiên được dịch vào Slave 1 Khi byte thứ hai truyền đến 1, byte đầu tiên sẽ bị đẩy ra khỏi Slave 1 và truyền đến Slave 2 Tương tự, khi byte thứ ba truyền vào Slave 1, byte thứ hai sẽ
bị dịch sang Slave 2 và byte đầu tiên sẽ bị dịch Slave 3