Wizfi210 SPI 모듈에서 TCP 통신 관련입니다


#1

Wizfi210 SPI 모듈을 사용중입니다.
ATmega8 과 SPI 통신을 통해서 TCP 통신을 하려고 하는데
TCP Server -> TCP Client 로는 통신이 잘 되는데 반대경우는 되지 않습니다.
TCP Server 는 ATmega8 + Wizfi210 이 되고 TCP Client 는 안드로이트 폰, 노트북 TCP Client 프로그램입니다.

펌웨어상에서 ATCommand 로 AP 에 접속하고 TCP 서버 열어서 데이터모드까지 잘 진입됩니다.
제공 받은 테스트 코드에 따르면 GPIO19 번핀이 HIGH 가 될 때 WizFI210_Read_Byte(); 라는 함수로
데이터를 받는 걸로 되어 있는데, TCP Client 에서 데이터를 계속 보내도 GPIO19 번핀이 HIGH 가 되지 않습니다.

또, GPIO19번핀과 상관없이 데이터를 받아보면 0xF5 데이터만 계속 출력이 되는 상태입니다.
TCP Client에서 어떤 데이터를 보내도 변화가 없습니다.

제공 받은 테스트 코드는 다음과 같습니다.

==================================================================
while(1)
{
int ch;
if ( USART_GetFlagStatus(USART2, USART_FLAG_RXNE)!=RESET )
{
ch = USART_ReceiveData(USART2);
sprintf(Msgbuf, “%c”, ch);
WizFI210_Write_Buf(Msgbuf);
}

                            if ( GPIO_ReadInputDataBit(GPIOB, PB10)==1 ) 
                            {
                                      key = WizFI210_Read_Byte(); 
                                      if ( (key!=SPI_IDLE_CHAR) && (key!=SPI_INVALID_CHAR_ALL_ZERO) && (key!=SPI_INVALID_CHAR_ALL_ONE) )
                                       { 
                                                 putchar2(key); 
                                      } 
                            }                               
                 }

=============================================================

ATCommand 를 사용할 때 WizFI210_Write_Buf() 함수와 WizFI210_Read_Byte() 함수를 모두 사용하여
문제없이 진행되었기 때문에 함수자체에는 문제가 없을 듯 한데요
위와 같은 상황에서 어떤 부분을 확인해봐야 되는지, Wizfi210 모듈에서 봐야되는 부분이 있는지
펌웨어 적으로 확인해봐야 되는게 있는지 궁금합니다.
되도록 빠른 연락 부탁드립니다.

참고로 사용한 ATCommand 는 다음과 같습니다.
Wizfi210-evb 에서 ATCOMMAND 테스트 후 사용하고 있구요

AT+WM=0
AT+WD
AT+NDHCP=1
AT+WWPA=xxxxxxxxxxx
AT+WA=genes007
AT+NSTAT=?
AT+NSTCP=5000
ATA2


#2

안녕하세요

하기 내용과 관련하여 SPI 통신에는 문제가 없는 것으로 판단 되나, 2가지 Check Point를 말씀 드릴 수 있을 것 같습니다.

  1. H/W적으로 WizFi210의 GPIO19번과 MCU의 GPIO가 연결되어 있는 라인에 문제가 있는지 확인
  2. S/W적으로 GPIO_ReadInputDataBit() 함수 확인
    • 제공된 SPI Master Example의 경우, STM32 기반으로 코드가 작성되어 있습니다. 때문에 GPIO_ReadInputDataBit()
      함수의 경우, STM32 MCU를 위한 방법으로 GPIO 값을 읽어 옵니다.
    • 하지만 지금 사용하고 계신 ATmega8의 경우 GPIO 제어 방법이 STM32와 다른 것으로 알고 있습니다. 이에
      대한 확인 부탁 드립니다.

#3

답변 감사드립니다.

  1. H/W 적으로 GPIO19 번 라인에 대해서 지금 당장 확인은 힘든 상태입니다. 이 부분의 확인은
    ATCommand 를 주고 받을 때 GPIO19번 핀의 상태가 변하는 것으로 확인해보도록 하겠습니다.
    ATCommand 의 response 를 받을 때 GPIO10 번 핀의 상태가 HIGH 상태이면 하드웨어적인 연결은
    이상이 없는 것으로 판단하도록 하겠습니다.

  2. S/W 적으로 제공된 STM32 기반의 GPIO_ReadInputDataBit() 함수의 내용이 정확히 무었인지는 모르겠지만
    GPIO19 번의 입력핀 값을 가져오는 것으로 알고 있습니다. ATmega8 에서도 마찬가지로 해당 GPIO19 번과 연결된
    General I/O 핀을 입력으로 설정하고 해당 핀의 값이 LOW 인지 HIGH 인지 받아오고 있습니다.

Data mode 에서 샘플 코드에서 조건문인 if ( GPIO_ReadInputDataBit(GPIOB, PB10)==1 ) 부분없이
읽어오도록 했을 때 TCP 수신 데이터가 안들어올 수 있나요? 현재 테스트 상황은 GPIO19 번의 상태 변화가 없음으로
if ( GPIO_ReadInputDataBit(GPIOB, PB10)==1 ) 부분을 빼고 테스트 하고 있습니다.

하드웨어적으로 G{IO19번 핀 연결의 문제가 없고 if ( GPIO_ReadInputDataBit(GPIOB, PB10)==1 ) 부분을 빼고
테스트를 하여도 데이터모드에서 TCP 수신이 가능하다고 한다면 더 확인해봐야 할 게 포인트가 뭐가 있을까요?


#4

안녕하세요

하기 내용에 대한 답변입니다.

  1. Data mode 에서 샘플 코드에서 조건문인 if ( GPIO_ReadInputDataBit(GPIOB, PB10)==1 ) 부분없이
    읽어오도록 했을 때 TCP 수신 데이터가 안들어올 수 있나요?
    [color=#FF0000] - WizFi210의 GPIO19의 상태를 확인 하지 않고 MCU에서 SPI 데이터를 수신하는 경우, 원하는 데이터가 아닌 0xF5(IDLE)를 계속 수신 할 수 있습니다.
  • WizFi210의 GPIO19는 WizFi210이 SPI Master에게 보낼 데이터가 있다는 것을 나타내는 신호로서, GPIO19가 HIGH일 때, SPI 데이터를 수신 하셔야 합니다.[/color]
  1. 우연히 타이밍이 맞아 원하는 데이터가 수신 될 수는 있으나, 원칙적으로는 WizFi210이 보낼 데이터가 있을 때, GPIO19번 핀이 HIGH로 변해야 합니다. 때문에 GPIO19번 핀의 값이 변하지 않는 문제를 먼저 해결 하시는 것이 좋을 것 같습니다.

#5

해당 내용으로 테스트 중 궁금한 점이 있어 문의 드립니다.

ATCommand 로 ATA2 메세지까지 날려 Data Mode 상태에서는
TCP 송신 ( Wizfi -> Mobile ) 이 잘되는데 TCP 수신 ( Mobile -> Wizfi ) 이 안되는
상황인데 임의적으로 ATA2 커멘드 후에 “+++” 를 넣어줘서 Command Mode 로
바꾸고 TCP 통신 테스트를 하니까 TCP 송신이 안되고 TCP 수신은 잘됩니다.

정리하자면 AP 에 접속하고 TCP 서버를 열어둔 상태에서 데이터모드에서는
TCP 송신이 되고 TCP 수신이 안되는 상황이고
커맨드 모드에서는 TCP 송신이 안되고 수신이 되는 상황입니다.

커맨드 모드에서 TCP 수신 때 GPIO19 번핀도 정상적으로 HIGH 상태로 변하구요.

일단 TCP 송수신이 한번씩 되는 것은 확인하였으나 모드에 따라 송, 수신이 한쪽씩만 되는게
이해가 되지 않네요.

해당 상황에 대해서 말씀해주실게 확인해야될 점이나 문제 해결을 위해 제가 더 드려야될 정보가
뭐가 있을지 답변 부탁드립니다.


#6

답변이 늦었습니다. 죄송합니다.

문제가 발생 하셨을 때 사용하신 AT Command Set을 포럼에 남겨 주시면 분석하는데 도움이 될 것 같습니다.
AT Command Set은 Data Mode로 사용하시는 Case와 Command Mode로 사용하시는 Case 둘 다 알려 주시기 바랍니다.

감사합니다.


#7

Data Mode 로 테스트 시 사용한 ATCommand Set 입니다.

AT+WD
AT+WM=0
AT+NDHCP=1
AT+WWPA=xxxxxxxxxxx
AT+WA=genes007
AT+NSTAT=?
AT+NSTCP=5000
ATA2

====================================================
Command Mode 로 테스트 시 사용한 ATCommand Set 입니다.

AT+WD
AT+WM=0
AT+NDHCP=1
AT+WWPA=xxxxxxxxxxx
AT+WA=genes007
AT+NSTAT=?
AT+NSTCP=5000
ATA2
+++

========================================================

Data Mode 테스트에 사용했던 Set 에서 +++ 만 더해서 Command Mode 로 나온 후에
테스트 진행하였습니다.


#8

해당 문의에 대해서 되도록 빠른 답변 부탁드립니다.


#9

안녕하세요

Data Mode로 설정 할 시, 아래 명령을 이용하여 테스트 부탁 드립니다.

AT+WD
AT+WM=0
AT+NDHCP=1
AT+WWPA=12345678
AT+WAUTO=0,DIR-636L
AT+NAUTO=1,1,5000
ATA

참고로 Command Mode로 진입 하시기 위해서는 +++ 문자를 입력 해 주시면 되며, Command Mode에서 다시 Data Mode로 전환 할 경우에는 ATO 명령을 사용 하시면 됩니다.

감사합니다.