W5100 EMC 시험진행 시 칩 뻗는현상

[W5100]
사용 중인 제품 명을 위와 같이 제목에 명기하시면 더 빠른 응답을 받으실 수 있습니다.
본 Template을 삭제 후 문의 내용을 남겨 주세요. :slight_smile:

안녕하세요. W5100의 TCP/IP를 이용한 mcu의 펌웨어와 pc 측 어플리케이션과 통신을 하는 제품을 테스트중에 있습니다.

현재 개발은 완료가 되었는데요, EMI 및 EMC 시험등을 진행하면 W5100 칩이 뻗어버리는 현상이 있어서 이렇게 문의를 남깁니다.

하드웨어적으로는 수정이 불가능한 상태고 펌웨어를 통해 칩이 뻗어버리더라도 보완을 하는쪽으로 정해졌는데, 문제가 몇가지 생겼습니다.

먼저, 환경을 설명해드리면.

  1. MCU를 Server로, PC측 어플을 Client로 사용하고있습니다.
  2. MCU는 소켓 초기화 후 LISTEN 상태를 유지하고있습니다.
  3. PC측 어플 Client에서 접속을 시도하고 확인이되면 서로 접속을하고 소켓의 상태는 ESTABLISH로 유지됩니다.

이와 같은 환경인데,

  • PC와 연결이 된 상태여서 ESTABLISH 상태일 때 노이즈 시험을 통해 칩이 뻗으면 통신이 끊어지고 LISTEN 상태가 되어버립니다.
  • 두번째로, PC와 연결이 되지않은 상태일 때 노이즈 시험으로 칩이 뻗으면 마찬가지로 LISTEN 상태로 유지되고있습니다.
    이와같이 칩이 뻗으면 외부 W5100 reset 핀을 통해 리셋을 걸어주면 일단 칩은 다시 살아납니다.

저는 칩이 뻗으면 소켓이 닫혀서 CLOSE 상태로 가거나 할 줄 알았는데, 아니더군요. 처음 대비책으로 노이즈맞고 칩이 리셋되는거같아, CLOSE 상태로 들어가면 다시 소켓 초기화 등등을 해주는 소스를 넣었는데 CLOSE 상태로 가지않고 그대로 LISTEN 상태에서 죽어버린것을 확인하였습니다.

그래서 칩이 죽었는가 하고 W5100이 가지는 레지스터 정보들 IP부터 MAC … 등등을 다 전후로 찍어봤는데… 칩이 뻗기전과 동일하더군요… IP가 사라졌으면 이를 확인하고 다시 초기화해줬으면 되는데… 정보도 그대로 남아있는데 pc에서 mcu쪽으로 핑테스트를 찍으면 핑이 안나가더군요…

=> 칩에 설정 정보들은 그대로 남아있고 ping테스트 및 통신만 안됩니다. (파이칩에선 물리적 연결이 잘 되있다고 LED도 잘 깜빡이고 있더군요… )

그래서 결론적으로는.
위즈넷 자체 칩이 죽었는지 확인할 수 있는 방법이 있는가? 입니다…
처음에는 그래서 소켓을 한개 더 열어서 UDP로 설정하여 서버쪽으로 더미데이터를 계속 보내다가(정상적으로 서버가 열려있다면 SEND_OK를 인터럽트 레지스터로 반환할테니) 노이즈에 뻗으면 네트워크가 끊어져버릴테니 TIMEOUT이 뜨면 그 때 칩을 초기화시켜줘야겠다 라고 생각을 했는데, UDP 특성상 한번 ARP가 적용되고나면 그 다음에는 랜선이 뽑히든 ~~ 끊기든 무조건 SEND_OK만 떠버리더군요…
그래서 ARP 테이블을 초기화하는 방법을 찾다가, 다른 아이피로 더미데이터를 보내고 다시 돌아오면 ARP 테이블이 한개뿐이라 초기화가 될거라는 글을 봤는데, 이 방법또한 되지가 않더군요…

다른 아이피로 데이터를 보내고 다시 돌아오면 또 그놈은 랜선을 빼버려도 SEND_OK 가 떠버립니다…

아무튼 그래서 지금 해결법이 없어서 곤란한 상황에 놓여있습니다.

서버쪽과 끊겼을 때 확인할 수 있는 방법을 좀 부탁드립니다 ㅜ

ESD fail이 나시는 것 같은데…

핑이 안되는데 소프웨어적으로 접근하는 것은 아니다라고 봅니다.

PHY쪽 LED는 LED고, 먼저 핑이 되야 다음스텝으로 접근할 수 있습니다.

제가 보기에는 하드웨어 부품을 달리하거나, 추가하거나

아트웍을 변경하는 쪽으로 디버깅을 하셔야 할 것 같습니다.

트랜스 포머2차측에 ESD 소자를 달아보시는게 1차 방법일 것 같습니다.

예를 들어 SP3002 정도?

안녕하세요

위의 내용의 경우 send_ok가 뜨지않고 timeout interrupt가 뜨게 되어있습니다.

저희측에서 제공하는 라이브러리에는 sendto함수에서 매번 send하기전에 sendto나 timeout interrupt를 check하고 interrupt를 clear해주고 있는데 혹시 이 부분을 감안하고 코딩하신건가요?

case SOCK_UDP:
                sendto(0, BUF, 100, AsrockIn, 5000, 4);
                sendto(0, BUF, 100, AsustekC, 5000, 4);
                break;

image
위와 같이 두개의 destination으로 data를 반복적으로 send하면 매번 data전송전에 ARP가 전송되고, 랜선을 뽑을경우 ARP응답을 받지못해 timeout이 나게 되어있습니다.
우선 wireshark를 통해 ARP가 반복적으로 나가고 있는지 확인해보시고,
interrupt check를 잘못하고 계시는건 아닌지 확인해보시기 바랍니다.

안녕하세요 위즈네트 입니다.

외부 ESD의 유입경로는 대부분 RJ45를 통해 유입이 되기 때문에 PHY가 데미지 입을 확율이 큽니다.

그렇기 때문에 증상은 보니 ESD 충격시, W5100의 내부 PHY는 리셋이 걸리지만, W5100의 TCP Core는 리셋일 걸리지 않는 것으로 보입니다.

일단 원천적으로 이 문제를 바로잡기 위해서는 PCB 수정을 하셔야 합니다. 하지만…

PCB 수정을 못한다고 하신다면, 딱히 방법이 없습니다.

W5100이 서버로 동작하기 때문에 할수 있는 것이 없습니다.

보통 이런 경우에서는 클라이언트가 서버와 연결이 끊키면 재접속을 시도하게 됩니다.

이런 기능은 클라이언트에 구현을 해보시길 바랍니다.

감사합니다.