블로그 이미지
래머
오늘도 열심히 개발하는 개발자입니다.

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2015. 2. 23. 22:20 아두이노

원문출처 : http://arduino.cc/en/Reference/SPI

SPI library

 

 

This library allows you to communicate with SPI devices, with the Arduino as the master device.


이 라이브러리는 아두이노를 마스터로하여, SPI디바이스들과 통신을 가능하게 한다.

 

A Brief Introduction to the Serial Peripheral Interface (SPI)

직렬 주변장치 인터페이스(SPI)에 대한 간략한소개

Serial Peripheral Interface (SPI) is a synchronous serial data protocol used by microcontrollers for communicating with one or more peripheral devices quickly over short distances. It can also be used for communication between two microcontrollers.


SPI는 근거리에서 마이크로컨트롤러가 하나 또는 여러개의 주변 장치들과 빠르게 통신하기위한 동기식 직렬 데이터 통신 프로토콜이다. 이것은 또한 두개의 마이크로컨트롤러 사이의통신에 사용될 수 있다.


With an SPI connection there is always one master device (usually a microcontroller) which controls the peripheral devices. Typically there are three lines common to all the devices:

SPI연결에서는 항상 하나의 마스터장치가(대개는 마이크로컨트롤러) 주변장치들을 제어한다. 일반적으로 모든 디바이스들은 3개의 공통 라인을 가진다.

  • MISO (Master In Slave Out) - The Slave line for sending data to the master,
  • MISO(마스터입력슬레이브출력) - 마스터에 데이터를 전송하기위한 슬레이브라인
  • MOSI (Master Out Slave In) - The Master line for sending data to the peripherals,
  • MOSI(마스터출력슬레이브입력) - 주변장치에 데이터를 보내기위한 마스터라인
  • SCK (Serial Clock) - The clock pulses which synchronize data transmission generated by the master

  • SCK(시리얼클럭) - 데이터 전송을 동기화 시키는 마스터가 생성하는 클럭 펄스

 

and one line specific for every device:

또한 모든 장치들을 위한 하나의 라인이 명시된다 :

  • SS (Slave Select) - the pin on each device that the master can use to enable and disable specific devices.
  • SS (슬레이브 선택) - 마스터가 특정 장치를 활성/비활성 시킬 수 있는 각 디바이스상의 핀

 

When a device's Slave Select pin is low, it communicates with the master. When it's high, it ignores the master. This allows you to have multiple SPI devices sharing the same MISO, MOSI, and CLK lines.


슬레이브의 SS핀이 low상태가될때, 마스터와 통신하며, HIGH일때는 마스터를 무시한다. 이것은 동일한 MISO, MOSI 및 CLK라인을 공유한 상태에서 다중의 SPI디바이스연결을 가능하게한다.


 

To write code for a new SPI device you need to note a few things:

SPI장치를 위한 코드를 작성할때 약간의 주의가 필요하다 :

  • Is data shifted in Most Significant Bit (MSB) or Least Significant Bit (LSB) first? This is controlled by the SPI.setBitOrder() function.

  • 데이터가 MSB 또는 LSB로 쉬프트 되는가? 이것은 SPI.setBitOrder() 함수로 제어된다.

  • Is the data clock idle when high or low? Are samples on the rising or falling edge of clock pulses? These modes are controlled by the SPI.setDataMode() function.

  • 데이터 클럭의 대기상태가 HIGH신호일때인가 LOW신호일때인가? 클럭펄스의 상승시 아니면 하강시 샘플되는가?
  • 이 모드들은 SPI.setDataMode()함수를 통해 제어된다.

  • What speed is the SPI running at? This is controlled by the SPI.setClockDivider() function.

  • 얼마의 속도로 SPI가 움직이는가? 이것은 SPI.setClockDivider()함수로 제어된다.

 

The SPI standard is loose and each device implements it a little differently. This means you have to pay special attention to the device's datasheet when writing your code.

 

Generally speaking, there are four modes of transmission. These modes control whether data is shifted in and out on the rising or falling edge of the data clock signal (called the clock phase), and whether the clock is idle when high or low (called the clock polarity). The four modes combine polarity and phase according to this table:


SPI표준은 느슨하고, 각 장치들의 구현에는 약간씩 차이가 있다. 이것이 의미하는것은 코드 작성시 장치의  데이터시트를 주의해서 참조 할 필요가 있다는 것이다. 일반적으로 말해서, 데이터 전송에는 4개의 모드가 있다.이모드들은 클럭 신호의 상승 또는 하강에지에서 데이터의 입/출력 시프트를 할지(클럭 위상이라 불린다), 클럭의 대기상태가 HIGH신호인지 LOW신호인지(클럭의 극성이라 불린다)이다. 4개의 모드들은 아래테이블에서 보여지는것처럼 극성과 위상의  조합을 통해서 만들어진다.

 

ModeClock Polarity (CPOL)Clock Phase (CPHA)
SPI_MODE000
SPI_MODE101
SPI_MODE210
SPI_MODE311

 

The SPI.setDataMode() function lets you set the mode to control clock polarity and phase.


당신은 SPI.setDataMode()함수 호출로  클럭의 극성과 위상 제어모드를 설정할 수 있다.


 

Every SPI device has a maximum allowed speed for SPI Bus. The SPI.setClockDivider() allows you to change the clock speed to make your device working properly (default is 4MHz).


모든 SPI장치들은 SPI 버스 상에서 사용할 수 있는 제한된 최대 속도를 가진다. SPI.setClockDivider()함스로 당신의 장치가 알맞게 작업할 수 있도록 클럭속도를 변경할 수 있다(기본은 4MHz다).


 

Once you have your SPI parameters set correctly you just need to figure which registers in your device control which functions, and you're good to go. This will be explained in the data sheet for your device.

 

For more on SPI, see Wikipedia's page on SPI.


SPI파라메터들을 올바르게 설정했다면, 남은 것은 단지 디바이스를 제어하기 위한 레지스터와 함수들이 참조하는것이다.

이것은 당신의 디바이스 데이터시트에 설명되어 있을것이다.

SPI에 대한 좀더 자세한 부분은, Wikipedia's SPI부분을 참조하라.

 

Connections(연결)

The following table display on which pins the SPI lines are broken out on the different Arduino boards:


다음의 테이블은 서로다른 아두이노 보드들에서 어떠한 핀들이 SPI라인들인지 나타낸다.

 

Arduino BoardMOSIMISOSCKSS (slave)SS (master)
Uno or Duemilanove11 or ICSP-412 or ICSP-113 or ICSP-310-
Mega1280 or Mega256051 or ICSP-450 or ICSP-152 or ICSP-353-
LeonardoICSP-4ICSP-1ICSP-3--
DueICSP-4ICSP-1ICSP-3-4, 10, 52

 

Note that MISO, MOSI, and SCK are available in a consistent physical location on the ICSP header; this is useful, for example, in designing a shield that works on every board.

주의할점은 MISO, MOSI, SCK핀들은 ICSP헤더의 물리적 위치에서 사용될 수 있다는 것이다; 이것은 유용한데, 예를 들면, 모든 보드들 위에서 움직이는 쉴드의 디자인같은 것이다.


 

 

Note about Slave Select (SS) pin on AVR based boards

AVR기반 보드들에서의 슬레이브 선택(SS)핀에 대한 기록


All AVR based boards have an SS pin that is useful when they act as a slave controlled by an external master. Since this library supports only master mode, this pin should be set always as OUTPUT otherwise the SPI interface could be put automatically into slave mode by hardware, rendering the library inoperative.

 

It is, however, possible to use any pin as the Slave Select (SS) for the devices. For example, the Arduino Ethernet shield uses pin 4 to control the SPI connection to the on-board SD card, and pin 10 to control the connection to the Ethernet controller.

모든 AVR기반 보드들은 외부의 마스터 장치로 부터 슬레이브로 제어될 수 있도록 SS핀을 가지고 있다. 라이브러리는 마스터모드만 지원하므로, 이핀은 항상 출력으로 설정되지만, 다른 경우에 SPI인터페이스는 하드웨어를 자동적으로 슬레이브 모드가 되게 할 수 있으며, 이핀을 무시하게 만들어졌다.

어쨌든, 디바이스의 SS에 어떠한 핀이든 사용될 수 있다. 예를들어, 아두이노 이더넷 쉴드는 4번핀을 온보드 SD카드와 SPI통신하기 위한 제어핀으로 이용하며,  10번은 이더넷 컨트롤러와 연결을 제어한다. 


 

Extended SPI functionality for the Due

두에를 위한 SPI 기능 확장


The Arduino Due's SPI interface works differently than any other Arduino boards. The library can be used on the Due with the same methods available to other Arduino boards or using the extended methods. The extended methods exploits the the SAM3X hardware and allows some interesting features like:

두에의 SPI인터페이스는 다른 아두이노 보드들과 다르게 작동한다. 다른 아두이노 보드들에서 이용가능한 동일한 메소드를 이용하거나  확장된 메소드들을 사용할 수 있다.

확장된 메소드들은 SAM3X 하드웨어를 최대한 이용하거나 다음과 같은 몇가지 흥미로운 기능들을 허용한다:

  • automatic handling of the device slave selection.
  • automatic handling of different device configurations (clock speed, data mode, etc) so every device can have its own configuration automatically selected.
  • 디바이스 슬레이브 선택의 자동 핸들링
  • 다른 디바이스 환경의 자동 핸들링(클럭스피드, 데이터모드, 등) 그러므로 모든 디바이스들은 자신의 환경을 자동으로 선택할 수 있다.

 

Arduino Due has three exposed pins for the devices Slave Select (SS) lines (pins 4, 10, and 52).

두에는 SS라인을 위한 3개의 노출된 핀을 가지고 있다(핀4, 10, 52).

 

Due Extended SPI usage

 

 

Functions

 

Examples

 

See also

 

Reference Home

 

Corrections, suggestions, and new documentation should be posted to the Forum.

 

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain. 



'아두이노' 카테고리의 다른 글

아두이노 delay() 함수  (0) 2015.05.02
아두이노 millis() 함수  (0) 2015.05.02
HC-06 블루투스 모듈  (0) 2015.02.09
아두이노 타이머 인터럽트의 주의점 #3  (0) 2015.02.09
아두이노 타이머 인터럽트 사용#2  (0) 2015.02.09
posted by 래머