본문 바로가기

[INTERFACE]/ZIGBEE

[CC2500] ez430-RF2500 가지고 놀기 3 - RF 통신

ez430-RF2500을 가지고 기본적인 테스트가 끝났기 때문에 이제는 CC2500을 이용하여 RF통신 실험을 해 보자. TI에서 제공되는코들르 보면 좀 복잡하고 추가나 수정이 어여운 코드로 작성되어 있는데... 이 부분을 좀 수정하여 좀 더 간단히 코드를 작성해 보았다.

일단 CC2500 기본 제어 부 및 SimpliciTi는 특별히 수정할 필요가 없기 때문에 한 폴더로 넣어서 라이브러리 형태로 취급하고 RF송수신을 위한 가장 기본 코드만 남기도록 한다. -> 아래와 같이 하면 아주 심플 해 진다.



network config파일은 EXTRA Option에 등록한다.
-f"$PROJ_DIR$\Configuration\Access Point\smpl_config.dat"
-f"$PROJ_DIR$\Configuration\smpl_nwk_config.dat"



그리고 Stack Szie 설정도 아래와 같이 해 둔다. ( 설정하지 않으면 정상동작을 하지 않는데... 원인 찾기가 상당히 힘들었다.)




End Device에서 스위치를 누를때마다 데이터를 수신 받아서 UART로 표시 하는 예제코드
void main (void)
{
 addr_t lAddr;
 
 SystemInit();
 Delay(1000);
 
 CC2500_Init();
 
 DebugInit(BAUD_115200);
 DebugPrint("CC2500 RF Test Program.\r\n");

 //-------------------------------------------------------
 // set device address
 if( Flash_Addr[0] == 0xFF &&
  Flash_Addr[1] == 0xFF &&
  Flash_Addr[2] == 0xFF &&
  Flash_Addr[3] == 0xFF )
  {
   createRandomAddress();
  }
 
 lAddr.addr[0]=Flash_Addr[0];
 lAddr.addr[1]=Flash_Addr[1];
 lAddr.addr[2]=Flash_Addr[2];
 lAddr.addr[3]=Flash_Addr[3];
 SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr);
 //------------------------------------------------------- 
 
 SMPL_Init(sCB);
 
 // main work loop
 while (1)
 {
  ListenForConnection();
  ProcessCC2500RX();
 }
}

void RevDataString(int addr, signed char rssi, unsigned char *Msg, unsigned int Size)
{
 unsigned int i;
 for(i=0;i<Size;i++)
 {
  DebugPrint("%x ", Msg[i]); 
 }
 DebugPrint("\r\n");
}


스위치를 입력할 때마다 index값을 증가 시켜 전송하는 코드
 if(GetSw1())
 {
  if(!flag)
  {
   flag = 1;
   msg[0] = index++;
  
  if(SMPL_SUCCESS == SMPL_Send(linkID1, msg, 1))  
  {

  }
    
 }else
 {
  if(flag)flag=0;
 }


테스트 결과
CC2500 RF Test Program.
0
1
2
3
4
5
6
7
8
9
반응형