Giao thức truyền thông SPI – Serial Peripheral Interface

SPI (tiếng Anh: Serial Peripheral Interface, tạm dịch: Giao diện Ngoại vi Nối tiếp) là một chuẩn truyền thông nối tiếp đồng bộ được sử dụng để truyền dữ liệu trong khoảng cách ngắn, thường được sử dụng trong các hệ thống nhúng. SPI được phát triển bởi Motorola vào giữa những năm 1980 và trở thành chuẩn de facto. Các ứng dụng tiêu biểu của SPI có thể kể đến như thẻ nhớ (Secure Digital cards) và giao tiếp màn hình LCD.

Các thiết bị hỗ trợ SPI giao tiếp ở chế độ chế độ song công toàn phần (full duplex), sử dụng mô hình master – slave với một master trên đường truyền. Thiết bị master khi đó sẽ khởi tạo frame cho việc gởi và nhận. Bus SPI hỗ trợ nhiều slave thông qua việc lựa chọn chân Chip Select (viết tắt: CS, hay còn gọi là Slave select, viết tắt là SS) kết nối từ master đến slave tương ứng với chân CS đó.

Đôi khi SPI cũng còn được gọi là bus nối tiếp bốn dây (four wire serial bus), để phân biệt với các loại bus nối tiếp đã có như three-wire, two-wire và one-wire.

Dù là một chuẩn truyền thông đồng bộ (khi yêu cầu xung clock để đồng bộ tín hiệu trên đường truyền) nhưng SPI khác với giao thức Synchronous Serial Interface (SSI), một giao thức truyền thông nối tiếp đồng bộ cũng sử dụng 4 dây. Giao thức SSI sử dụng dung sai tín hiệu và chỉ cung cấp một kênh truyền đơn hướng trong khi SPI hỗ trợ truyền thông giữa một master và nhiều slave.

Chân tín hiệu

Kết nối trên một SPI bus với một master và một slave

Bus SPI sử dụng 4 chân logic tín hiệu:

  • SCLK (Serial Clock): xung clock phát ra từ master
  • MOSI (Master Out Slave In): Dành cho việc truyền dữ liệu từ master đến slave. Chân MOSI ở master sẽ kết nối đến chân MOSI ở slave.
  • MISO (Master In Slave Out): Dành cho việc truyền dữ liệu từ slave đến master. Chân MISO ở master sẽ kết nối đến chân MISO ở slave.
  • CS/SS (Chip/Slave Select): Chân CS được master sử dụng để lựa chọn slave cần giao tiếp.

Ngoài ra, chân MOSI còn có các tên khác:

  • SIMO, MTSR: trên cả thiết bị master và slave
  • SDI, DI, DIN, SI: trên thiết bị slave
  • SDO, DO, DOUT, SO: trên thiết bị master

Chân MISO còn có các tên khác:

  • SOMI, MRST: trên cả thiết bị master và slave
  • SDO, DO, DOUT, SO: trên thiết bị slave
  • SDI, DI, DIN, SI: trên thiết bị master

Trong các thiết bị chỉ hoạt động ở chế độ slave, chân MOSI còn có tên SDI (Serial Data In) và MISO còn có tên SDO (Serial Data Out).

Chân Slave Select còn có các tên khác:

  • SS, SS, SSEL, nSS, /SS, SS# (slave select)
  • CS, CS (chip select)
  • CSN (chip select/enable)
  • CE (chip enable)

Hoạt động

Bus SPI hoạt động với một master với một hoặc nhiều slave.

Nếu một slave được master chọn để giao tiếp, chân SS khi đó sẽ được ghi mức LOW nếu slave này cho phép giao tiếp với master. Một số slave yêu cầu tín hiệu xung xuống ở chân SS để khởi tạo một kết nối master-slave, ví dụ như Maxim MAX1242 ADC, khi yêu cầu tín hiệu HIGH -> LOW. Với nhiều slave trên đường truyền SPI, mỗi slave này sẽ yêu cầu một chân SS tương ứng ở master cho quá trình giao tiếp.

Truyền dữ liệu

Truyền dữ liệu

Để bắt đầu quá trình truyền dữ liệu, master sẽ cấu hình xung clock để tương ứng với tần số hỗ trợ bởi slave, thường lên đến vài MHz. Master sau đó lựa chọn slave cần giao tiếp với chân SS tương ứng và ghi giá trị 0 lên chân này. Nếu có yêu cầu chờ trên đường truyền, ví dụ như quá trình chuyển đổi ADC đang diễn ra, master sẽ phải chờ trong khoảng thời gian đó trước khi khởi tạo xung clock.

Quá trình truyền dữ liệu song công diễn ra trên mỗi chu kỳ xung clock SPI. Master truyền một bit trên đường dây MOSI, và slave nhận bit này; cùng lúc đó, slave truyền một bit trên đường dây MISO và master nhận bit này. Quá trình này diễn ra kể cả khi master và slave chỉ cần thực thi truyền thông theo một chiều, ví dụ như master chỉ cần gởi data đến slave.

Quá trình truyền thường bao gồm 2 thanh ghi dịch với kích thước cố định, ví dụ như 8 bit, một thanh ghi dịch cho master và một thanh ghi dịch cho slave. Một cách trừu tượng, hai thanh ghi này được kết nối theo kiểu vòng. Khi đó, quá trình truyền sẽ bao gồm các bước:

Bước 1: Chân SS với slave tương ứng mà master muốn truyền/nhận sẽ được master ghi mức logic thấp

Bước 2: Bit MSB sẽ được truyền đi trước. Trong một xung clock, cả master và slave đều dịch ra 1 bit và đưa bit này đến bên slave hoặc master cần truyền tương ứng. Trong xung clock tiếp theo, ở mỗi bên nhận, bit được lấy mẫu trên đường truyền và được lưu như là bit LSB mới nhất trên thanh ghi dịch. Sau khi các bit trên thanh ghi dịch được đẩy ra hoặc đã nhận vào toàn bộ, cả master và slave đã hoàn tất việc trao đổi giá trị thanh ghi. Nếu nhiều data hơn cần được truyền đi, các thanh ghi dịch sẽ được load lại và quá trình trên được lặp lại.

Bước 3: Khi hoàn tất, master ngừng việc đảo xung clock và ngừng chọn chân SS với slave tương ứng. Khi đó chân SS sẽ được master ghi mức logic cao.

Việc truyền SPI thường là việc truyền 8 bit. Tuy nhiên cũng có các trường hợp mà nhiều hơn 8 bit được truyền đi, ví dụ như truyền 16 bit trong các bộ điều khiển màn hình cảm ứng hay các bộ giải mã tín hiệu âm thanh, như IC TSC2101 của Texas Instruments, hay truyến 12 bit với các bộ chuyển đổi DAC hoặc ADC.

Clock polarity và phase

Biểu đồ thời gian thể hiện CPOL và CPHA. Đường màu đỏ thể hiện xung SCK dẫn đầu, đường xanh thể hiện xung SCK còn lại.

Bên cạnh việc thiết lập tần số xung clock, SPI master còn phải cấu hình clock polarity (tạm dịch: cực của xung clock) và clock phase theo data. Tài liệu chính thức Motorola SPI Block Guide đặt tên 2 khái niệm này theo thứ tự là CPOL và CPHA (clock polarity và phase). 2 khái niệm này được dùng cho cả master và slave. Biểu đồ thời gian bên cạnh thể hiện CPOL và CPHA.

CPOL được xác định dựa trên xung SCK với:

  • CPOL = 0 khi xung dẫn đầu của 1 chu kỳ là xung cạnh lênh, xung còn lại là xung cạnh xuống.
  • CPOL = 1 khi xung dẫn đầu của 1 chu kỳ là xung cạnh xuống, xung còn lại là xung cạnh lên.

Giá trị của CPOL có thể được đảo lại bởi cổng NOT logic.

CPHA dựa trên việc định thời điểm (tức là phase) của dữ liệu bit tương ứng xung clock.

  • CPHA = 0 khi bit dữ liệu đầu ra đúng với xung SCK còn lại còn xung dẫn đầu rơi vào khoảng giữa của bit dữ liệu.
  • CPHA = 1 khi bit dữ liệu đầu ra đúng với xung SCK dẫn đầu còn xung còn lại rơi vào khoảng giữa của bit dữ liệu.

Từ đây, việc lựa chon các giá trị CPOL và CPHA sẽ tương ứng với 4 chế độ hoạt động trên SPI. 4 chế độ này được quy ước trên tất cả các dòng vi điều khiển có hỗ trợ SPI:

ModeCPOLCPHA
000
101
210
311

Chế độ SPI cũng thường được quy ước theo dạng tuple cho (CPOL, CPHA), ví dụ (0, 1) để chỉ CPOL=0 và CPHA=1.

Để truyền thông SPI thành công, cả master và slave phải có cùng chế độ (CPOL, CPHA). Việc lựa chọn 4 chế độ (CPOL, CPHA) không ảnh hưởng đến hiệu suất truyền SPI.

Kết nối từng slave độc lập

Một bus SPI với một master và 3 slave được kết nối độc lập

Mô hình phổ biến nhất của một bus SPI bao gồm một master kết nối với một hoặc nhiều slave, với các chân SCK, MOSI và MISO được nối đến tất cả các slave trên bus, mỗi slave sẽ kết nối đến một chân CS riêng trên master. Mỗi chân CS khi đó nên có một điện trở kéo lên để đảm bảo rằng chân CS đó luôn có mức logic xác định. Khi khởi tạo một giao tiếp SPI và một chân CS ứng với một slave được chọn. điện trở kéo lên này giúp ngăn chặn các chân CS của các slave phản hồi với master dù không được yêu cầu từ master này.

Kết nối daisy chain

Một bus SPI được kết nối theo mô hình daisy chain

Một số thiết bị triển khai SPI theo mô hình daisy chain, với chân MISO của slave đầu tiên được nối vào chân MOSI của slave thứ 2, và cứ thế tiếp tục như ở hình bên. Việc triển khai SPI trên mỗi slave khi đó cần phải đảm bảo rằng mỗi slave đó phải truyền đi được chính xác dữ liệu mà nó nhận được từ slave trước nó trong mỗi xung clock. Quá trình nhận và truyền dữ liệu đi trên các slave của bus SPI daisy chain sẽ kết thúc khi một chân/dây SS duy nhất trên bên được master ghi mức logic cao (chuyển từ logic thấp lên cao). Từ đó, mô hình SPI daisy chain chỉ sử dụng 1 chân SS trên đường truyền.

Nguồn: Wikipedia

FRU – Field Replaceable Unit – Bộ phận có thể thay thế tại hiện trường

FRU là một bảng mạch in , bộ phận hoặc cụm lắp ráp có thể được tháo ra nhanh chóng và dễ dàng khỏi 
máy tính hoặc thiết bị điện tử khác và được người dùng hoặc kỹ thuật viên thay thế mà không cần phải gửi toàn bộ sản phẩm hoặc hệ thống đến cơ sở sửa chữa. FRU cho phép một kỹ thuật viên thiếu kiến ​​thức chuyên sâu về sản phẩm có thể cô lập lỗi và thay thế các thành phần bị lỗi. Mức độ chi tiết của FRU trong một hệ thống ảnh hưởng đến tổng chi phí sở hữu và hỗ trợ, bao gồm chi phí dự trữ 
phụ tùng thay thế , nơi phụ tùng được triển khai để đáp ứng mục tiêu thời gian sửa chữa, cách thiết kế và triển khai các công cụ chẩn đoán, mức độ đào tạo cho nhân viên thực địa, liệu người dùng cuối có thể tự thay thế FRU của họ hay không, v.v.

FRU là các thành phần phần cứng của một thiết bị hoặc hệ thống có thể được thay thế tại chỗ mà không cần gửi toàn bộ thiết bị về trung tâm bảo hành hoặc nhà sản xuất. Những bộ phận này thường được thiết kế để dễ dàng tháo lắp nhằm giảm thời gian sửa chữa và bảo trì.

Ví dụ về FRU trong máy tính và thiết bị điện tử:

  • RAM (Bộ nhớ)
  • HDD/SSD (Ổ cứng)
  • PSU (Bộ nguồn)
  • Pin laptop
  • Card đồ họa
  • Quạt làm mát
  • Module mạng

FRU giúp giảm thời gian ngừng hoạt động của thiết bị, tiết kiệm chi phí sửa chữa và nâng cao hiệu suất vận hành trong môi trường doanh nghiệp cũng như cá nhân.

PCH – Platform Controller Hub – Trung tâm điều khiển nền tảng

Platform Controller Hub ( PCH ) là một họ chipset chip đơn của Intel , được giới thiệu lần đầu tiên vào năm 2009. Đây là sản phẩm kế thừa của Intel Hub Architecture , sử dụng hai chip – một cầu bắc và một cầu nam , và lần đầu tiên xuất hiện trong Intel Series 5 .

PCH kiểm soát một số đường dẫn dữ liệu và hỗ trợ các chức năng được sử dụng kết hợp với CPU Intel . Chúng bao gồm xung nhịp ( xung nhịp hệ thống ), Giao diện hiển thị linh hoạt (FDI) và Giao diện phương tiện trực tiếp (DMI), mặc dù FDI chỉ được sử dụng khi chipset được yêu cầu hỗ trợ bộ xử lý có đồ họa tích hợp . Do đó, các chức năng I/O được chỉ định lại giữa hub trung tâm mới này và CPU so với kiến ​​trúc trước đó: một số chức năng cầu bắc, bộ điều khiển bộ nhớ và làn PCIe , đã được tích hợp vào CPU trong khi PCH tiếp quản các chức năng còn lại ngoài các vai trò truyền thống của cầu nam. AMD có tương đương với PCH, được gọi đơn giản là chipset kể từ khi phát hành kiến ​​trúc Zen vào năm 2017. AMD không còn sử dụng tương đương của mình cho PCH, hub bộ điều khiển Fusion (FCH).

Tổng quan

Bộ điều khiển nền tảng Intel Cannon Lake Hub

Kiến trúc PCH thay thế Kiến trúc Hub trước đây của Intel , với thiết kế giải quyết tình trạng tắc nghẽn hiệu suất có vấn đề cuối cùng giữa bộ xử lý và bo mạch chủ . Theo Kiến trúc Hub, bo mạch chủ sẽ có một chipset hai mảnh bao gồm một chip cầu bắc và một chip cầu nam. Theo thời gian, tốc độ của CPU tiếp tục tăng nhưng băng thông của bus mặt trước (FSB) (kết nối giữa CPU và bo mạch chủ) thì không, dẫn đến tình trạng tắc nghẽn hiệu suất. 

Để giải quyết tình trạng tắc nghẽn, một số chức năng thuộc về chipset cầu bắc và cầu nam truyền thống đã được sắp xếp lại. Cầu bắc và các chức năng của nó hiện đã bị loại bỏ hoàn toàn: Bộ điều khiển bộ nhớ, các làn PCI Express cho các card mở rộng và các chức năng cầu bắc khác hiện được tích hợp vào đế CPU như một tác nhân hệ thống (Intel) hoặc được đóng gói trong bộ xử lý trên một đế I/O (AMD Zen 2).

PCH sau đó kết hợp một số chức năng còn lại của cầu bắc (ví dụ như xung nhịp) ngoài tất cả các chức năng của cầu nam, thay thế nó. Đồng hồ hệ thống trước đây là kết nối với một chip chuyên dụng nhưng hiện được kết hợp vào PCH. Có hai kết nối khác nhau giữa PCH và CPU: Giao diện hiển thị linh hoạt (FDI) và Giao diện phương tiện trực tiếp (Flexible Display Interface  DMI). FDI chỉ được sử dụng khi chipset yêu cầu hỗ trợ bộ xử lý có đồ họa tích hợp. Intel Management Engine cũng đã được chuyển đến PCH bắt đầu từ bộ xử lý Nehalem và chipset 5-Series . Thay vào đó, chipset của AMD sử dụng một số làn PCIe để kết nối với CPU đồng thời cung cấp các làn PCIe riêng của chúng, cũng được cung cấp bởi chính bộ xử lý. Chipset cũng chứa bộ nhớ BIOS không mất dữ liệu .

Với các chức năng của cầu bắc được tích hợp vào CPU, phần lớn băng thông cần thiết cho chipset hiện đã được giải quyết.

Phong cách này bắt đầu ở Nehalem và sẽ tiếp tục trong tương lai gần, thông qua Cannon Lake .

Loại bỏ dần

Bắt đầu với Haswell công suất cực thấp và tiếp tục với bộ xử lý Skylake di động , Intel đã kết hợp bộ điều khiển IO cầu nam vào gói CPU, loại bỏ PCH cho thiết kế hệ thống trong gói (SOP) với hai khuôn; khuôn lớn hơn là khuôn CPU, khuôn nhỏ hơn là khuôn PCH. Thay vì DMI , các SOP này trực tiếp phơi bày các làn PCIe, cũng như các đường SATA, USB và HDA từ bộ điều khiển tích hợp và các đường SPI/ I²C /UART/GPIO cho cảm biến. Giống như CPU ​​tương thích với PCH, chúng tiếp tục phơi bày các đường DisplayPort, RAM và SMBus . Tuy nhiên, bộ điều chỉnh điện áp tích hợp đầy đủ sẽ không có cho đến Cannon Lake.

FCH của AMD đã ngừng sản xuất kể từ khi phát hành dòng CPU Carrizo vì nó đã được tích hợp vào cùng một khuôn với phần còn lại của CPU. Tuy nhiên, kể từ khi phát hành kiến ​​trúc Zen, vẫn còn một thành phần gọi là chipset chỉ xử lý I/O tốc độ tương đối thấp như cổng USB và SATA và kết nối với CPU bằng kết nối PCIe. Trong các hệ thống này, tất cả các kết nối PCIe đều được định tuyến trực tiếp đến CPU. Giao diện UMI trước đây được AMD sử dụng để giao tiếp với FCH được thay thế bằng kết nối PCIe. Về mặt kỹ thuật, bộ xử lý có thể hoạt động mà không cần chipset; nó chỉ tiếp tục có mặt để giao tiếp với I/O tốc độ thấp. CPU máy chủ và máy tính xách tay AMD thay vào đó áp dụng thiết kế hệ thống trên chip (SoC) độc lập không yêu cầu chipset. 

Nguồn: Wikipedia (https://en.wikipedia.org/wiki/Platform_Controller_Hub)

Chuẩn giao tiếp I2C là gì?

Giới thiệu giao tiếp I2C

I2C kết hợp các tính năng tốt nhất của SPI và UART. Với I2C, bạn có thể kết nối nhiều slave với một master duy nhất (như SPI) và bạn có thể có nhiều master điều khiển một hoặc nhiều slave. Điều này thực sự hữu ích khi bạn muốn có nhiều hơn một vi điều khiển ghi dữ liệu vào một thẻ nhớ duy nhất hoặc hiển thị văn bản trên một màn hình LCD.

Giống như giao tiếp UART, 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.

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.

Cách hoạt động của I2C

Với I2C, dữ liệu đượ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:

Điều kiện khởi động: Đường SDA chuyển 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 cao xuống mức thấp.

Điều kiện dừng: Đường SDA chuyển từ mức điện áp thấp sang mức điện áp cao sau khi đường SCL chuyển từ mức thấp lên mức cao.

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

Bit Đọc / Ghi: Một bit duy nhất chỉ định master đang gửi dữ liệu đến slave (mức điện áp thấp) hay yêu cầu dữ liệu từ nó (mức điện áp cao).

Bit ACK / NACK: Mỗi khung trong một tin nhắn được theo sau bởi một bit 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 trả lại cho thiết bị gửi từ thiết bị nhận.

Địa chỉ

I2C không có các đường Slave Select như SPI, vì vậy cần một cách khác để cho slave biết rằng dữ liệu đang được gửi đến slave này chứ không phải slave khác. Nó thực hiện điều này bằng cách định địa chỉ. Khung địa chỉ luôn là khung đầu tiên sau bit khởi động trong một tin nhắn mới.

Master gửi địa chỉ của slave mà nó muốn giao tiếp với mọi slave được kết nối với nó. Sau đó, 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ỉ phù hợp, nó sẽ gửi lại một bit ACK điện áp thấp cho master. Nếu địa chỉ không khớp, slave không làm gì cả và đường SDA vẫn ở mức cao.

Bit đọc / ghi

Khung địa chỉ bao gồm một bit duy nhất ở cuối tin nhắn cho slave biết master muốn ghi dữ liệu vào nó hay nhận dữ liệu từ nó. Nếu master muốn gửi dữ liệu đến slave, bit đọc / ghi ở mức điện áp thấp. Nếu master đang yêu cầu dữ liệu từ slave, thì bit ở mức điện áp cao.

Khung dữ liệu

Sau khi master phát hiện bit ACK từ slave, khung dữ liệu đầu tiên đã sẵn sàng được gửi.

Khung dữ liệu luôn có độ dài 8 bit và được gửi với bit quan trọng nhất trước. Mỗi khung dữ liệu ngay sau đó là một bit ACK / NACK để xác minh rằng khung đã được nhận thành công. Bit ACK phải được nhận bở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ó thể được gửi.

Sau khi tất cả các khung dữ liệu đã được gửi, master có thể gửi một điều kiện dừng cho slave để tạm dừng quá trình truyền. Điều kiện dừng là sự chuyển đổi điện áp từ thấp lên cao trên đường SDA sau khi chuyển tiếp từ thấp lên cao trên đường SCL , với đường SCL vẫn ở mức cao.

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.
  1. 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.
  1. 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.
  2. Master gửi hoặc nhận khung dữ liệu.
  1. 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.
  1. Để 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.

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ử 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:

Ưu điểm và nhược điểm của I2C

Có rất nhiều điều ở I2C có thể khiến nó nghe có vẻ phức tạp so với các giao thức khác, nhưng có một số lý do chính đáng khiến bạn có thể muốn hoặc không muốn sử dụng I2C để kết nối với một thiết bị cụ thể:

Ưu điểm

Chỉ sử dụng hai dây

Hỗ trợ nhiều master và nhiều slave

Bit ACK / NACK xác nhận mỗi khung được chuyển thành công

Phần cứng ít phức tạp hơn so với UART

Giao thức nổi tiếng và được sử dụng rộng rãi

Nhược điểm

Tốc độ truyền dữ liệu chậm hơn SPI

Kích thước của khung dữ liệu bị giới hạn ở 8 bit

Cần phần cứng phức tạp hơn để triển khai so với SPI

Nguồn: dientutuonglai.com