2011년 9월 19일 월요일

SPI 통신

SPI : Serial Peripheral Interface

http://www.terms.co.kr/SPI.htm
SPI (serial peripheral interface) ; 주변장치용 직렬 인터페이스

SPI는 두 개의 주변장치간에 직렬 통신으로 데이터를 교환할 수 있게 해주는 인터페이스로서, 그 중 하나가 주가 되고 다른 하나가 종이 되어 동작한다. SPI는 전이중 방식으로 동작하는데, 이는 데이터가 양방향으로 동시에 전달될 수 있음을 의미한다. SPI는 대부분 CPU와 주변장치들간에 통신을 하는 시스템에 주로 채용되지만, 두 개의 마이크로프로세서들 사이를 SPI의 형태로 연결하는 것도 가능하다. 이 용어는 원래 모토롤라에서 만들어졌으며, National Semiconductor라는 회사에서는 이와 동일한 인터페이스를 "마이크로와이어"라고 부른다.
직렬 인터페이스는 병렬 인터페이스에 비해 몇 가지 장점이 있다. 그 중 가장 큰 장점은 배선이 간단해진다는 것이다. 그 외에 직렬 인터페이스용 전선을 병렬 인터페이스용 전선에 비해 더 길게 만들 수 있는데, 이는 전선 내부의 도선들 간에 누화 등과 같은 간섭이 훨씬 덜하기 때문이다.
SPI에 의해 제어될 수 있는 주변장치들로는 시프트 레지스터, 메모리 칩, 포트 확장기, 디스플레이 드라이버, 데이터 변환기, 프린터, 데이터 저장장치, 센서, 마이크로프로세서 등 여러 가지 형식들이 있다. 데이터가 전선을 통해 시프트 레지스터에 직렬방식으로 들어가면, 각 부시스템에는 병렬처리의 형식으로 전달된다.

http://miro.knu.ac.kr/drupal/node/3445

[펌] SPI통신에 대해...

아래 글에서 중요 내용은 윤교수님의 책에서 발췌한 것입니다.
프로도 및 샘에 관한 얘기등은 제가 그냥 편하게 얘기하려는 것이고, 원저와는 아무런 상관이 없음을 밝히며
교수님께 누가 되지 않기를 바랍니다. (__)
1. SPI 란 근거리용 고속 직렬 동기식 통신 규격이다.
* SPI 통신이란 Serial Peripheral Interface의 약자로
Motorola사에서 개발된 근거리용 고속 직렬 동기식 통신 규격이다.
* MOSI, MISO, SCK, /SS 네 선을 이용한다.
Serial Peripheral Interface를 해석해 보면 "직렬 주변 인터페이스" 정도 될것이다.
USART와 비교해 보면 일단 "고속"이라는 점이 상당한 차이가 있을듯 싶다.
USART가 최고속도 얼마나 나오겠지만, 일반적으로 SPI는 클럭/2 정도가 나온다고 한다.
예를 들어 16MHz를 장착한 MCU에서는 속도가 8M 정도가 나온다는 얘기겠지.
하지만, 이는 이론적인 수치일뿐 실제로 8M가 나오기는 힘들다고 한다.
소프트웨어적인 처리나, 하드웨어 적인 처리도 감안해야 하니까..
어쨌거나 저쨌거나, 이런 이론적인 것이 당장 중요하지는 않다.
우리는 일단 SPI로 개통을 해야 하니까.. 그래도,
2. ATMega128이 갖고 있는 SPI 통신의 특징은 다음과 같다.
128이 갖고 있는 SPI의 기본적인 특징은 한번 훑어보고 지나가도록 하자.
1. 4선을 사용하는 직렬 동기식 통신으로서 전이중 통신이 가능하다.
2. 항상 MASTER와 SLAVE 사이에서 직렬로 데이터를 송수신한다.
3. 마스터의 데이터 송수신 여부에 관계없이 클럭은 항상 마스터가 발생한다.
4. LSB 혹은 MSB부터 전송가능하다.
5. 수십 MHz까지 통신이 가능하며 7가지 전송속도중 택일할수 있다.
6. Sleep Mode를 해제하는 wake-up 기능을 가진다.
한가지 재미난 사실은 128의 ISP기능 자체도 SPI를 이용한다는 점이다.
하지만, 이 경우 MOSI 대신 PDO(SPI Serial Programming Data Output) 단자를 이용하고,
MISO대신 PDI(SPI Serial Programming Data Input) 단자를 사용하도록 되어 있다는 점을 유념하기 바란다.
데이터 쉬트를 안보고 128에 다운로드 해보신 분들은 엉뚱한 MOSI와 MISO에 연결해놓고,
다운로드 안된다고 고심했던 분들도 계시리라 생각한다.
얼마나 허무할것이냐.. ㅠㅠ
3. 하나의 프로도와 다수의 샘은 피곤하다.
앞으로 MASTER는 프로도, SLAVE는 샘이라 부르겠다.
SPI 통신은 비단 하나의 프로도와 하나의 샘만이 아닌, 하나의 프로도와 여러명의 샘을 둘수 있다.
메리와 피핀은 SLAVE라 할수 없는 관계이므로 SLAVE는 샘1, 샘2, 샘n이라 부른다.
하나의 프로도와 n명의 샘이 있는데, 각각의 샘에는 MOSI, MISO, SCK는 공통으로 물리지만,
/SS 만큼은 개별로 할당해 주어야 한다.
생각해 보면 당연한것이, 샘이 3명 있는데, "샘" 하고 부르면, 어느 샘이 응답할것인가?
"샘 원", "샘 투" 라고 정확하게 불러주어야 한다.
고로, 5명의 샘이 있다면, MISO, MOSI, SCK는 공통으로 물려주므로 항상 3선이 필요한데다가,
5명 각각에 /SS를 할당해 주어야 하므로, 8선이 필요하다.
조금만 더 생각해 보면 20개가 있다면 20+3은 23개의 선이 필요하다는 얘기이고,
이것은 회로의 복잡도를 증가시킨다. 즉, 샘이 늘어날수록 회로가 복잡해 진다는 얘기이므로
샘이 많은 회로에서는 SPI를 쓰기가 짜증난다는 얘기다.
하지만, IIC 방식에 비해서 통신 제어가 간단하며, 훨씬 높은 속도가 가능하므로
하나의 프로도와 몇명의 샘에 대해서는 적합한 통신방식이라고 할수 있겠다.
또한, 클럭신호를 줄때, rising edge 혹은 falling edge에서 동작하는 데다, 앞쪽 엣지(leading edge), 뒷쪽 엣지(trailing edge)
총 4가지에 의해 데이터가 인식한다.
머리 아프므로 남들 다 쓰는 방식으로 하자. 그냥 이런게 있다는 것만 알아두고, 문제 생길경우 찾아보도록 하자.
4. USART와 SPI는 매우 다른 프로토콜이다 !
USART 통신과 SPI 통신은 상당히 다른데,
(serial이라는 단어가 들어가서 비슷하게 생각하지 말자..
당근이 "java"라는 단어가 들어간 "java"와 "java-script"가 모가 다르냐는 질문 몇년동안 받았다. 아주 괴롭다. ㅠㅠ)
SPI는 프로도와 샘의 관계가 아닌, 프로도와 메리의 관계가 형성된다.
이 둘은 서로 원하는 시점에 원하는 데이터를 마음대로 보낼수 있다.
그러니까, 메리는 프로도가 원치 않아도 데이터를 프로도에게 보낼수 있다는 것이다.
전문 용어로 얘기하자면 MASTER-MASTER의 관계라 이거지.
하지만, SPI는 프로도와 샘의 관계가 형성되면, (즉 MASTER-SLAVE 관계라면)
샘이 프로도에게 말하고 싶다고 해도, 프로도의 허락이 없이는 말하지 못한다는 점이다.
이와 반대로 프로도는 자기가 말하고 싶으면 언제든지 샘에게 말을 건넬수 있다.
그렇다면.. 샘이 말하고 싶다면?
여기서 한가지 꼭 집고 넘어가도록 하자..
프로도가 샘에게 말하고 싶다고 한다면, 언제든지 말을 건넬수 있다고 앞서 얘기하였다.
그렇지만, 프로도가 샘에게 말을 건다 하여도, 샘은 모라도 응답을 해야 한다.
왜냐하면 SPI 통신은 반드시 송수신이 동시에 이루어지기 때문이다.
따라서, 프로도가 샘에게 "이놈아 절대반지 나한테 돌려줘"라고 말하면, 샘은 "네 여기 있습니다. 절대반지" 라고
송수신이 동시에 이루어지면서 데이터가 동시에 오고 간다. 전혀 문제가 없다.
하지만, 샘이 말하고 싶다면 골치가 아파지는데..
샘은 말하고 싶은데, 프로도가 물어보기 전까지는 말할수 없다.
따라서, 프로도는 샘에게 아무런 의미없는 "궁시렁 궁시렁(dummy data)"를 건네준다.
샘은 "아하~ 프로도 나리가 나에게 모라 하는군" 하면서 덩달아 동시에 본인이 원하는 말(데이터)를 건넨다.
하지만, 이때 프로도가 궁시렁 거린것은 샘에게 전혀 의미가 없는 데이터 이므로 그냥 버리고,
자신이 할말을 하는 것이다.
궁금한 점이 생긴다..
샘이 말하고 싶으면 항상 프로도가 "궁시렁 궁시렁"거려야 하는가? 그렇다!
그 궁시렁 궁시렁 대는 데이터는 당연히 의미가 없는거겠지? 그렇다!
그렇다면 왜 궁시렁 대는가? 나한테 따지지 마라! SPI가 그렇게 하는거란다!
본좌 글이 잘 이해가 안가는 분은..
반지의 제왕을 다시 보던가.. SPI를 다시 보던가 해라.. ^^
------------------------------------------------------------------
펌 : 네이버 까페 당근이의 AVR 갖구 놀기
작성자 : 당근이

댓글 없음:

댓글 쓰기