[W5500] Sn_IR_SENDOK 인터럽트가 늦게 발생하는 문제

[W3150A+] [W5100] [W5200] [W5300] [W5500]

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

안녕하세요.
w5500을 atmel sama5 에 붙여서 개발 중에 있습니다.

리눅스 버젼은 github/linux4sam/linux-at91/tree/linux-3.6.9-at91을 사용중이고,
드라이버는 github/linux4sam/linux-at91/tree/linux-4.9-at91/drivers/net/ethernet/wiznet
에서 가져와 MACRAW모드로 정상 동작 확인하였습니다

사정상 소켓0을 MACRAW모드로 쓰고 나머지 소켓은 TCP소켓으로 쓰는 Hybrid Mode가 필요한데요.
혹시 Hybrid Mode로 구현된 리눅스 드라이버가 있나요?
위키나 Git저장소를 둘러봐도 Hiybrid mode 리눅스 드라이버가 없어서 현재 HybridMode를 구현하고 있습니다.

리눅스 드라이버에 github/Wiznet/ioLibrary_Driver/commits/master 소스를 추가하여
ioctl에 wizsock_open, wizsock_close, wizsock_listen…등 상위레벨 API를 연동했습니다.

테스트 서버에 TCP 소켓모드로 접속후 문자(“GET / HTTP/1.1\r\n\r\n”)를 전송하고 수신(goodbye)을 반복하는 테스트 프로그램을 만들어 확인 중인데요. 첫번째 전송한 후 Sn_IR_SENDOK 인터럽트가 전송 후 한참후에 발생됩니다.(디버깅시 인터럽트 라인도 같이 늦게 나오는 것 확인), 늦게 발생했을때 Sn_IR은 0x16이 설정되어 있습니다. 왜 이렇게 Sn_IR_SENDOK 인터럽트가 늦게 발생할까요?
두번째 전송시 ioLibrary_Driver/Ethernet/socket.c:wizsock_send()에서 Sn_IR_SENDOK 가 Sn_IR에 없어 SOCK_BUSY로 처리됩니다. 어떤부분을 확인해봐야 할지 가이드 부탁드립니다.

첨부파일은 wireshark로 패킷 캡춰한 파일입니다. 첫번후 송수신후 두번째 송신을 하려다 실패하여 소캣을 닫는
과정입니다. (111:서버, 114:클라이언트)
wireshark_capture.zip (1.0 KB)

문제 수정했습니다.
리눅스 드라이버(macraw용) 에서 데이터 송수신시 SIMR 설정을 변경하는 코드 때문에 발생했네요.

좋은 정보 감사합니다.