W5100 수신 문제
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Share projects and connect with makers.
Joined before the site update? first.
New to WIZnet Makers?
We sent a verification link to your address. Open it to activate your account, then log in.
Accounts from this email provider are reviewed by an administrator after verification. Approval usually takes one business day.
Already have an account?
Enter your email address. If it belongs to an account, we'll send a link to set a new password. Members who joined before the site update use this to set their password.
If an account uses that address, we sent a link to set a new password. The link works once and expires in 30 minutes.
Know your password?
Need an account?
RE: W5100 수신 문제
by becky ·
Sn_RX_RSR 값은 Sn_RX_WR - Sn_RX_RD 값으로 계산되어집니다.
Sn_RX_WR, Sn_RX_RD 값을 첫번째 데이터를 전송하였을때와 두번째 데이터를 전송하였을때의 값을 비교해보셔서 어떤 레지스터가 문제인지 확인해보시면 좋을것 같습니다.
또한 변수의 사이즈를 한번더 확인해보시기 바랍니다.
recv_size 와 ptr은 unsigned int 16bit, ptr1과 ptr1는 unsigned int 8bit로 선언된것이 맞나요?
RE: RE: W5100 수신 문제
by Member 11129 ·
네. 변수 사이즈는
uint16_t recv_size;
uint16_t ptr;
uint8_t ptr1,ptr2;
맞게 설정되어 있습니다.
Sn_RX_WR 번지수가 어떻게 되나요?
데이터시트에서는 검색이 안되네요.
RE: W5100 수신 문제
by becky ·
Sn_RX_RD 바로 다음주소로
0번 socket의 경우 0x042A - 0x042B 입니다.
RE: W5100 수신 문제
by Member 11129 ·
Sn_RX_RD 읽어보면
0x042A : 0x0, 0x042B : 0x18
로 읽힙니다.
DBWrite8(S0_CR,0x40); //RECV 이 부분을 주석처리하면 값은 0x18씩 증가를 합니다.
주석을 해제하면 0x18 로 유지가 되네요.
지금은 계속 수신만 하게되어있는데, 수신 후에 송신을 해야 되는건가요??
RE: W5100 수신 문제
by becky ·
수신 이후에 송신을 해야할 필요는 없습니다.
계속 수신만 하는것도 가능합니다.
유선상으로 말씀드렸다시피, Sn_RX_WR 레지스터는 Sn_CR 레지스터의 영향을 받지 않습니다.
데이터를 RECV할때마다 Sn_RX_WR 값이 증가하는것이 정상적인 동작입니다.
우선 아래 3가지 확인 부탁드립니다.
이후 S0_CR 레지스터를 read하시면 0x00으로 clear 되는지 확인바랍니다.
RE: W5100 수신 문제
by Member 11129 ·
위와 같이 테스트하였을 때
첫 번째 수신 시에는
recv size : 24
S0_CR: 0x0 S0_SR: 0x22
0x042A : 0x0, 0x042B : 0x18
S0_RX_RD1 : 0x0 S0_RX_RD2 : 0x18
두번 째는
recv size : 0
S0_CR: 0x0 S0_SR: 0x22
0x042A : 0x0, 0x042B : 0x18
S0_RX_RD1 : 0x0 S0_RX_RD2 : 0x18
입니다.
#define S0_CR 0x0401
#define S0_SR 0x0403
로 정의되어있습니다.
왜 못받는지 이해가 안되네요…ㅜㅜ
RE: W5100 수신 문제
by becky ·
추가로 코드를 한번더 확인해보니
Source IP와 Port를 Socket Open 이후에 설정해주시고 계신데
Socket Open전에 설정 바랍니다.
RE: W5100 수신 문제
by Member 11129 ·
오픈 전에 소스 IP와 Port를 설정하면 상태는 Sn_SR 상태는 0x22로 되는데
몇일 전에 수신이 되지 않아서 설정 순서를 바꾸다 보니 저 설정순서에서 수신이 되어 저렇게 하였습니다.
방금 설정 순서를 변경하였는데, 마지막에 오픈을 하니 수신이 안되네요.
RE: W5100 수신 문제
by becky ·
Source IP와 Port를 설정하고나서 Socket을 오픈한 후,
Source IP와 Port 값을 확인할 경우에는 값이 남아있나요?
또한
아래는 ioDriver의 W5100에 대한 Recv 코드입니다.
지금 사용중이신 코드상에서는 masking 처리를 안해주고 있습니다.
현재 문제와 무관하다고 느끼실수 있으나,
masking 처리를 하지않고 데이터를 read할경우 chip의 엉뚱한 레지스터를 건드릴 수 있으므로 ptr에 masking 처리를 하여 데이터를 read하시기 바랍니다.
RxMAX 값은 Socket buffer size가 2KB로 설정되있다는 가정하에 2048, RXMASK 값은 2047(2048-1) 로 계산하시면 됩니다.
RE: W5100 수신 문제
by Member 11129 ·
네. making 처리하겠습니다.
원인이 무엇인지 찾은 것 같습니다.
부팅 시 설정하는 부분입니다.
Des IP와 Port를 설정 → 오픈 → Src IP와 Port 설정
프린트 출력을 보면,
Des IP : 0.0.0.0 Port : 0 Src IP : 192.168.0.200 Port : 3000
Des IP와 Port가 0으로 초기화가 됩니다.
그리고 수신 후, IP와 Port를 보면
Des IP : 0.0.0.0 Port : 0 Src IP : 192.168.0.200 Port : 184
Src Port가 변경됨을 확인이 되네요.
Recv 커맨드 이후에 이런 현상이 있는 것 같습니다.
지속적으로 IP와 Port를 설정해줘야 되는건가요??
RE: W5100 수신 문제
by becky ·
Source IP와 Port는 한번 설정해주면 변경되지 않는것이 정상동작입니다.
아까 말씀드린 포인터 부분때문에 CHIP의 엉뚱한 부분을 잘못건드릴 수 있습니다.
수정이후 동작을 다시한번 확인해보시기 바랍니다.