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);
}
ATCommand 를 사용할 때 WizFI210_Write_Buf() 함수와 WizFI210_Read_Byte() 함수를 모두 사용하여
문제없이 진행되었기 때문에 함수자체에는 문제가 없을 듯 한데요
위와 같은 상황에서 어떤 부분을 확인해봐야 되는지, Wizfi210 모듈에서 봐야되는 부분이 있는지
펌웨어 적으로 확인해봐야 되는게 있는지 궁금합니다.
되도록 빠른 연락 부탁드립니다.
참고로 사용한 ATCommand 는 다음과 같습니다.
Wizfi210-evb 에서 ATCOMMAND 테스트 후 사용하고 있구요
H/W 적으로 GPIO19 번 라인에 대해서 지금 당장 확인은 힘든 상태입니다. 이 부분의 확인은
ATCommand 를 주고 받을 때 GPIO19번 핀의 상태가 변하는 것으로 확인해보도록 하겠습니다.
ATCommand 의 response 를 받을 때 GPIO10 번 핀의 상태가 HIGH 상태이면 하드웨어적인 연결은
이상이 없는 것으로 판단하도록 하겠습니다.
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 수신이 가능하다고 한다면 더 확인해봐야 할 게 포인트가 뭐가 있을까요?
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]
우연히 타이밍이 맞아 원하는 데이터가 수신 될 수는 있으나, 원칙적으로는 WizFi210이 보낼 데이터가 있을 때, GPIO19번 핀이 HIGH로 변해야 합니다. 때문에 GPIO19번 핀의 값이 변하지 않는 문제를 먼저 해결 하시는 것이 좋을 것 같습니다.
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 송수신이 한번씩 되는 것은 확인하였으나 모드에 따라 송, 수신이 한쪽씩만 되는게
이해가 되지 않네요.
해당 상황에 대해서 말씀해주실게 확인해야될 점이나 문제 해결을 위해 제가 더 드려야될 정보가
뭐가 있을지 답변 부탁드립니다.