Giới thiệu về giao tiếp SPI
SPI là một giao thức giao tiếp phổ biến được sử dụng bởi nhiều thiết bị khác nhau. Ví dụ, module thẻ SD, module đầu đọc thẻ RFID và bộ phát / thu không dây 2,4 GHz đều sử dụng SPI để giao tiếp với vi điều khiển.
Lợi ích duy nhất của SPI là dữ liệu có thể được truyền mà không bị gián đoạn. 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 liên tục. Với I2C và UART, dữ liệu được gửi dưới dạng gói, giới hạn ở một số bit cụ thể. Điều kiện bắt đầu và dừng xác định điểm bắt đầu và kết thúc của mỗi gói, do đó dữ liệu bị gián đoạn trong quá trình truyền.
Các thiết bị giao tiếp qua SPI có quan hệ grasp – slave. Grasp là thiết bị điều khiển (thường là vi điều khiển), còn slave (thường là cảm biến, màn hình hoặc chip nhớ) nhận lệnh từ grasp. Cấu hình đơn giản nhất của SPI là hệ thống một slave, một grasp duy nhất, nhưng một grasp có thể điều khiển nhiều hơn một slave.
MOSI (đầu ra grasp / đầu vào slave) – đường truyền cho grasp gửi dữ liệu đến slave.
MISO (đầu vào grasp / đầu ra slave) – đường cho slave gửi dữ liệu đến grasp.
SCLK (clock) – đường cho tín hiệu xung nhịp.
SS / CS (Slave Choose / Chip Choose) – đường cho grasp chọn slave nào để gởi tín hiệu.
Cách hoạt động cuả SPI
Xung nhịp
Tín hiệu xung nhịp đồng bộ hóa đầu ra của các bit dữ liệu từ grasp để lấy mẫu các bit của slave. Một bit dữ liệu được truyền trong mỗi 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. Giao tiếp SPI được khởi tạo bởi grasp kể từ khi grasp cấu hình và tạo ra tín hiệu xung nhịp.
Bất kỳ giao thức giao tiếp nào mà các thiết bị chia sẻ tín hiệu xung nhịp thì đều được gọi là đồng bộ. SPI là một giao thức giao tiếp đồng bộ. Ngoài ra còn có các phương thức không đồng bộ không sử dụng tín hiệu xung nhịp. Ví dụ, trong giao tiếp UART, cả hai bên đều được đặt thành tốc độ truyền được cấu hình sẵn để chỉ ra tốc độ và thời gian truyền dữ liệu.
Tín hiệu xung nhịp trong SPI có thể được sửa bằng cách sử dụng các thuộc tính của phân cực xung nhịp và pha xung nhịp. Hai thuộc tính này làm việc cùng nhau để xác định khi nào các bit được xuất ra và khi được lấy mẫu. Phân cực xung nhịp có thể được thiết lập bởi grasp để cho phép các bit được xuất ra và lấy mẫu trên cạnh lên hoặc xuống của chu kỳ xung nhịp. Pha xung nhịp có thể được đặt để đầu ra và lấy mẫu xảy ra trên cạnh đầu tiên hoặc cạnh thứ hai của chu kỳ xung nhịp, bất kể nó đang tăng hay giảm.
Slave Choose
Grasp có thể chọn slave mà nó muốn giao tiếp bằng cách đặt đường CS / SS của slave ở mức điện áp thấp. Ở trạng thái idle, không truyền tải, dòng slave choose được giữ ở mức điện áp cao. Nhiều chân CS / SS có thể có sẵn trên thiết bị grasp cho phép đấu dây track track nhiều slave. Nếu chỉ có một chân CS / SS, nhiều slave có thể được kết nối với grasp bằng cách nối chuỗi.
Nhiều slave
SPI có thể thiết lập để hoạt động với một grasp và một slave duy nhất, và nó có thể được thiết lập với nhiều slave do một grasp duy nhất điều khiển. Có hai cách để kết nối nhiều slave với grasp. Nếu grasp có nhiều chân slave choose, các slave có thể được nối dây track track như thế này:
Nếu chỉ có một chân slave choose, các slave có thể được nối chuỗi như sau:
MOSI và MISO
Grasp gửi dữ liệu đến slave từng bit, nối tiếp qua đường MOSI. Slave nhận dữ liệu được gửi từ grasp tại chân MOSI. Dữ liệu được gửi từ grasp đến slave thường được gửi với bit quan trọng nhất trước.
Slave cũng có thể gửi dữ liệu trở lại grasp thông qua đường MISO nối tiếp. Dữ liệu được gửi từ slave trở lại grasp thường được gửi với bit ít quan trọng nhất trước.
Các bước truyền dữ liệu SPI
- Grasp ra tín hiệu xung nhịp.
- Grasp chuyển chân SS / CS sang trạng thái điện áp thấp, điều này sẽ kích hoạt slave.
- Grasp gửi dữ liệu từng bit một tới slave dọc theo đường MOSI. Slave đọc các bit khi nó nhận được.
- Nếu cần phản hồi, slave sẽ trả lại dữ liệu từng bit một cho grasp dọc theo đường MISO. Grasp đọc các bit khi nó nhận được.
Ưu và nhược điểm của SPI
Có một số ưu và nhược điểm khi sử dụng SPI và nếu được lựa chọn giữa các giao thức giao tiếp khác nhau, bạn nên biết khi nào sử dụng SPI theo yêu cầu của dự án:
Ưu điểm
Không có bit bắt đầu và dừng, vì vậy dữ liệu có thể được truyền liên tục mà không bị gián đoạn
Không có hệ thống định địa chỉ slave phức tạp như I2C
Tốc độ truyền dữ liệu cao hơn I2C (nhanh gần gấp đôi)
Các đường MISO và MOSI riêng biệt, vì vậy dữ liệu có thể được gửi và nhận cùng một lúc
Nhược điểm
Sử dụng bốn dây (I2C và UART sử dụng hai)
Không xác nhận dữ liệu đã được nhận thành công (I2C có điều này)
Không có hình thức kiểm tra lỗi như bit chẵn lẻ trong UART
Chỉ cho phép một grasp duy nhất