| Loại | Bus truyền thông nối tiếp đồng bộ | ||
|---|---|---|---|
| Lịch sử | |||
| Người thiết kế | Motorola | ||
| Ngày thiết kế | 1979; 45 năm trước | ||
| Dữ liệu | |||
| Giao thức | Truyền thông nối tiếp, Song công | ||
SPI (tên đầy đủ: 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ộ, chủ yếu dùng để truyền dữ liệu trong các khoảng cách ngắn và rất phổ biến trong các hệ thống nhúng. SPI được Motorola phát triển vào giữa thập niên 1980 và hiện nay là chuẩn phổ biến. Các ứng dụng điển hình của SPI bao gồm thẻ nhớ (Secure Digital cards) và giao tiếp màn hình LCD.
Các thiết bị hỗ trợ SPI hoạt động theo chế độ song công toàn phần (full duplex), với cấu trúc master - slave, trong đó một master quản lý đường truyền. Master sẽ khởi tạo các khung dữ liệu để gửi và nhận. Bus SPI có khả năng kết nối nhiều slave thông qua chân Chip Select (CS) hoặc Slave Select (SS) để lựa chọn slave tương ứng.
SPI còn được biết đến với tên gọi 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 khác như three-wire, two-wire và one-wire.
Mặc dù là một chuẩn truyền thông đồng bộ (yêu cầu xung clock để đồng bộ hóa tín hiệu), SPI khác biệt với giao thức Synchronous Serial Interface (SSI), một giao thức đồng bộ khác cũng sử dụng 4 dây. SSI sử dụng dung sai tín hiệu và chỉ hỗ trợ truyền dữ liệu một chiều, trong khi SPI cho phép giao tiếp giữa một master và nhiều slave.
Các chân tín hiệu
Bus SPI sử dụng bốn chân tín hiệu logic như sau:
- SCLK (Xung Clock Nối tiếp): Xung clock phát ra từ master
- MOSI (Dữ liệu Ra từ Master vào Slave): Chân dùng để truyền dữ liệu từ master đến slave. Chân MOSI của master kết nối với chân MOSI của slave.
- MISO (Dữ liệu Vào từ Slave ra Master): Chân dùng để truyền dữ liệu từ slave đến master. Chân MISO của master kết nối với chân MISO của slave.
- CS/SS (Chọn Chip/Slave): Chân CS do master sử dụng để chọn slave cần giao tiếp.
Thêm vào đó, chân MOSI còn được biết đến với những tên gọi khác:
- SIMO, MTSR: dùng cho cả thiết bị master và slave
- SDI, DI, DIN, SI: chỉ dùng cho thiết bị slave
- SDO, DO, DOUT, SO: chỉ dùng cho thiết bị master
Chân MISO còn được biết đến với các tên khác:
- SOMI, MRST: dùng cho cả thiết bị master và slave
- SDO, DO, DOUT, SO: chỉ dùng cho thiết bị slave
- SDI, DI, DIN, SI: chỉ dùng cho thiết bị master
Trong các thiết bị hoạt động chỉ ở chế độ slave, chân MOSI có thể được gọi là SDI (Dữ liệu Nối tiếp Vào) và chân MISO được gọi là SDO (Dữ liệu Nối tiếp Ra).
Chân Slave Select còn được biết đến với các tên gọi khác:
- SS, SS, SSEL, nSS, /SS, SS# (chọn slave)
- CS, CS (chọn chip)
- CSN (chọn/hoạt động chip)
- CE (kích hoạt chip)
Cơ chế hoạt động
Bus SPI vận hành với một master và một hoặc nhiều slave.
Khi một slave được chọn bởi master để giao tiếp, chân SS sẽ được kéo xuống mức LOW nếu slave cho phép kết nối với master. Một số thiết bị slave yêu cầu tín hiệu xung xuống tại chân SS để thiết lập kết nối master-slave, chẳng hạn như ADC Maxim MAX1242, yêu cầu tín hiệu HIGH -> LOW. Với nhiều slave trên đường truyền SPI, mỗi slave cần một chân SS riêng biệt trên master để thực hiện giao tiếp.
Truyền tải dữ liệu
Để bắt đầu truyền dữ liệu, master sẽ thiết lập xung clock phù hợp với tần số mà slave hỗ trợ, thường lên đến vài MHz. Master sau đó chọn slave cần giao tiếp bằng cách đặt chân SS tương ứng ở mức 0. Nếu có sự chờ đợi trên đường truyền, chẳng hạn như khi quá trình chuyển đổi ADC đang diễn ra, master cần chờ cho đến khi hoàn tất trước khi bắt đầu xung clock.
Quá trình truyền dữ liệu song công diễn ra theo từng chu kỳ xung clock SPI. Trong khi master gửi một bit qua đường dây MOSI, slave nhận bit đó; đồng thời, slave gửi một bit qua đường dây MISO và master nhận bit đó. Quá trình này vẫn tiếp tục ngay cả khi chỉ cần truyền dữ liệu một chiều, chẳng hạn như master chỉ gửi dữ liệu đến slave.
Quá trình truyền dữ liệu thường sử dụng hai thanh ghi dịch có kích thước cố định, ví dụ như 8 bit, một cho master và một cho slave. Tưởng tượng rằng hai thanh ghi này được kết nối theo kiểu vòng. Quá trình truyền bao gồm các bước sau:
Bước 1: Master sẽ thiết lập chân SS với slave tương ứng ở mức thấp để bắt đầu quá trình truyền/nhận dữ liệu.
Bước 2: Bit MSB sẽ được truyền trước. Trong mỗi xung clock, cả master và slave đều dịch ra một bit và gửi bit này đến bên nhận tương ứng. Trong xung clock tiếp theo, mỗi bên nhận sẽ lấy mẫu bit trên đường truyền và lưu bit đó như là bit LSB mới nhất trên thanh ghi dịch. Khi tất cả các bit đã được truyền hoặc nhận hoàn tất, cả master và slave đã hoàn tất trao đổi giá trị thanh ghi. Nếu cần truyền thêm dữ liệu, các thanh ghi dịch sẽ được nạp lại và quy trình này được lặp lại.
Bước 3: Khi quá trình truyền hoàn tất, master sẽ ngừng tín hiệu xung clock và dừng việc chọn chân SS với slave tương ứng. Chân SS sẽ được đưa về mức logic cao bởi master.
Việc truyền dữ liệu qua SPI thường sử dụng 8 bit. Tuy nhiên, cũng có trường hợp truyền nhiều hơn 8 bit, chẳng hạn như 16 bit trong các bộ điều khiển màn hình cảm ứng hoặc giải mã tín hiệu âm thanh, ví dụ như IC TSC2101 của Texas Instruments, hoặc 12 bit trong các bộ chuyển đổi DAC hoặc ADC.
Độ nghiêng và pha xung clock
Ngoài việc thiết lập tần số xung clock, master SPI cần cấu hình độ cực của xung clock (clock polarity) và pha xung clock theo dữ liệu truyền. Tài liệu chính thức Motorola SPI Block Guide gọi hai khái niệm này là CPOL và CPHA (clock polarity và phase). Những khái niệm này áp dụng cho cả master và slave. Biểu đồ thời gian bên cạnh minh họa CPOL và CPHA.
CPOL được xác định dựa trên xung SCK như sau:
- CPOL = 0 khi xung dẫn đầu của chu kỳ là xung cạnh lên, trong khi xung còn lại là xung cạnh xuống.
- CPOL = 1 khi xung dẫn đầu của chu kỳ là xung cạnh xuống, và xung còn lại là xung cạnh lên.
Giá trị của CPOL có thể được đảo ngược bằng cổng NOT logic.
CPHA xác định thời điểm (pha) mà dữ liệu bit sẽ được lấy mẫu trong mỗi chu kỳ xung clock.
- CPHA = 0 khi bit dữ liệu đầu ra khớp với xung SCK còn lại, trong khi xung dẫn đầu nằm giữa khoảng của bit dữ liệu.
- CPHA = 1 khi bit dữ liệu đầu ra khớp với xung SCK dẫn đầu, và xung còn lại nằm giữa khoảng của bit dữ liệu.
Dựa vào các giá trị CPOL và CPHA, chúng ta có 4 chế độ hoạt động khác nhau cho SPI. Các chế độ này được quy định đồng nhất trên tất cả các dòng vi điều khiển hỗ trợ SPI:
| Mode | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Chế độ SPI thường được biểu diễn dưới dạng tuple cho (CPOL, CPHA), ví dụ (0, 1) để chỉ ra CPOL=0 và CPHA=1.
Để truyền thông SPI hoạt động chính xác, cả master và slave phải sử dụng cùng một chế độ (CPOL, CPHA). Lựa chọn 4 chế độ (CPOL, CPHA) không ảnh hưởng đến hiệu suất truyền dữ liệu của SPI.
Kết nối độc lập từng slave
Mô hình phổ biến nhất của 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 với một chân CS riêng biệt trên master. Mỗi chân CS cần có một điện trở kéo lên để đảm bảo mức logic ổn định. Khi thiết lập giao tiếp SPI và chọn một slave, điện trở kéo lên giúp ngăn ngừa việc các chân CS của các slave khác phản hồi không mong muốn từ master.
Kết nối theo dạng daisy chain
Một số thiết bị sử dụng mô hình daisy chain cho SPI, với chân MISO của slave đầu tiên nối vào chân MOSI của slave thứ hai, và tiếp tục như vậy. Các thiết bị slave cần đảm bảo truyền chính xác dữ liệu nhận được từ slave trước đó trong mỗi xung clock. Quá trình nhận và truyền dữ liệu trong mô hình daisy chain kết thúc khi chân/dây SS duy nhất được master thiết lập ở mức logic cao (chuyển từ thấp lên cao). Do đó, mô hình SPI daisy chain chỉ cần một chân SS trên bus.
Tài liệu tham khảo
- NXP (2004). Hướng dẫn SPI Phiên bản 04.01 (PDF). NXP. Bản gốc (PDF) lưu trữ ngày 29 tháng 10 năm 2021. Truy cập ngày 14 tháng 10 năm 2021.
Chú thích
Liên kết ngoài
- Giao tiếp SPI (tài liệu tiếng Nga)
- Дедюхин А.А. (25 tháng 6 năm 2007). “Phân tích và giải mã tín hiệu của các bus I2C, SPI, RS-232C, RS-422, RS-485 và UART với việc sử dụng các máy hiện sóng LeCroy”. prist.ru (bằng tiếng Nga). Truy cập ngày 5 tháng 7 năm 2023.
Các tiêu chuẩn kỹ thuật và Tiêu chuẩn chung của các Bus máy tính có dây | |
|---|---|
| Tổng quan |
|
| Tiêu chuẩn |
|
| Lưu trữ |
|
| Ngoại vi |
|
| Âm thanh |
|
| Cầm tay |
|
| Nhúng |
|
Chú ý: các bus liệt kê theo sắp xếp tăng dần về tốc độ (thô), bus ở cuối có tốc độ nhanh nhất Category:Bus máy tính | |
