arduino
SPI 통신
수색…
비고
칩 선택 신호
대부분의 슬레이브는 액티브 로우 칩 선택 입력을 갖는다. 따라서 칩 선택 핀을 초기화하고 사용하는 적절한 코드는 다음과 같습니다.
#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에 알린다.
- 특정 칩에 대해 SPI 구성
클록 라인은 다른 SPI 모드에서 다른 유휴 상태를 갖는다. 슬레이브가 선택된 상태에서 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()
에 대한 호출 쌍 사이에서 SPI를 사용하려고하면 오류가 발생할 수 있습니다. 구현 방법은 구현에 따라 다릅니다.
Arduino 참조 : SPISettings를 참조 하십시오 .
인터럽트 서비스 루틴에서 SPI 사용
ISI 내에서 SPI를 사용해야하는 경우 다른 트랜잭션이 동시에 수행되지 않을 수 있습니다. SPI 라이브러리는이를 촉진하기 위해 usingInterrupt(interrupt_number)
를 제공합니다. beginTransaction()
이 호출 될 때마다 주어진 인터럽트를 비활성화하여 작동하므로 beginTransaction()
및 endTransaction()
대한 호출에서 인터럽트가 발생하지 않습니다.
기본 사항 : SPI 및 칩 선택 핀 초기화 및 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 트랜잭션을 적절하게 사용한다 (비고 참조)
- 1 바이트를 전송하기 위해서만 SPI를 사용합니다. 여기에 사용되지 않는 배열을 전송하는 방법도 있습니다.