1. CC2520이란?
CC2520은 RF 무선 통신 칩이다. 이것을 이용하면 2.4 GHz 대역에서 무선 통신을 할 수 있다.또한 ZigBee protocol stack을 올리면 ZigBee 통신도 가능하게 된다. CC2520은 TI사에서 만들었다. 따라서 CC2520과 관련된 자료는 http://www.ti.com에서 받을 수 있다. 본 보고서에서 사용하게 될 모듈은 Mango-Z1이다. Mango-Z1은 Cortex-M3와 CC2520을 결합한 모듈이며, 2.4GHz ZigBee/IEEE 802.15.4 RF transceiver가 가능하다.
1.1 회로도 분석
펌웨어 제작에 앞서 하드웨어가 어떻게 구현되어 있는지 보도록 하자. CC2520은 아래와 같이 STM32F103RB에 연결되어 있다.
그림 1 Mango-Z1 회로도
Mango-Z1 회로도에서 CC2520 부분을 조금 더 자세히 보면 아래와 같다.
그림 2 Mango-Z1 보드에서 CC2520
CC2520에 연결된 부분이 어떤 핀에 연결되어 있는지 파악하기 위해STM32F103RBT6_LQFP64 회로도를 분석할 필요가 있다. 따라서 아래 그림을 참고하여 매칭되는 핀을 정리해보자.
표 1 STM32F103RBT6_LQFP64 회로도
두 회로도를 참고하여 정리하면 아래와 같이 된다. 서로 매칭 되는 핀을 알아야 소프트웨어 코딩을 할 수 있다. CC2520은 STM32F103RB와 SPI 통신으로 작동하게 되는데 SPI 통신에 관해서는 뒤에서 자세히 다루겠다.
CC2520 | STM32F103RB | Type | 설명 | ||
Signal | Pin # | Signal | Pin # | ||
SPI | |||||
SCLK | 28 | PA5_SPI1_SCK_ADCIN5 | 21 | I | Serial Clock. Maximum 8MHz |
SO | 1 | PA6_SPI1_MISO_ADCIN6_T3CH1 | 22 | O | Serial Out |
SI | 2 | PA7_SPI1_MOSI_ADCIN7_T3CH2 | 23 | I | Serial In |
CSn | 3 | PA4_SPI1_NSS_U2CK_ADCIN4 | 20 | I | Chip Select, active low |
General Purpose digital I/O | |||||
GPIO0 | 10 | PC8 | 39 | IO |
|
GPIO1 | 9 | PC9 | 40 | IO |
|
GPIO2 | 7 | PC10 | 51 | IO |
|
GPIO3 | 6 | PC11 | 52 | IO |
|
GPIO4 | 5 | PC12 | 53 | IO |
|
GPIO5 | 4 | PD2_T3_ETR | 54 | IO |
|
Misc | |||||
RESETn | 25 | PC6 | 37 | I | External reset pin, active low |
VREG_EN | 26 | PC7 | 38 | I | High일 때, 동작 |
표 2 CC2520과 STM32F103RB 핀 설명
1.2 SPI(Serial Peripheral Interface) 통신
SPI는 근거리용 고속 직렬 동기식 통신 규격이다. Motorola에서 개발한 통신 규격이다. 위 표에서 본 것처럼 총 4개의 선(MOSI, MISO, SCK, NSS)을 이용한다. MOSI는 Master Out Slave In, MISO는 Master In Slave Out을 의미한다. 아래 그림을 보면 더 쉽게 이해가 될 것이다. Master는 STM32가 될 것이고 Slave는 CC2520이 될 것이다.
그림 3 CC2520 SPI 통신
SPI는 직렬 동기식 통신 방식으로 Full Duplex 통신이 가능하다. 클럭은 Master에서 제공해주고, CC2520은 최대 8 MHz 속도로 전송할 수 있다. 이론적으로는 STM32F103RB의 최대 클럭이 36MHz이기 때문에 4.5MHz가 최대 클럭이 된다.
Master는 하나, Slave는 여러 개를 사용할 수 있다. 이 때 MISO와 MOSI, CLK은 같은 라인으로 사용 가능하지만 NSS는 각 Slave마다 따로 주어야 한다. NSS는 Negative Slave Select로 각 Slave를 구분하기 위한 신호이다.
아래 그림은 SPI 통신을 할 때 나타나는 신호 파형이다. 그림을 참고하여 더 자세히 설명해보자.
그림 4 SPI 통신 타이밍 다이어그램
SPI 통신은 총 4가지 동작 방식을 가질 수 있다. rising edge 혹은 falling edge, leading edge혹은 trailing edge을 선택하여 4가지 방법을 만들 수 있다. 표로 간략하게 정리해보겠다.
CPHA | CPOL | 설명 |
0 | 0 | leading edge, rising edge |
0 | 1 | leading edge, falling edge |
1 | 0 | trailing edge, rising edge |
1 | 1 | trailing edge, falling edge |
그림 5 SPI 동작 방식
또 한 가지 특징을 볼 수 있는 것은 NSS가 LOW일 때 MISO와 MOSI의 데이터를 동시에 가져온다는 것이다. Full-duplex로 Tx와 Rx가 동시에 이루어지는 것을 볼 수 있다.
그렇다면 CC2520에는 어떤 통신 방법을 사용해야 할까? CC2520 데이터 시트에서 SPI 타이밍 다이어그램을 가져와보도록 하자.
그림 6 CC2520 타이밍 다이어그램
위의 그림에서 볼 수 있듯이 CSn이 LOW일 때 그리고 SCLK가 rising edge일 때 SI 데이터를 가져가는 것을 볼 수 있다. 즉, leading edge, rising edge 방식으로 작동하는 것이다. 따라서CPHA는 0, CPOL 값도 0이 되어야 한다.
CSn은 SPI를 위한 input enable signal이다. CSn 신호가 High가 되면 reset이 된다.
1.3 CC2520 레지스터
CC2520도 STM32와 마찬가지로 메모리 맵을 파악해야 한다. CC2520을 컨트롤 할 때 주로 다루게 될 레지스터는 FREG와 SREG 두 종류가 있다. F는 Fase, S는 Slow의 약자이다. 차이라면 SREG가 FREG보다 한 byte 통신을 더 해야 하는데 이에 따라 약간의 속도 차이가 발생한다. 그림을 통해 자세히 살펴보도록 하자. 그림은 CC2520 Datasheet를 참고한다. FREG는0x000~0x03F, SREG는 0x040~0x0FF인 것을 알 수 있다. 레지스터를 자세히 살펴보면 0x40 주소에 CHIPID와 VERSION이 있는 것을 볼 수 있다. CC2520을 이용한 RF 통신에 앞서서 SPI 통신을 통해 CC2520의 CHIP ID와 Version을 읽어오는 실습을 하기 위해 필요한 정보이다.
그림 7 FREG와 SREG 메모리 맵(좌), 레지스터(우)
레지스터 공간은 128개이지만 개수는 128개보다 적다. 이 레지스터는 모두 8비트 레지스터들이다. FREG는 REGRD와 REGWR instruction으로, SREG는 MEMRD와 MEMWR instruction으로 접근할 수 있는 레지스터이다. 각 명령어는 REGRD는 0x80, MEMRD는 0x10으로 정해져있다.
CC2520에는 많은 명령어들이 있다. 아래 그림은 그 중에 MEMRD, MEMWR, REGRD, REGWR만을 캡쳐한 것이다.
그림 8 명령어 셋
그림에서 알 수 있듯이 MEMRD와 MEMWR는 3 Bytes, REGRD와 REGWR는 2 Bytes임을 알 수 있다. 여기서 SREG와 FREG의 차이를 볼 수 있는 것이다. a는 address, s는 status byte, d는data이다. MEMRD의 명령어가 4bit임을 알 수 있고 SREG 주소의 최대 값이 0x07F인데 이를 표현하려면 3 bit가 모자라다. 따라서 2 Byte 영역을 사용할 수 밖에 없다. MEMWR도 마찬가지이다.
반면에 REGRD와 REGWR는 명령어가 2비트임을 알 수 있고 FREG 주소의 최대 값이 0x03F인데 6bit로 이 주소를 표현할 수 있기 때문에 1 Bytes로 가능하다.
아래 레지스터들은 반드시 처음 부팅을 한 이후에 설정이 되어야 하는 것들을 정리한 것이다.자세한 설명은 Reference manual을 참고하길 바란다.
그림 9 설정해야하는 레지스터들
[출처] [무선 통신 ZigBee] 1. CC2520이란?|작성자 홀인원
'전자공학 > 전자회로' 카테고리의 다른 글
주기와 주파수의 관계(주파수 계산) (3) | 2017.04.06 |
---|---|
RC 회로의 임피던스 (1) | 2016.12.08 |
Ethernet Auto-Negotiation & MDI Signal에 대한 정보 (0) | 2016.05.31 |
USB to UART 설계 !! 기초부터 설계까지 !! (0) | 2016.05.31 |
데이터시트 읽는 방법 (4) | 2016.04.12 |