WIZnet Developer Forum

WIZ550S2E 에서 송수신 주고 받을 때 데이타를 못 받는 경우

안녕하세요. WIZ550S2E를 사용하여 개발중에 있습니다.
환경은 UDP를 이용하여 4바이트를 수신하여 받고 보낼때는 12바이트를 보내고 있는데 중간 중간에
잘못된 명령어라고 받고 있는데 어떤 부분을 봐야할 포인트가 있는지 알려 주시면 고맙겠습니다.
지금 개발하고 있는 로그 첨부합니다.

/* 로그 분석

[시간 : 초][송신(T)] (명령어 - UART DATA)

[시간 : 초][수신(R)] (명령어 - UART DATA) [패턴 분석] [해당 패턴의 카운트]

*/

[19357][T] AT+NSEND=0,12,10.168.10.115,39000 /* NSEND 명령어로 12byte 데이터 보냄 */

[19357][R] W,0 [W] [19347] /* NSEND WAIT 응답 */

[19357][R] R,0,4,10.168.10.115,51245 [R] [19347] /* 데이터 수신 */

[19357][R] S,0 [S] [19346] /* NSEND SUCCESS 응답 */

[19358][T] AT+NSEND=0,12,10.168.10.115,39000

[19358][R] R,0,4,10.168.10.115,51245 [R] [19348]

[19358][R] W,0 [W] [19348]

[19358][R] S,0 [S] [19347]

[19359][T] AT+NSEND=0,12,10.168.10.115,39000

[19359][R] R,0,4,10.168.10.115,51245 [R] [19349]

[19359][R] W,0 [W] [19349]

[19359][R] S,0 [S] [19348]

[19360][T] AT+NSEND=0,12,10.168.10.115,39000

[19360][R] R,0,4,10.168.10.115,51245 [R] [19350]

[19360][R] F,1 [F] [4] /* 잘못된 명령어 ? */

[19361][T] AT+NSEND=0,12,10.168.10.115,39000 /* NSEND 명령어에 대한 모듈 응답이 없음 */

[19362][T] AT+NSEND=0,12,10.168.10.115,39000

[19362][T] +++

[19362][R] F,1 [F] [5]

[19362][R] R,0,4,10.168.10.115,51245 [R] [19351]

[19362][T]

[19362][R] F,1 [F] [6] /* +++ 전송하고 엔터 0x0d 0x0a 명령어 전송하니 정상 동작하네? */

[19363][T] AT+NSEND=0,12,10.168.10.115,39000

[19363][R] R,0,4,10.168.10.115,51245 [R] [19352]

[19363][R] W,0 [W] [19350]

[19363][R] S,0 [S] [19349] /* 정상적으로 전송 */

[19364][T] AT+NSEND=0,12,10.168.10.115,39000

[19364][R] R,0,4,10.168.10.115,51245 [R] [19353] /* 잘못된 명령어 ? */

[19364][R] F,1 [F] [7]

[19365][T] AT+NSEND=0,12,10.168.10.115,39000 /* NSEND 명령어에 대한 모듈 응답이 없음 */

[19366][T] AT+NSEND=0,12,10.168.10.115,39000

[19366][T] +++

[19366][R] F,1 [F] [8]

[19366][R] R,0,4,10.168.10.115,51245 [R] [19354]

[19366][T]

[19366][R] F,1 [F] [9] /* +++ 전송하고 엔터 0x0d 0x0a 명령어 전송하니 정상 동작하네? */

[19367][T] AT+NSEND=0,12,10.168.10.115,39000

[19367][R] R,0,4,10.168.10.115,51245 [R] [19355]

[19367][R] W,0 [W] [19351]

[19367][R] S,0 [S] [19350]

[19368][T] AT+NSEND=0,12,10.168.10.115,39000

[19368][R] R,0,4,10.168.10.115,51245 [R] [19356]

[19368][R] W,0 [W] [19352]

[19368][R] S,0 [S] [19351]

[19369][T] AT+NSEND=0,12,10.168.10.115,39000

[19369][R] R,0,4,10.168.10.115,51245 [R] [19357]

[19369][R] F,1 [F] [10]

[19370][T] AT+NSEND=0,12,10.168.10.115,39000 /* ‘알수 없는 명령어’ 에러 응답 후 NSEND 명령어 보내면 응답이 없음 */

[19371][T] AT+NSEND=0,12,10.168.10.115,39000

[19371][T] +++

[19371][R] F,1 [F] [11]

[19371][R] R,0,4,10.168.10.115,51245 [R] [19358]

[19371][T]

[19371][R] F,1 [F] [12] /* +++ 전송하고 엔터 0x0d 0x0a 명령어 전송하니 이번엔 동작 안함 */

[19372][T] AT+NSEND=0,12,10.168.10.115,39000

[19372][R] R,0,4,10.168.10.115,51245 [R] [19359]

[19372][R] F,1 [F] [13]

[19373][T] AT+NSEND=0,12,10.168.10.115,39000

[19373][R] R,0,4,10.168.10.115,51245 [R] [19360]

[19373][R] F,1 [F] [14]

[19374][T] AT+NSEND=0,12,10.168.10.115,39000

[19374][R] R,0,4,10.168.10.115,51245 [R] [19361]

[19374][R] F,1 [F] [15]

안녕하세요.

‘AT+NSEND’ command 입력 후, 송신 data를 ‘AT+NSEND’ 입력 시에 설정한 송신 data 길이보다 초과하여 입력하셨는지요?

‘AT+NSEND’ 입력 시에 설정한 송신 data 길이보다 초과하여 입력을 하게 된다면, 송신 data 길이를 초과한 data는 command로 인식을 하여, 다음 sequence에서 ‘[F,,1]’ 응답이 발생하게 됩니다.

확인 부탁드리겠습니다.

감사합니다.

static void sendDataToEthernet(const uint8_t *data)
{
  char8_t atCommand[40]; /* AT 명령어 저장 배열 */
  uint8_t sendData[100]; /* AT 명령어 및 송신 데이터 저장 배열 */
  uint8_t index = 0U;

  uint16_t commandSize = 0U;

  (void)strcpy(atCommand, "AT+NSEND=0,12,10.168.10.115,39000\r\n"); /* 송신 데이터의 길이을 설정한 AT 명령어 저장 */
  commandSize = strlen(atCommand);

  for (index = 0U; index < commandSize; index++) /* AT 명령어 복사 */
  {
    sendData[index] = (uint8_t)atCommand[index];
  }
  (void)memcpy((void *)&sendData[12], data, len); /* 송신 데이터 복사 */
  (void)HAL_UART_Transmit(&huart2, sendData, commandSize + 12U, 0xFFFFU);
}

상기 코드에서 12byte 이상 송신 할 수 없는 구조입니다. 현재 수신 4byte, 송신 12byte 고정입니다.

1초 한 번 12byte을 송신 시 4~5시간 마다 송신 실패하고 복구되지 않으며 200ms 마다 12byte을 송신 시 1분도 되지 않아 송신 실패하기도 합니다.

UART TX은 폴링방식. RX는 인터럽트방식입니다. TX 송신 시 RX 인터럽트가 발생하여 TX가 잠깐 멈췄다가 연속 데이터를 송신하게 되어 실패하는게 아닌지 의심이됩니다. COMMAND 모드에서 WIZNET 모듈이 UART Timeout 체크를 하나요?

안녕하세요.

command mode에서는 UART timeout을 확인하지 않습니다.

UART buffer에 정상적으로 data가 저장되는지 재확인 부탁드리며, WIZ550S2E 단독으로 확인이 가능하시다면 단독으로 문제가 발생하는지 확인 부탁드리겠습니다.

감사합니다.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.