arduino
एसपीआई संचार
खोज…
टिप्पणियों
चिप सिलेक्ट सिग्नल्स
अधिकांश दासों में एक सक्रिय कम चिप चयन इनपुट होता है। एक चिप चयन पिन को इनिशियलाइज़ और उपयोग करने के लिए उचित कोड यह है:
#define CSPIN 1 // or whatever else your CS pin is
// init:
pinMode(CSPIN, OUTPUT);
digitalWrite(CSPIN, 1); // deselect
// use:
digitalWrite(CSPIN, 0); // select
... perform data transfer ...
digitalWrite(CSPIN, 1); // deselect
एक गुलाम का चयन करना उतना ही महत्वपूर्ण है जितना कि उसका चयन करना, क्योंकि एक गुलाम MISO लाइन का चयन करते समय ड्राइव कर सकता है। कई दास हो सकते हैं, लेकिन केवल एक ही MISO चला सकता है। यदि किसी दास को ठीक से विस्थापित नहीं किया जाता है, तो दो या अधिक दास MISO चला सकते हैं, जिससे उनके आउटपुट के बीच शॉर्ट्स हो सकते हैं और उपकरणों को नुकसान हो सकता है।
लेन-देन
लेनदेन दो उद्देश्यों की पूर्ति करते हैं:
- एसपीआई को बताएं कि हम किसी विशेष संदर्भ में इसका उपयोग कब शुरू और समाप्त करना चाहते हैं
- एक विशिष्ट चिप के लिए SPI कॉन्फ़िगर करें
क्लॉक लाइन में अलग-अलग एसपीआई मोड में अलग-अलग निष्क्रिय अवस्थाएं हैं। एक स्लेव का चयन करते समय SPI मोड को बदलना दास को भ्रमित कर सकता है, इसलिए हमेशा एक स्लेव का चयन करने से पहले SPI मोड सेट करें। एसपीआई विधा एक साथ सेट किया जा सकता SPISettings
आपत्ति के लिए पारित SPI.beginTransaction
:
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
digitalWrite(CSPIN, 0);
... perform data transfer ...
digitalWrite(CSPIN, 1);
SPI.endTransaction();
SPISettings
भी कहीं और संग्रहीत किया जा सकता है:
SPISettings mySettings(1000000, MSBFIRST, SPI_MODE0);
SPI.beginTransaction(mySettings);
यदि कोड का एक और हिस्सा एसपीआई को कॉल टू beginTransaction()
और endTransaction()
बीच का उपयोग करने की कोशिश करता है, तो एक त्रुटि उठाई जा सकती है - यह कैसे किया जाता है यह कार्यान्वयन पर निर्भर करता है।
Arduino संदर्भ भी देखें : SPISettings
इंटरप्ट सर्विस रूट्स में SPI का उपयोग करना
यदि ISI के भीतर SPI का उपयोग किया जाना है, तो उसी समय कोई अन्य लेनदेन नहीं हो सकता है। एसपीआई लाइब्रेरी इसे सुगम बनाने के लिए usingInterrupt(interrupt_number)
का उपयोग करती है। यह दिया व्यवधान जब भी अक्षम करके काम करता है beginTransaction()
, कहा जाता है तो बाधित कर सकते हैं करने के लिए कॉल के लिए कि जोड़ी के बीच आग नहीं beginTransaction()
और endTransaction()
।
इसके अलावा Arduino संदर्भ देखें : SPI :Interrupt का उपयोग करते हुए
मूल बातें: एसपीआई और एक चिप चयन पिन को इनिशियलाइज़ करें, और 1-बाइट ट्रांसफ़र करें
#include <SPI.h>
#define CSPIN 1
void setup() {
pinMode(CSPIN, OUTPUT); // init chip select pin as an output
digitalWrite(CSPIN, 1); // most slaves interpret a high level on CS as "deasserted"
SPI.begin();
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
digitalWrite(CSPIN, 0);
unsigned char sent = 0x01;
unsigned char received = SPI.transfer(sent);
// more data could be transferred here
digitalWrite(CSPIN, 1);
SPI.endTransaction();
SPI.end();
}
void loop() {
// we don't need loop code in this example.
}
यह उदाहरण:
- ठीक से एक चिप चयन पिन का उपयोग करता है और उसका उपयोग करता है (टिप्पणी देखें)
- एसपीआई लेनदेन का ठीक से उपयोग करता है (टिप्पणी देखें)
- केवल एक एकल बाइट को स्थानांतरित करने के लिए SPI का उपयोग करता है। सरणियों को स्थानांतरित करने के लिए एक विधि भी है, जिसका उपयोग यहां नहीं किया गया है।