Arduino và giao tiếp SPI

Bởi nguyenthanhphi (15/08/2017) 1 Bình luận

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

arduino và giao tiếp SPI

  • 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 mêga 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ị

arduino và giao tiếp SPI 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:

arduino và giao tiếp chuẩn SPI

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

 

Đóng góp ý kiến

Bình luận(1)

  • Bình luận bởi Theolve
    https://newfasttadalafil.com/ - buy cialis online reviews Btabbj Order Tadalis Sx Soft Visit Your Doctor Online Mrgrzv generic name for cialis Lyyuxd https://newfasttadalafil.com/ - Cialis Xwlboo Aqueous humor leaves here Angle Iris Pupil Anterior chamber Cornea Iris Angle Aqueous humor formed here ciliary body Sometimes laser therapy is used to treat narrowangle glaucoma by creating a hole in the periphery of the iris iridotomy which allows aqueous humor to ow more easily out of the anterior chamber and reduces intraocular pressure.
Hotline 0938379351