Arduino Và Giao Tiếp SPI | Cộng đồng Arduino Việt Nam
Có thể bạn quan tâm
I. GIAO TIẾP SPI LÀ GÌ?
SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select). Hình 1 thể hiện một kết SPI giữa một chip Master và 3 chip Slave thông qua 4 đường.- SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
- MISO– Master Input / Slave Output: nếu là chip Master thì đây là đường Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves được nối trực tiếp với nhau.. MOSI – Master Output / Slave Input: nếu là chip Master thì đây là đường Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối trực tiếp với nhau.
- SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
- Nói 1 cách vắn tắt và dễ hiểu:
- MISO - Mang các dữ liệu từ các thiết bị SPI về arduino
- MOSI - Mang các dữ liệu từ Arduino đến các thiết bị SPI
- SS - Chọn thiết bị SPI cần làm việc
- SCK - dòng đồng bộ
Đối với Arduino Uno các chân giao tiếp SPI Lần lượt là SS-10; MOSI-11; MISO-12; SCK-13. Đối với Arduino Mega MISO là 50, MOSI là 51, SCK là 52 và SS thường là 53
Bạn có thể kiểm soát 1 hoặc nhiều thiết bị sử dụng SPI. Ví dụ dưới đây là 1 thiết bị
Dữ liệu được truyền qua lại dữa 2 đường MISO và MOSI. Điều này chỉ thực hiện được khi Dòng SS được thiết lập ở mức thấp LOW. Nói cách khác, để giao tiếp với một thiết bị SPI chúng ta cần thiết lập các dòng SS với thiết bị ở mức thấp LOW, sau đó giao tiếp với nó, sau đó thiết lập các dòng SS trở lại mức cao HIGH. Nếu chúng ta có hai hoặc nhiều thiết bị SPI trên cùng 1 bus, chúng sẽ được kết nối như sau:
Chú ý, ở đây có hai dòng SS - với mỗi 1 thiết bị chỉ sử dụng 1 dòng SS. Bạn có thể sử dụng bất kỳ chân digital nào trên Arduino của bạn cho dòng SS. Chỉ cần nhớ là để tất cả các dòng SS ở mức cao HIGH , "ngoại trừ" dòng SS mà bạn muốn kết nối với các thiết bị SPI vào thời điểm đó.
Điều này tương tự như việc rất nhiều cánh cổng trước mặt nhưng chỉ cho phép 1 người đi vào. Ta mở 1 cổng và cho 1 người duy nhất vào, rồi sau đó đóng cánh cổng đó và mở cánh cổng khác và lựa chọn người khác
II. LÀM THẾ NÀO ĐỂ TÔI CÓ THÊ GỬI DỮ LIỆU ĐẾN CÁC THIẾT BỊ KẾT NỐI SPI VỚI ARDUINO?
Trước hết, chúng ta cần phải sử dụng thư viện SPI. Nó được đính kèm mặc định khi bạn cài đặt Arduino IDE,bạn chỉ việc #include nó vào code của mình
#include "SPI.h"Tiếp theo, trong void.setup () khai báo pin (s) để sử dụng cho dòng SS và cài đặt chúng ở dạng OUTPUT. Ví dụ:
pinMode(ss, OUTPUT);Kích hoạt giao tiếp SPI
SPI.begin();và cuối cùng chúng ta cần phải xác định cách để gửi dữ liệu, MSB hay LSB trước bằng cách sử dụng:
SPI.setBitOrder(MSBFIRST);Hoặc là
SPI.setBitOrder(LSBFIRST);Và cuối dùng là đưa dòng SS về mức thấp, gửi dữ liệu và đưa về mức cao
digitalWrite(SS, LOW); SPI.transfer(value); digitalWrite(ss, HIGH);Việc gửi dữ liệu là khá đơn giản, còn việc nhận tất nhiên là do thiết bị slave SPI giải quyết. Trong bài viết tới mình sẽ đề cập đến vấn đề giao tiếp SPI giữa các boad arduino với nhau.
Thực tế việc sử dụng giao tiếp SPI đôi khi khá rườm rà và phức tạp, để hiểu sâu được cách giao tiếp với các thiết bị SPI cần nghiên cứu kỹ datasheet của thiết bị. 1 số module thậm chí đã được hỗ trợ sẵn thư viện để chúng ta có thể dễ dàng giao tiếp SPI với chúng mà không cần quan tâm đến việc xác định LSBFIRST hay MSBFIRST
1 ví dụ phổ biến về giao tiếp SPI là với module micro SD card các bạn có thể xem lại bài viết của bạn HưngUS
Chúc các bạn thành công
Từ khóa » Tốc độ Spi
-
Chuẩn Giao Tiếp SPI - Trung Kien's Blog
-
Giao Tiếp SPI - Deviot
-
Tốc độ SPI Và I2C ???? - Dien Tu Viet Nam
-
Chuẩn Giao Tiếp SPI Và Cách Kết Nối
-
Lựa Chọn Giữa I2C Và SPI Cho Dự án Của Bạn - EYEWATED.COM
-
Hướng Dẫn Sử Dụng Giao Tiếp SPI Trên STM32F4 - TAPIT
-
Chuẩn Giao Tiếp SPI Là Gì - ĐIỆN TỬ TƯƠNG LAI
-
Giao Tiếp SPI - IoTDev
-
Chuẩn Giao Tiếp SPI - Diễn đàn Kỹ Thuật điện Tử
-
Bài 3 : Lập Trình Raspberry Giao Tiếp SPI - MLAB
-
BÀI 11: SPI VỚI STM32F1 - Chia Sẻ Các Vấn đề điện Tử
-
Bộ Lập Trình Usb Spi Tốc Độ Cao Cho Ezp2019 24 25 26 93 ...
-
Chip Bios Tốc Độ Cao Ezp2019 Usb Spi Hỗ Trợ 24 25 93 Eeprom ...
-
Jtag Spi Chất Lượng, Giá Tốt 2021
-
Bài 12: Lập Trình STM32 Với Giao Thức SPI - Khuê Nguyễn
-
USB Tốc Độ Cao Để SPI I2C PWM ADC GPIO UART Có Thể Lâm ...
-
Lập Trình STM32 Với Giao Thức SPI - OLP Tiếng Anh
-
Usb Tốc Độ Cao Ezp2019 Spi Hỗ Trợ 32m Flash 24 25 93 Eeprom ...
-
Chuẩn Giao Tiếp Spi Và Cách Kết Nối