ZigBee® 스마트 에너지 디바이스의 구성
  • 2010-03-05
  • 편집부

본고에서는 MSP430F54xx를 CC2530-ZNP(ZigBee 네트워크 프로세서)에 대한 호스트 애플리케이션 프로세서로 사용하여 ZigBee 스마트 에너지 디바이스를 구성하는 방법에 대해 설명한다. MSP430과 CC2530-ZNP간의 피지컬 인터페이스는 물론, CC2530-ZNP를 구동하는 데에 사용되는 소프트웨어 애플리케이션 프레임워크도 논의된다. 본고는 독자가 기본적인 Zigbee 개념과 용어에 숙달되어 있을 것으로 가정하에 설명된다.

Zin Kyaw / 텍사스 인스트루먼트 시스템 애플리케이션 엔지니어


CC2530-ZNP는 핵심 ZigBee Pro 스택을 포함하며 스택 및 데이터 전송의 설정을 위해 API 인터페이스를 호스트 프로세서에 노출시킨다. TI에서 제공하는 애플리케이션 설치 프로그램의 예에서 이들 API는 ZAP(ZigBee Application Processor) 프레임워크라는 애플리케이션 프레임워크에 의해 추상화되어, 애플리케이션 개발자들이 정교한 ZigBee 스마트 에너지 애플리케이션(예: 홈 오토메이션 및 생산업체 특정 프로파일 등)을 용이하게 작성할 수 있다.
TI에서는 애플리케이션 개발을 용이하게 하기 위한 광범위한 프레임워크를 제공하였으므로, 이 애플리케이션 프레임워크의 재사용을 강력하게 권장한다. 하지만 ZigBee 스마트 에너지 샘플 애플리케이션 수트는 CC2530 ZNP를 사용하지만 애플리케이션 프레임워크를 처음부터 재작성 하고자 하는 애플리케이션 개발자들을 위해, CC2530-ZNP와의 인터페이스의 우수한 레퍼런스 코드로 작용한다.

피지컬 인터페이스 및 개발 플랫폼
CC2530-ZNP가 UART, USB 및 SPI 인터페이스를 지원하지만, 여기서는 SPI 인터페이스의 사용에 대해 논의할 것이다. <표 1>은 호스트 프로세서와 CC2530-ZNP 간에 권장되는 핀 연결인데, 이는 MSP430F5438 USCI B0 이 3선 SPI 모드에 사용되는 EXP430F5438 실험 보드에서 사용되는 상호연결과 일치한다.
이 연결을 테스트하기 위해 1개의 CC2530EMK[2×CC2530 평가모듈(EM) 포함]과 2×EXP430F5438 실험 보드를 별도로 구할 수 있다. 이 설정은 (그림 1)에 표시되어 있다. 또한, CC2530EM 모듈을 프로그래밍하는 데에 사용하는 SmartRF05EB 보드도 필요하다. SmartRF05EB 보드는 CC2530DK, CC2530ZDK 또는 CC2520DK 와 함께 공급된다.

소프트웨어 애플리케이션 프레임워크
소프트웨어 애플리케이션 프레임워크는 TI의 OSAL(Operating System Abstraction Layer) 운영 시스템에 기반하고 있다(보다 자세한 정보는 참고자료 [2] 참조). OSAL은 작업 관리, 전원 관리, 비휘발성 메모리, 동적 메모리 관리, 소프트웨어 타이머, 이벤트 생성, 작업 상호/내부 작업간 메시지 전달(또는 메시지 대기행렬) 등을 위한 서비스 및 HAL(Hardware Abstraction Layer)이라는 보드지원 패키지(BSP)를 추상화하는 레이어에 대한 원활한 인터페이스를 제공한다.
ZAP 프레임워크는 TI의 ZigBee 스택(Z-Stack™) 상의 ZigBee® 애플리케이션 프레임워크의 구성을 재활용한다. 애플리케이션 프레임워크의 각 레이어는 OSAL 내의 작업으로 구성되어 있으며, (그림 2)의 OSAL ZAP 서비스의 시스템 다이어그램에서와 같이 항상 HAL작업의 우선순위가 가장 높다. HAL작업은 실행되는 최초의 작업이다. 각각의 연속 작업이 완료되면 HAL 작업으로 복귀하는 분기가 실행되어 서비스 필요 여부를 확인하게 된다. 다이어그램에 표시된 작업들은 ZAP 구현에 있어 일반적이다.
(그림 3)의 ZAP 레이어는 Z-스택™ API와 ZNP API 간의 전이 레이어로 작용한다. 따라서, 전체 ZigBee짋 스택에 대해 작성된 고객 애플리케이션은 TI가 지원하는 ZAP 플랫폼 상에서와 같이 동작하게 된다. 따라서 고객은 CC2530-ZNP를 사용할 경우 다른 애플리케이션 개발 원리를 배울 필요가 없다. 이어지는 섹션에서 ZAP 레이어가 설정과 데이터 교환을 위해 애플리케이션 API 호출을 ZNP API 호출로 변환하는 기능에 대해 확인할 것이다.
이를 위해, ZAP 설치프로그램 패키지를 설치한 후 C:\Texas Instruments\ZAP-MSP430-1.0.0 \Projects\zstack\ZAP\SE SampleApp\EXP5438 에서 찾을 수 있는 스마트 에너지 샘플 애플리케이션 프로젝트를 이용할 것이다.

ZNP 작동
HAL_SPI_INIT() 마크로는 MSP430™의 SPI 인터페이스를 초기화한다. zapPhyInit() 함수는 ZNP 하드웨어 컨트롤 신호를 초기화하며, RESET_N 핀을 비활성화하여 CC2530-ZNP을 작동시킨다. 일단 ZNP가 내부 초기화 순서를 완료하면 SRDY 신호를 활성화하여 호스트 프로세서에 대해 완료신호를 송신하게 된다.
다음 zapPhySpiPoll() 프로세스가 SYS_RESET_IND 명령을 수신한다. 이어서, zapSysResetInd() 함수를 호출하여 ZAP 레이어에 대해 리셋 신호를 수신하였으며 ZNP를 설정할 수 있음을 통지하게 된다. 이를 앞으로 “ZNP 동기화 이벤트”라고 표현할 것이다.

ZNP 설정
사용자가 맨 처음 해야 할 일은 ZNP 동기화 이벤트가 발생할 때마다 ZNP 디바이스의 네트워크 상태를 복원해야 하는지의 여부에 대해 결정하는 것이다. 이는 콤파일 옵션 ZAP_NV_RESTORE를 통하여 선택 가능하다. ZAP_NV_RESTORE가 FALSE로 설정되면 ZNP의 네트워크 상태가 정리 되며, 기본 설정이 사용된다. zapAfSync()과 zapZdoSync()는 각각, 애플리케이션 엔드포인트와 ZDO 콜백을 등록하는 데에 사용된다. 애플리케이션 엔드포인트와 콜백 정보는 ZNP 비휘발성 메모리에 저장되지 않으므로, 이는 호스트 애플리케이션에 의해 매번 ZNP 동기화 이벤트 발생시마다 실행되어야 한다.

그 후, 애플리케이션은 ZCD_NV_LOGICAL_TYPE, ZDAPP_ CONFIG_PAN_ID, DEFAULT_CHANLIST 항목들에 대해 znp_nv_write를 통해 일련의 호출을 실행하여 로직 디바이스 유형(조정물, 라우터 또는 최종 디바이스), PAN ID및 스캔채널 마스크를 각각 설정한다. 이 때 zap.cfg confi guration의 기본값들을 사용하게 된다. 콤파일 옵션 TC_LINKKEY_JOIN 이 정의되면, zapCertSync()를 호출하여 ZigBee® CBKE(Certifi cate Based Key Establishment) 보안을 위한 테스트 인증 데이터를 설정한다.
이들 설정항목은 ZNP 내에서 전역변수로 선언되어 있지 않아, 이들 항목을 런타임에서 변경하는 데에 ZNP의 리셋이 요구되지 않는다. zap.cfg에서 ZAP_AUTO_CFG 콤파일 옵션을 TRUE로 설정하면 이 ZNP는 자동으로 설정된다.
일단 모든 설정사항을 변경하면, 호스트 프로세서가 ZDOInitDevice를 호출하여 디바이스를 작동할 수 있는데 여기서 다시 ZDO_STARTUP_FROM_APP ZNP API 함수가 호출된다. 디바이스 작동 절차(네트워크를 위한 스캐닝 포함)가 400msec 이상 소요될 수 있으므로, ZAP_ZDO_STARTUP_ AREQ 콤파일 옵션을 이용하여 ZDO_STARTUP_FROM_APP 명령을 비동기 요청(AREQ)으로 송신할 수 있도록 한다. 따라서, 애플리케이션이 동기화 응답(SRSP)을 대기하는 대신 다른 작업을 처리할 수 있도록 한다. 이 요청은 ZDO_STATE_ CHANGE_IND 명령으로서 호스트 프로세서를 위해 대기행렬에 입력된다. 다음 이러한 상태정보는 애플리케이션 작업에 전달되어, 디바이스가 유효한 ZigBee 네트워크 어드레스를 보유하고 있음을 통지한다. 이에 따라 애플리케이션은 해당 이벤트를 (예제 1)과 같이 처리하게 된다.
zap.cfg에서 ZAP_AUTO_START 콤파일 옵션을 TRUE로 설정하면 ZNP의 네트워크 시동이 자동화된다.
애플리케이션 엔드 포인트 등록 및 ZDO 콜백
애플리케이션의 초기화 기능에는, SE 엔드 포인트와 바람직한 ZDO 콜백의 등록이 포함되어 있다. 예를 들어, 함수 zclSE_ Init는 ZNP에 대해 SE 엔드 포인트에 대한 설명을 등록한다   (예제 2 참조).
이는 해당 엔드 포인트를 ZNP로 등록하기 위해 AF_REGISTER ZNP API를 이용하는 ZAP 프록시 함수인 znp_afRegister Extended()로 전환된다.
또한 애플리케이션은 특정 ZDO 콜백 통지를 등록할 수 있다. ESP(Energy Service Portal) 예제는 다음의 ZDO 콜백에 대해 등록한다(예제 3 참조).
다음 ZDO_RegisterForZDOMsg() 함수는 ZAP 프록시 함수 znp_ZDO_RegisterForZDOMsg()를 호출하는데 이는 ZNP에 대해 ZDO_MSG_CB_REGISTER 명령을 송신한다. ZAP 레이어가 입력된 ZDO 명령을 수신하면 zapZdoProcessIncoming 함수가 호출된다. 다음 명령은 케이스 핸들러에서 MT_ZDO_MSG_CB_ INCOMING에 대해 처리된다. 이 명령 핸들러는 다음 ZDO_ SendMsgCB를 호출하여, 어떤 애플리케이션 작업이 콜백을 수신해야 할지를 분석하고 결정한다.
ESP 애플리케이션은 최종 디바이스 통지를 이용하여, 여타 디바이스들이 SE 네트워크에 참여하는 것을 검출한다. 다음 ESP는 ZDO 간단한 디스크립터 요청을 이용하여 디바이스 유형을 문의한다. 양 콜백은 (예제 4)와 같이 처리된다.
키 형성 초기화
ESP와의 애플리케이션 링크 키를 형성하기 위해

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>



  • 100자평 쓰기
  • 로그인

TOP