SPI (Serial Peripheral Interface) là một giao thức giao tiếp nối tiếp đồng bộ được sử dụng rộng rãi trong các hệ thống nhúng. Nó cho phép các thiết bị khác nhau, như cảm biến, bộ nhớ và vi điều khiển, trao đổi dữ liệu một cách hiệu quả. Bài viết này sẽ cung cấp một cái nhìn tổng quan về giao tiếp SPI, bao gồm cách thức hoạt động, ưu điểm và nhược điểm của nó.
Giao tiếp SPI được sử dụng phổ biến trong nhiều ứng dụng khác nhau. Ví dụ, các module thẻ SD, đầu đọc thẻ RFID và bộ thu phát không dây 2.4 GHz thường sử dụng SPI để giao tiếp với vi điều khiển. Ưu điểm nổi bật của SPI là khả năng truyền dữ liệu liên tục mà không bị gián đoạn. Điều này có nghĩa là bất kỳ số lượng bit nào cũng có thể được gửi hoặc nhận trong một luồng duy nhất. Ngược lại, các giao thức như I2C và UART gửi dữ liệu dưới dạng các gói tin, có giới hạn về số lượng bit và bị gián đoạn bởi các điều kiện bắt đầu và dừng.
Sơ đồ giao tiếp SPI
Mục Lục
Quan Hệ Master-Slave trong SPI
Trong giao tiếp SPI, các thiết bị hoạt động theo mô hình master-slave. Thiết bị master, thường là một vi điều khiển, điều khiển quá trình giao tiếp và gửi lệnh đến các thiết bị slave. Các thiết bị slave, chẳng hạn như cảm biến, màn hình hoặc chip nhớ, nhận lệnh từ master và phản hồi lại. Cấu hình đơn giản nhất của SPI bao gồm một master và một slave. Tuy nhiên, một master có thể điều khiển nhiều slave.
SPI sử dụng bốn đường dây chính để giao tiếp:
- MOSI (Master Output Slave Input): Đường truyền dữ liệu từ master đến slave.
- MISO (Master Input Slave Output): Đường truyền dữ liệu từ slave đến master.
- SCLK (Serial Clock): Đường truyền tín hiệu xung nhịp, được tạo ra bởi master để đồng bộ hóa quá trình truyền dữ liệu.
- SS/CS (Slave Select/Chip Select): Đường chọn slave, được master sử dụng để kích hoạt slave cụ thể mà nó muốn giao tiếp.
Cách Thức Hoạt Động Của Giao Tiếp SPI
Giao tiếp SPI hoạt động dựa trên việc đồng bộ hóa việc truyền và nhận dữ liệu bằng tín hiệu xung nhịp. Master tạo ra tín hiệu xung nhịp và gửi nó đến slave. Mỗi bit dữ liệu được truyền trong một chu kỳ xung nhịp, do đó tốc độ truyền dữ liệu được xác định bởi tần số của tín hiệu xung nhịp. Vì các thiết bị chia sẻ tín hiệu xung nhịp, SPI là một giao thức giao tiếp đồng bộ.
Xung Nhịp
Tín hiệu xung nhịp trong SPI có thể được điều chỉnh bằng cách sử dụng hai thuộc tính: phân cực xung nhịp (clock polarity – CPOL) và pha xung nhịp (clock phase – CPHA). CPOL xác định mức logic của tín hiệu xung nhịp khi ở trạng thái nghỉ (idle), trong khi CPHA xác định cạnh xung nhịp nào được sử dụng để lấy mẫu dữ liệu. Hai thuộc tính này phối hợp với nhau để xác định thời điểm các bit được xuất ra và lấy mẫu.
Chọn Slave (Slave Select)
Master chọn slave mà nó muốn giao tiếp bằng cách kéo đường CS/SS của slave đó xuống mức logic thấp. Khi đường CS/SS ở mức logic cao, slave ở trạng thái không hoạt động và không tham gia vào quá trình giao tiếp. Master có thể có nhiều chân CS/SS để điều khiển nhiều slave song song. Nếu chỉ có một chân CS/SS, nhiều slave có thể được kết nối nối tiếp (daisy-chain).
Truyền Dữ Liệu (MOSI và MISO)
Master gửi dữ liệu đến slave từng bit một thông qua đường MOSI. Slave nhận dữ liệu này tại chân MOSI. Dữ liệu thường được gửi với bit quan trọng nhất (MSB) trước. Slave cũng có thể gửi dữ liệu trở lại master thông qua đường MISO. Dữ liệu được gửi từ slave đến master thường được gửi với bit ít quan trọng nhất (LSB) trước.
Sơ đồ giao tiếp SPI với nhiều slave song song
Sơ đồ giao tiếp SPI với nhiều slave nối chuỗi
Các Bước Truyền Dữ Liệu SPI
Quá trình truyền dữ liệu SPI bao gồm các bước sau:
- Master tạo ra tín hiệu xung nhịp trên đường SCLK.
- Master kéo chân SS/CS của slave mục tiêu xuống mức logic thấp để kích hoạt slave.
- Master gửi dữ liệu từng bit một đến slave thông qua đường MOSI. Slave đọc các bit này khi nhận được.
- Nếu cần phản hồi, slave gửi dữ liệu từng bit một trở lại master thông qua đường MISO. Master đọc các bit này khi nhận được.
Ưu Điểm và Nhược Điểm Của SPI
Giống như bất kỳ giao thức giao tiếp nào, SPI có những ưu điểm và nhược điểm riêng. Việc lựa chọn SPI so với các giao thức khác phụ thuộc vào yêu cầu cụ thể của ứng dụng.
Ưu Điểm Của SPI:
- Truyền dữ liệu liên tục: Không có bit bắt đầu và dừng, cho phép truyền dữ liệu liên tục mà không bị gián đoạn.
- Không cần hệ thống định địa chỉ phức tạp: So với I2C, SPI không yêu cầu hệ thống định địa chỉ slave phức tạp.
- Tốc độ truyền dữ liệu cao: SPI thường có tốc độ truyền dữ liệu cao hơn I2C, có thể nhanh gần gấp đôi.
- Truyền và nhận đồng thời: Các đường MISO và MOSI riêng biệt cho phép truyền và nhận dữ liệu đồng thời.
Nhược Điểm Của SPI:
- Sử dụng nhiều dây: SPI yêu cầu bốn dây (SCLK, MOSI, MISO, SS/CS), trong khi I2C và UART chỉ sử dụng hai.
- Không có cơ chế xác nhận: SPI không có cơ chế xác nhận dữ liệu đã được nhận thành công, điều mà I2C có.
- Không có kiểm tra lỗi: SPI không có hình thức kiểm tra lỗi như bit chẵn lẻ trong UART.
- Chỉ hỗ trợ một master: SPI chỉ cho phép một master duy nhất trên một bus.
Kết Luận
Giao tiếp SPI là một giao thức mạnh mẽ và linh hoạt, được sử dụng rộng rãi trong nhiều ứng dụng nhúng. Nó cung cấp tốc độ truyền dữ liệu cao và khả năng truyền dữ liệu liên tục, nhưng cũng có một số hạn chế cần xem xét. Bằng cách hiểu rõ cách thức hoạt động, ưu điểm và nhược điểm của SPI, bạn có thể đưa ra quyết định sáng suốt về việc có nên sử dụng nó cho dự án của mình hay không.
