SPI 통신 (2)

2016. 8. 11. 16:23 from MCU/ARM

SPI 실습 방법


실습 방법 :  USART와 SPI를 서로 연결해서 통신을 수행. USART1을 master, SPI1을 slave로 설정. USART는 synchronous와 ansynchronous둘 다 가능한데 synchronous mode를 사용하여 USART_CK 핀에서 clock을 공급할 수 있도록 한다. 


아래 그림은 SPI와 연결되는 모습을 개념도로 나타낸 그림이다.

UART통신에서 전송되는 data는 Start bit, Stop bit가 존재하고 있다. 하지만 SPI와 연결하는 경우에 Start bit, Stop bit에서는 클럭이 발생하지 말아야 한다. 이것은 실제 전송하려는 data가 아니기 때문이다.



CPOL CPHA


 CPOL은 Polarity를 말하고 CPHA는 Phase를 말한다. CPOL(polarity)데이터를 전송할 때 공급되는 클럭이 Idle 상태일 때 low일지 high일지 정할 수 있고, CPHA(phase)는 falling edge에 data를 읽고 쓸지 혹은 rising edge일 때 data를 읽고 쓸지 정할 수 있다. CPOL, CPHA 각 register의 값에 따라 data전송 방식은 아래와 같다.



 위 Diagram을 보면 Phase가 0이면 polarity에 상관 없이 첫 번째 edge(rising edge)에서 값을 읽고 Phase가 1이면 polarity에 상관 없이 두 번째 edge(falling edge)에서 값을 읽는다.


For CPOL = 0, the clock idles at logic zero. If CPHA = 0, data are read on the rising edge and change on the falling edge of SCK. If CPHA = 1, data are read on the falling edge and change on the rising edge of SCK.


For CPOL = 1, the clock idles at logic high. If CPHA = 0, data are read on the falling edge and change on the rising edge of SCK. If CPHA = 1, data are read on the rising edge and change on the falling edge of SCK.





 위 그림은 실제 MPU 6500 datasheet에 들어있는 SPI timing diagram 이다. SCLK를 보면 Idle 상태에서 1에 있고 첫 번째(falling) edge에서 아무것도 안하고(아마도 data change가 이루어질 듯) 두 번째(rising) edge에서 read data가 이루어지고 있다.




참고 : http://electronicdesign.com/microcontrollers/isolate-your-high-speed-spi-bus-despite-long-propagation-delays, ARM Cortex-M3 시스템 프로그래밍 완전정복2

'MCU > ARM' 카테고리의 다른 글

ADC independent DMA (2)  (0) 2016.08.14
ADC main feature(1)  (0) 2016.08.13
SPI 통신 (3)  (0) 2016.08.11
SPI 통신 (1)  (0) 2016.08.11
(*(volatile unsigned *))0x40021018 의미  (1) 2013.12.15
Posted by 나무길 :

SPI 통신 (1)

2016. 8. 11. 15:00 from MCU/ARM

SPI(Serial Peripheral Interface) communication


SPI란 지금은 구글에 합병되버린 Motorola 사에서 처음 고안한 통신 방식으로 MCU와 주변 장치간의 Serial 통신을 위한 규약입니다. 외부 주변장치와 Clock을 통하여 동기화하는 동기식 통신 방식이며, 하나의 Master와 하나 또는 다수의 Slave Device간의 통신 방식입니다.


통신 방식이 아주 간단하여 대표적으로 사용되는 통신 방식입니다.



SPI 통신의 장점


 - 완전한 전이중(Full duplex) 통신 : 내가 말하면서 들을수도 있어요.

 - 전송되는 비트에 대한 완전한 프로토콜 유연성 :  최대 16비트까지 맘대로 길이를 조작할 수 있어요.

 - 전송기가 필요하지 않음 : 흔히 말하는 트랜시버 사용할 필요 없음

 - 매우 단순한 하드웨어 인터페이스 처리 : 아주 단순한 센서나 메모리에서 많이 사용

 - IC 패키지에 4개의 핀만 사용


SPI 통신의 단점


 - 하드웨어 슬레이브 인식이 없음

 - 슬레이브에 의한 하드웨어 흐름제어가 없음

 - 오류 검사 프로토콜이 정의되어 있지 않음

 - 노이즈 스파이크에 영향을 받는 경향이 있음

 - RS-232, CAN 버스보다 비교적 더 짧은 거리에서 동작 (칩간 통신에서만 주로 사용)

 - 하나의 마스터 장치만 지원


라고 위키피디아에 설명이 되어 있죠.


 

1. SPI에서 사용되는 핀이 뭐죠?


우선은 SPI에서 사용되는 핀의 뜻을 알아보는 것이 SPI 통신을 알기 위해 좋을 것 같습니다.

핀의 이름은 약어로 많이 불리우기 때문에 처음엔 어렵지만 한번만 설명을 들으면 쉬워요. 아래표를 확인해 보시죠

.



 


SCLK는 단순한 동기화 신호이며, 통신 Clock이라고 생각하면 되겠습니다. MOSI는 Master에서 Slave로 가는 방향성이 있는 데이터 선이라고 생각하면 되겠고요. MISO는 Slave에서 Master로 가는 방향성이 있는 데이터 선이죠.


SS는 하나의 Master장치가 여러개의 Slave 장치와 통신할 때 하나를 선택하여 걔랑만 귓속말 하려고 할 때 사용하는 핀입니다.


2. SPI 통신의 동작 구조


쉬프트 레지스터를 아시나요?? 모르시면 네이버 형님한테 한번 물어 보시고요.

SPI 통신은 SCK 의 클럭에 따라서 마스터에서 슬레이브로 한비트를 전송하고 슬레이브에서도 마스터로 한비트를 전송합니다.



이해하기 어려울 수도 있으니까 아주 쉽게 마스터에서 슬레이브로 "가나다라"라는 데이터를 보내려고 한다고 생각해 보자고요.






위의 그림을 보시면 초기에는 마스터의 쉬프트 레지스터에 "가나다라"라는 데이터가 있고 슬레이브 쪽에는 의미없는 쓰레기값이 있습니다.


SCK를 통해 클럭을 전송할 때마다 하나의 데이터가 마스터에서 슬레이브로 옮겨지고, 또한 슬레이브에서 마스터로 옮겨지는 것을 확인할 수 있습니다.


4개의 비트를 옮기는 데에는 4 클럭 전송 후가 되겠죠? 4번 SCK를 통해 데이터를 옮기고 나서는 목적한 대로 슬레이브에 마스터의 데이터 "가나다라"가 저장되었습니다.


마스터는 쓰레기값이 의미 없다면 그냥 버려버리면 되겠죠?


출처 : http://www.mcublog.co.kr/1828

'MCU > ARM' 카테고리의 다른 글

ADC independent DMA (2)  (0) 2016.08.14
ADC main feature(1)  (0) 2016.08.13
SPI 통신 (3)  (0) 2016.08.11
SPI 통신 (2)  (0) 2016.08.11
(*(volatile unsigned *))0x40021018 의미  (1) 2013.12.15
Posted by 나무길 :

장치 선택


STM32 내장 ADC 속도와 외장 ADC(MCP3204/3208) 속도를 비교하여 더 빠른 장치를 선택한다.



* ADC conversion time 계산 방법 : sample clock 과 conversion clock이 먼저 정해지고 ADC clock 에 의해서 총 conversion time이 정해진다. 아래 STM32에서 Time conversion 구하는 과정을 보여주고 있다.


ADC samples the input voltage for a number of ADC_CLK cycles which can be modified using the SMP[2:0] bits in the ADC_SMPR1 and ADC_SMPR2 registers. Each channel can be sampled with a different sample time. The total conversion time is calculated as follows: Tconv = Sampling time + 12.5 cycles


Example:

With an ADCCLK = 14 MHz and a sampling time of 1.5 cycles:

Tconv = 1.5 + 12.5 = 14 cycles = 1 μs


1. STM32F103CB ADC conversion time



- conversion time : 1 us

- stm32f10x의 ADCCLK : 최대 14MHz

- 총 conversion clock : 14 cycles (sampling clock + conversion clock)

sampling clock은 1.5cycles,  conversion clock은 12.5 cycles. (conversion clock은 ADC_SMPR register를 통해서 바꿀수 있다.)


* systemclock이 56 MHz 에서 72 MHz로 늘었을 때 ADC conversion time이 증가하는 이유는 72 MHz로는 MAX ADCCLK을 만들 수 없기 때문이다. 그나마 prescaler로 제일 가깝게 접근할 수 있는 것은 72/6 MHz = 12 MHz 이다. Tconv = 1.5 + 12.5 = 14 cycles, 14 cycle / 12MHz = 1.66666 us. 따라서 systemclock이 늘어났지만 ADC conversion time은 증가하게 된다.




2. MCP3204/3208 ADC conversion time



- SPS(sampling per second = sampling rate)는 sampling 비율을 말하는 것으로 conversion timing의 척도가 된다.




- conversion time : 6.75 us

- MCP 3204/3208 clock : 2MHz (Vdd = 5V)

- 총 conversion clock : 13.5 clock (sample clock + conversion clock)

Analog input sample time : typically 1.5 cycles, conversion time : 12 cycles





3. 사용할 analog device

(1) PSD sensor

 - 적외선 거리측정 센서 프로 (20~150cm) [LK-DMS-PRO]



거리 측정 시간이 최소 28.7ms, 최대 47.9ms. 위 두 device 중 아무거나 선택해도 오버스팩.


굳이 오버스팩을 사용할 필요없으므로 STM32를 사용하고 ADCCLK을 매우 낮게 하여 적당한 스팩으로 값 받기


(2) IR sensor

IR sensor는 거의 analog 처럼 값이 나오는 것 같다. 즉 ADC conversion이 빠르면 빠를 수록 좋을 듯.


빠를 수록 좋기 때문에 STM32를 사용하고 ADCCLK은 최대로 놓고 DMA를 통해서 값 받기

'project > 씨름로봇v2' 카테고리의 다른 글

PSD sensor 6개 사용시 노이즈 문제  (0) 2016.08.24
motor 와 battery 선정  (0) 2016.08.24
Posted by 나무길 :