Serial Peripheral Interface

Bách khoa toàn thư mở Wikipedia
Bước tới điều hướng Bước tới tìm kiếm
SPI bus
Loại Serial communication bus
Người thiết kế Motorola
Ngày thiết kế 1979; 42 năm trước (1979)
Giao thức Truyền thông nối tiếp, Song công

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ộ[1] được sử dụng để truyền dữ liệu trong khoảng cách ngắn,[2] 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-wireone-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.[3] 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[sửa | sửa mã nguồn]

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:[4]

  • 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[sửa | sửa mã nguồn]

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[sửa | sửa mã nguồn]

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. 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. Khi hoàn tất, master ngừng việc đảo xung clock và ngừng chọn chân CS với slave tương ứng.

Tài liệu tham khảo[sửa | sửa mã nguồn]

  • NXP (2004). SPI Block Guide V04.01 (PDF). NXP.

Chú thích[sửa | sửa mã nguồn]

  1. ^ NXP 2004, tr. 13, "1.1 Overview"
  2. ^ “Extending the SPI bus for long-distance communication” (PDF). Truy cập ngày 14 tháng 10 năm 2021" ... designed for short-distance communication between integrated circuits."CS1 maint: postscript (liên kết)
  3. ^ “What is Serial Synchronous Interface (SSI)?”. Truy cập ngày 8 tháng 12 năm 2019.
  4. ^ NXP 2004, tr. 15, "2.2 Detailed Signal Description"

Liên kết ngoài[sửa | sửa mã nguồn]