WIZnet Developer Forum

W5100 0x640c byte Rx

답변이 없어서 다시 문의합니다.
tpc/ip 통신을 하며, w5100이 클라이언트입니다. 다이렉트 모드를 사용했읍니다. altera에 Nios를 포팅해서 사용중입니다.
서버에서 작은 데이타들은 정상적으로 rx합니다.
다만, 데이타가 크면(아마, getIINCHIP_RxMAX(s) 이상일 경우인거 같읍니다.) 체크섬 에러가 발생합니다.
서버에서 전체 0x640c 바이트를 전송합니다.

데이타는 모두 받았는데, 체크섬 에러가 발생하는것을 보면, 데이타가 깨지는것 같읍니다.
w5300에서 같은 프로그램을 구동시 정상입니다.

w5100 메모리 설정을 (0x55, 0x55) -> (0x03, 0x03)…기타 등등으로 바꾸어도 체크섬 에러는 발생합니다.

제공된 드라이버에서 다음 루틴을 디버그 해보면
void read_data_0(UINT1 s, vuint8 * src, vuint8 * dst, uint16 len)
{
uint16 size;
uint16 src_mask;
uint8 * src_ptr;

src_mask = (uint16)src & getIINCHIP_RxMASK_0(s);
src_ptr = (uint8 *)(getIINCHIP_RxBASE_0(s) + src_mask);

if((src_mask + len) > getIINCHIP_RxMAX_0(s)) 
  {
	size = getIINCHIP_RxMAX_0(s) - src_mask;
	wiz_read_buf_0((uint16)src_ptr, (uint8*)dst, size);
  printf("read_data_0;Over1;%x;%x;%x;%d;%d\r\n", src_ptr, dst, src_mask, size, len);
	
	dst += size;
	size = len - size;
	src_ptr = (uint8 *)(getIINCHIP_RxBASE_0(s));
	wiz_read_buf_0((uint16)src_ptr, (uint8*) dst, size);
  printf("read_data_0;Over2;%x;%x;%x;%d\r\n", src_ptr, dst, src_mask, size);
  } 
else
  {
  printf("read_data_0;%x;%x;%x;%d\r\n", src_ptr, dst, src_mask, len);
	wiz_read_buf_0((uint16)src_ptr, (uint8*) dst, len);
  }

}

OtdrTxRespProc;Start
read_data_0;60f8;10751a6;f8;8
read_data_0;6100;10751a6;100;4380
read_data_0;Over1;721c;10751a6;121c;3556;3804
read_data_0;Over2;6000;1075f8a;121c;248
read_data_0;60f8;10751a6;f8;1460
read_data_0;66ac;10751a6;6ac;1460
read_data_0;6c60;10751a6;c60;1460
read_data_0;7214;10751a6;1214;1460
read_data_0;77c8;10751a6;17c8;1460
read_data_0;Over1;7d7c;10751a6;1d7c;644;1460
read_data_0;Over2;6000;107542a;1d7c;816
read_data_0;6330;10751a6;330;1460
read_data_0;68e4;10751a6;8e4;1460
read_data_0;6e98;10751a6;e98;1460
read_data_0;744c;10751a6;144c;1460
read_data_0;7a00;10751a6;1a00;1460
read_data_0;Over1;7fb4;10751a6;1fb4;76;1360
read_data_0;Over2;6000;10751f2;1fb4;1284
OtdrTxRespProc;14;640c;OK
Err;CheckSumOtdrIs;wCheckSum;6ff1;3781;a772

모두(포인터, 길이) 정상적입니다. dst 메모리는 충분히 두었기 때문에 오버는 나지 않읍니다.
혹시, 속도 문제일까해서 인터럽트로 처리해도 결과는 같읍니다.

UDP에서는 조금 다른 방식이지만, 프로그램도(231k) 다운로드를 정상으로 했었읍니다.
왜 tcp에서만 안되는지 알수가 없네요.
전화해서 문의하고 싶은데 전화 번호도 나오지 않네요…

혹시, 관련해서 경험이 있거나 해결 방법을 아시는분 답글 부탁드립니다.

위즈네트 방보현 연구원입니다.

peter@wiznet.io 로 연락처를 주시면 연락드리겠습니다.

감사합니다.

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