You are currently viewing Giao diện ghép nối SPI

Giao diện ghép nối SPI

Giao diện ngoại vi nối tiếp SPI (serial peripheral interface) là giao diện ghép nối dạng buýt nối tiếp đồng bộ được tích hợp trong nhiều linh kiện như cảm biến, bộ biến đổi tương tự – số ADC, bộ biến đổi số – tương tự, và bộ nhớ EEPROM. Giao diện SPI ban đầu được phát triển bởi công ty Motorola (nay đổi tên là Freescale), nhưng trong những năm gần đây đã trở thành một chuẩn truyền thông được sử dụng rộng rãi bởi nhiều công ty sản xuất chip bán dẫn. Bài viết này giới thiệu cấu trúc, nguyên lý hoạt động của giao diện ghép nối SPI và ứng dụng của nó. 

1.     Các tín hiệu trên buýt SPI

Buýt SPI sử dụng giao thức truyền thông nối tiếp đồng bộ song công hoàn toàn trên mô hình ghép nối thiết bị chủ – thiết bị phục vụ. Khác với buýt I2C, buýt SPI là một giao thức chỉ cho phép một thiết bị chủ và yêu cầu bốn dây để giao tiếp giữa một cặp thiết bị. So với giao diện ghép nối I2C, giao diện ghép nối SPI có thể hỗ trợ tần số hoạt động cao hơn. Không có một đặc tả tiêu chuẩn cho giao thức SPI do đó tồn tại nhiều biến thể khác nhau của giao thức này [20]. Chẳng hạn, có Freescale SPI, TI SPI và một giao thức gần giống với giao thức SPI có tên là Microwire.

Quá trình truyền thông giữa một thiết bị chủ và một thiết bị phục vụ dựa trên giao thức SPI sử dụng bốn đường tín hiệu. Các thiết bị SPI chỉ sử dụng 2 chân để truyền dữ liệu, được gọi là SDI (Serial Data In) và SDO (Serial Data Out), thay vì 8 chân trở lên như được sử dụng trong các buýt song song truyền thống. Việc giảm các chân dữ liệu này làm giảm kích thước linh kiện và mức tiêu thụ năng lượng mạnh mẽ, khiến chúng trở nên lý tưởng cho nhiều ứng dụng nhúng. Buýt SPI có một đường xung nhịp nối tiếp SCLK (serial clock) để đồng bộ hóa việc truyền dữ liệu giữa hai chip. Chân cuối cùng của buýt SPI là đường cho phép chip hoạt động CE (Chip Enable) được sử dụng để bắt đầu và chấm dứt phiên truyền dữ liệu. Tín hiệu CE được điều khiển bởi thiết bị chủ để chọn ra thiết bị phục vụ tham gia vào phiên truyền thông. Tín hiệu này là tín hiệu tích cực mức thấp và được kéo lên cao để ngắt kết nối thiết bị phục vụ khỏi buýt SPI. Khi nhiều thiết bị phục vụ được sử dụng, thiết bị chủ cần tạo ra một tín hiệu chọn chip riêng lẻ cho mỗi thiết bị phục vụ. Bốn chân, SDI, SDO, SCLK và CE, cùng nhau tạo nên giao diện ghép nối SPI như chỉ ra trong Hình 9‑1.

Các tín hiệu trên Buýt SPI

Hình 9‑1. Các tín hiệu trên Buýt SPI.

Một biến thể khác của buýt SPI

Hình 9‑2. Một biến thể khác của buýt SPI.

Trong nhiều chip và tài liệu các tín hiệu SDO, SDI, SCLK và CE có thể được đặt tên lần lượt là MOSI, MISO, SCK và SS một cách tương ứng như trong Hình 9‑2. Các tín hiệu này có thể được miêu tả ngắn ngọn như sau:

  • SCLK (Serial Clock): tín hiệu xung nhịp nối tiếp được phát từ thiết bị chủ tới các thiết bị phục vụ.
  • SS (Slave Select): Tín hiệu này được dùng để chọn hoặc cho phép thiết bị phục vụ tham gia vào phiên truyền thông SPI. TÍn hiệu này tích cực mức thấp tức là một mức logic thấp trên đường này sẽ cho phép thiết bị phục vụ tham gia vào phiên truyền thông.
  • MOSI (Master-Out-Slave-In): tín hiệu này được dùng để truyền dữ liệu từ thiết bị chủ tới thiết bị phục vụ.
  • MISO (Master-Out-Slave-In): tín hiệu này được dùng để đọc dữ liệu từ thiết bị phục vụ về thiết bị chủ.

Ngoài ra còn có một tiêu chuẩn được sử dụng rộng rãi khác được gọi là buýt giao diện 3 dây. Trong buýt giao diện 3 dây, chúng ta có SCLK và CE và chỉ có một chân duy nhất để truyền dữ liệu. Giao diện SPI 4 dây có thể chuyển thành giao diện 3 dây khi các chân dữ liệu SDI và SDO được gắn với nhau. Tuy nhiên, có một số khác biệt chính giữa buýt SPI và buýt 3 dây trong giao thức truyền dữ liệu. Vì lý do đó, một thiết bị phải hỗ trợ giao thức 3 dây bên trong để được sử dụng làm thiết bị 3 dây. Nhiều thiết bị hỗ trợ cả giao thức SPI và 3 dây.

Các Hình 9‑1 và Hình 9‑2 chỉ ra kết nối của buýt SPI trong mô hình kết nối điểm – điểm giữa thiết bị chủ với một thiết bị phục vụ. Giao thức SPI cũng cho phép nhiều thiết phục vụ được ghép nối với một thiết bị chủ. Các thiết bị phục vụ có thể được kết nối trong mô hình buýt như Hình 9‑3 hoặc mô hình chuỗi móc xích như trong Hình 9‑4.

Trong trường hợp kết nối nhiều thiết bị phục vụ theo mô hình buýt, thiết bị chủ phải sử dụng các đường tín hiệu SS tách biệt để chọn một thiết bị phục vụ mong muốn. Khi tín hiệu chọn chip được kích hoạt (được kéo xuống mức thấp) bởi thiết bị chủ, xung nhịp và dữ liệu trên các đường MOSI/MISO sẽ khả dụng cho thiết bị phục vụ được chọn. Tuy nhiên nếu nhiều tín hiệu chọn chip được kích hoạt đồng thời thì dữ liệu trên dòng MISO bị hỏng vì không có cách nào để thiết bị chủ xác định thiết bị phục vụ nào đang truyền dữ liệu. Như có thể thấy từ hình Hình 9‑3, nếu có n thiết bị phục vụ được kết nối tới tới thiết bị chủ thì số lượng các chân trên thiết bị chủ được yêu cầu để thực hiện kết nối buýt SPI là n + 3. Như vậy, khi số lượng thiết bị phục vụ tăng lên, số lượng đường chọn chip từ thiết bị chủ tăng lên. Điều này có thể nhanh chóng tăng thêm số lượng các chân trên thiết bị chủ và giới hạn số lượng nô lệ có thể được sử dụng. Có các kỹ thuật khác nhau có thể được sử dụng để tăng số lượng phục vụ trong mô hình buýt ví dụ sử dụng bộ giải mã để tạo tín hiệu chọn chip.

Mô hình ghép nối SPI dạng buýt

Hình 9‑3. Mô hình ghép nối SPI dạng buýt.

Trong mô mô hình ghép nối chuỗi móc xích, các thiết bị phục vụ được cấu hình sao cho tín hiệu chọn chip cho tất cả các thiết bị phục vụ được gắn với nhau và dữ liệu lan truyền từ một thiết bị phục này sang thiết bị tiếp theo. Trong cấu hình này, tất cả các thiết bị phục vụ nhận được cùng một xung nhịp SPI cùng một lúc. Dữ liệu từ thiết bị chủ được kết nối trực tiếp tới thiết bị phục vụ đầu tiên và thiết bị phục vụ đó cung cấp dữ liệu cho thiết bị phục vụ tiếp theo, v.v. Trong phương thức này, dữ liệu được lan truyền từ thiết bị phục vụ này sang thiết bị phục vụ khác và số chu kỳ đồng hồ cần thiết để truyền dữ liệu tỷ lệ thuận với vị trí thiết bị phục vụ trong chuỗi móc xích. Ví dụ, trong Hình 9‑4, với mỗi thiết bị phục vụ có độ rộng thanh ghi dữ liệu là 8 bit thì cần 24 xung nhịp để dữ liệu có sẵn trên thiết bị phục vụ thứ 3, so với chỉ 8 xung đồng hồ ở mô hình SPI dạng buýt. Hình 9‑5 cho thấy các chu kỳ đồng hồ và dữ liệu truyền qua chuỗi thiết bị phục vụ (mắt xích).

Mô hình ghép nối SPI dạng chuỗi móc xích

Hình 9‑4. Mô hình ghép nối SPI dạng chuỗi móc xích.

Lan truyền dữ liệu giữa các thiết bị SPI trong mô hình dạng chuỗi móc xích

Hình 9‑5. Lan truyền dữ liệu giữa các thiết bị SPI trong mô hình dạng chuỗi móc xích.

2.     Nguyên lý làm việc của SPI

Kiến trúc buýt SPI bao gồm hai thanh ghi dịch, một trong thiết bị chủ và một ở bên thiết bị phục vụ. Ngoài ra, có một bộ phát tín hiệu xung nhịp ở phía thiết bị chủ để tạo ra xung nhịp đồng bộ hoạt động của các thanh ghi dịch.

Sơ đồ khối kiến trúc buýt SPI

Hình 9‑6. Sơ đồ khối kiến trúc buýt SPI.

Như có thể thấy trong Hình 9‑6, chân ra nối tiếp (serial-out) của thanh ghi dịch bên thiết bị chủ được kết nối với chân vào nối tiếp (serial-in) của thanh ghi dịch bên phía thiết bị phục vụ bằng đường MOSI (Master Out Slave In) và chân vào nối tiếp của thanh ghi dịch bên phía thiết bị chủ được kết nối với chân ra nối tiếp của thanh ghi dịch bên phía thiết bị phục vụ bởi đường MISO (Master In Slave Out). Bộ tạo xung nhịp trong thiết bị chủ cung cấp xung nhịp tới các thanh ghi dịch trong cả thiết bị chủ và thiết bị phục vụ. Các thanh ghi dịch có thể được kích hoạt bằng sườn giảm hoặc sườn tăng của tín hiệu xung nhịp đầu vào. Điều này sẽ được thảo luận trong phần tới.

Trong SPI, các thanh ghi dịch có độ dài 8 bit. Nó có nghĩa là sau 8 xung nhịp nội dung của hai thanh ghi dịch được hoán đổi cho nhau. Khi thiết bị chủ muốn gửi một byte dữ liệu, nó đặt byte đó vào thanh ghi dịch của nó và tạo ra 8 xung nhịp. Sau 8 xung nhịp, byte dữ liệu sẽ được truyền đến thanh ghi dịch của thiết bị phục vụ. Khi thiết bị chủ muốn nhận một byte dữ liệu, phía thiết bị phục vụ cần đặt byte dữ liệu vào thanh ghi dịch của nó và sau 8 xung nhịp dữ liệu sẽ được nhận bởi thanh ghi dịch bên thiết bị chủ. Cần lưu ý rằng SPI là song công hoàn toàn có nghĩa là nó có thể gửi và nhận dữ liệu cùng một lúc.

Được quy định bởi giao thức buýt chủ – tớ, tất cả các phiên truyền thông trên buýt với các thiết bị phục vụ luôn được khởi tạo bởi thiết bị chủ. Khi thiết bị SPI chủ có ý định gửi/nhận dữ liệu đến/từ một thiết bị phục vụ, nó sẽ kéo đường SS tương ứng xuống mức thấp. Tiếp theo là kích hoạt tín hiệu xung nhịp ở tần số mong muốn. Thiết bị chủ truyền dữ liệu bằng cách sử dụng đường MOSI, trong khi dữ liệu đến từ thiết bị phục vụ đã chọn được nhận bằng cách lấy mẫu đường MISO. Giản đồ thời gian mô tả một phiên truyền thông trên buýt SPI được hiển thị trong Hình 9‑7.

Giản đồ thời gian một phiên truyền thông trên buýt SPI

Hình 9‑7. Giản đồ thời gian một phiên truyền thông trên buýt SPI.

Để quá trình truyền thông giữa thiết bị chủ và thiết bị phục vụ diễn ra đúng, cả hai thiết bị phải được cấu hình tới các giá trị tham số giống nhau (gồm tần số tín hiệu SCLK, giá trị phân cực SPHA và SPOL). Trong trường hợp buýt SPI có nhiều thiết bị phục vụ được kết nối với chủ, hoàn toàn có khả năng các thiết bị phục vụ hỗ trợ các tham số SPI không giống nhau. Trong trường hợp đó, thiết bị chủ có thể phải điều chỉnh lại các tham số của nó trước khi bắt đầu truyền thông với thiết bị phục vụ khác.

3.     Phân cực và pha của xung nhịp trong thiết bị SPI

Trong truyền thông SPI, cả thiết bị chủ và thiết bị phục vụ sử dụng cùng một tín hiệu xung nhịp. Thiết bị chủ phải chọn tốc độ xung nhịp phù hợp với khả năng xử lý của thiết bị phục vụ. Nếu thiết bị chủ vận hành xung nhịp ở tốc độ nhanh hơn khả năng xử lý của thiết bị phục vụ thì việc truyền sẽ thất bại. Thiết bị chủ và thiết bị phục vụ phải thống nhất về cực của xung nhịp CPOL (Clock Polarity) và pha của xung nhịp CPHA (Clock Phase) được dùng để lấy mẫu và/hoặc dịch dữ liệu. Tham số CPOL xác định trạng thái không hoạt động của xung nhịp tương ứng với cực hoặc trạng thái của tín hiệu SCLK khi dữ liệu không được truyền. Trạng thái không hoạt động của tín hiệu SCLK có thể là mức logic thấp hoặc logic mức logic cao phụ thuộc vào giá trị của CPOL. Khi CPOL = ‘0’ thì trạng thái không hoạt động của xung nhịp là mức logic thấp trong khi tại CPOL = ‘1’ thì trạng thái không hoạt động của xung nhịp là mức logic cao. Tham số CPHA xác định khi nào dữ liệu được dịch từ thanh ghi dịch ra đường truyền cũng như khi nào cần lấy mẫu dữ liệu trên đường truyền vào thanh ghi dịch bên trong của thiết bị. CPHA = ‘0’ có nghĩa là dữ liệu nên được dịch và/hoặc lấy mẫu ở sườn chuyển tiếp đầu tiên của xung nhịp tính từ trạng thái không hoạt động đang xét, trong khi CPHA = ‘1’ có nghĩa là dữ liệu nên được lấy mẫu trên sườn chuyển tiếp thứ hai của xung nhịp tính từ trạng thái không hoạt động đang xét. Lưu ý rằng nếu giá trị không hoạt động của xung nhịp là mức thấp thì sườn xung nhịp đầu tiên là sườn tăng nhưng nếu giá trị không hoạt động của xung nhịp là mức cao thì sườn xung nhịp đầu tiên là sườn giảm. Phụ thuộc vào giá trị của tham số CPOL và CPHA, giao thức SPI định nghĩa ra bốn chế độ hoạt động như được mô tả trong Bảng 9‑1.

Bảng 9‑1. Định nghĩa các chế độ hoạt động theo các tham số CPOL và CPHA.

Định nghĩa các chế độ hoạt động theo các tham số CPOL và CPHA

Hình 9‑8 đến Hình 9‑11 đưa ra các ví dụ minh họa về quá trình truyền thông trong bốn chế độ của giao thức SPI. Trong các ví dụ này, dữ liệu được hiển thị trên đường MOSI và MISO. Thời điểm bắt đầu và kết thúc truyền được biểu thị bằng đường đứt nét màu xanh lá, sườn lấy mẫu được chỉ thị bằng đường đứt nét màu cam và sườn dịch dữ liệu được chỉ thị bằng đường đứt nét màu xanh lam.

Hình 9‑8 cho thấy giản đồ thời gian cho chế độ SPI 0. Trong chế độ này, phân cực của xung nhịp là CPOL = 0 cho biết trạng thái không hoạt động của tín hiệu xung nhịp ở mức thấp. Pha xung nhịp trong chế độ này là CPHA = 0 cho biết dữ liệu được lấy mẫu ở sườn tăng (được hiển thị bằng đường đứt nét màu cam) và dữ liệu được dịch vào thanh ghi trên sườn giảm (hiển thị bằng đường đứt nét màu xanh lam) của tín hiệu xung nhịp.

Chế độ SPI 0 (CPOL = 0, CPHA = 0): trạng thái không hoạt động của CLK ở mức thấp, dữ liệu được lấy mẫu ở sườn tăng và được dịch ở sườn giảm

Hình 9‑8. Chế độ SPI 0 (CPOL = 0, CPHA = 0): trạng thái không hoạt động của CLK ở mức thấp, dữ liệu được lấy mẫu ở sườn tăng và được dịch ở sườn giảm.

Hình 9‑9 cho thấy giản đồ thời gian cho chế độ SPI 1. Trong chế độ này, phân cực của xung nhịp là CPOL = 0 cho biết trạng thái không hoạt động của tín hiệu xung nhịp ở mức thấp. Pha xung nhịp trong chế độ này là CPHA = 1 cho biết dữ liệu được lấy mẫu ở sườn giảm (được hiển thị bằng đường đứt nét màu cam) và dữ liệu được dịch vào thanh ghi trên sườn tăng (hiển thị bằng đường đứt nét màu xanh lam) của tín hiệu xung nhịp.

Chế độ SPI 1 (CPOL = 0, CPHA = 1): trạng thái không hoạt động của CLK ở mức thấp, dữ liệu được lấy mẫu ở sườn giảm và được dịch ở sườn tăng

Hình 9‑9. Chế độ SPI 1 (CPOL = 0, CPHA = 1): trạng thái không hoạt động của CLK ở mức thấp, dữ liệu được lấy mẫu ở sườn giảm và được dịch ở sườn tăng.

Hình 9‑11 cho thấy giản đồ thời gian cho chế độ SPI 2. Trong chế độ này, phân cực của xung nhịp là CPOL = 1 cho biết trạng thái không hoạt động của tín hiệu xung nhịp ở mức cao. Pha xung nhịp trong chế độ này là CPHA = 1, cho biết dữ liệu được lấy mẫu ở sườn giảm (được hiển thị bằng đường đứt nét màu cam) và dữ liệu được dịch vào thanh ghi trên sườn tăng (hiển thị bằng đường đứt nét màu xanh lam) của tín hiệu xung nhịp.

Chế độ SPI 2 (CPOL = 1, CPHA = 1): trạng thái không hoạt động của CLK ở mức cao, dữ liệu được lấy mẫu ở sườn giảm và được dịch ở sườn tăng

Hình 9‑11. Chế độ SPI 2 (CPOL = 1, CPHA = 1): trạng thái không hoạt động của CLK ở mức cao, dữ liệu được lấy mẫu ở sườn giảm và được dịch ở sườn tăng.

Hình 9‑12 cho thấy giản đồ thời gian cho chế độ SPI 3. Trong chế độ này, phân cực của xung nhịp là CPOL = 1 cho biết trạng thái không hoạt động của tín hiệu xung nhịp ở mức cao. Pha xung nhịp trong chế độ này là CPHA = 0, cho biết dữ liệu được lấy mẫu ở sườn tăng (được hiển thị bằng đường đứt nét màu cam) và dữ liệu được dịch vào thanh ghi trên sườn giảm (hiển thị bằng đường đứt nét màu xanh lam) của tín hiệu xung nhịp.

Chế độ SPI 3 (CPOL = 1, CPHA = 0): trạng thái không hoạt động của CLK ở mức cao, dữ liệu được lấy mẫu ở sườn tăng và được dịch ở sườn giảm

Hình 9‑12. Chế độ SPI 3 (CPOL = 1, CPHA = 0): trạng thái không hoạt động của CLK ở mức cao, dữ liệu được lấy mẫu ở sườn tăng và được dịch ở sườn giảm.

Nguyễn Kiêm Hùng

Hung K. Nguyen studied “Electronic Engineering” in both his bachelor’s and master’s degrees at the Vietnam National University, Hanoi, Vietnam. He received the bachelor’s degree in 2003. After receiving his bachelor’s degree, He worked as an internship in the Research Center of Electronics and Telecommunications. In 2006, He received the master’s degree in electronic engineering from VNU University of Engineering and Technology (VNU-UET). Before pursuing his Ph.D’s degree, He worked as a researcher at the Laboratory for Smart Integrated Systems in VNU University of Engineering and Technology for two years. In 2008, He went to Southeast University, Nanjing, China to get his Ph.D degree. He received the Ph.D. degree in Microelectronics and Solid State Electronics from Southeast University in 2013. After got his Ph.D’s degree, He returned to VNU University of Engineering and Technology to continue his research in VLSI design. He works currently as an assistant professor and senior researcher at VNU Key Laboratory for Smart Integrated Systems. His research interests mainly include multimedia processing, reconfigurable computing, and SoC designs.

This Post Has 2 Comments

  1. excellent article. Keep posting this kind of information on your page.
    I am very impressed with your website.
    Hello, you are doing great.

  2. yify

    There is noticeably a bundle to learn about this. I assume you made sure nice points in options also. Gwendolyn Colin Alvin

Trả lời