보드 하나에 W5500 2개를 이용 내부, 외부 통신
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: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by lawrence WIZnet ·
안녕하세요 위즈네트 입니다.
작성해주신 내용 확인했습니다.
일단 해당 내용만 보고는 판단하기가 어려워서 몇가지 확인하실 수 있는 부분에 대해서 답변드립니다.
첫번째로 일단 case 2로 들어오는지가 확인되셨는지요?
두번째로 들어왔다면 인터페이스쪽에서 동작하지 않는것인지요?
세번째로 인터페이스가 동작한다면 ChkComm_iNet(); 함수내에서 동작하지 않는지요?
다음의 내용을 검토하시고 디버깅을 부탁드립니다.
감사합니다.
RE: RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
이제 보니 TCP/IP , UDP 둘다 됩니다.
한가지 여줘 보고 싶은건
while(1){
reg_wizchip_cs_cbfunc(SpiDrv_Enable_CSB, SpiDrv_Disable_CSB);
reg_wizchip_spi_cbfunc(SpiDrv_ReadB, SpiDrv_WriteB);
if(TimeTask.bit.Task_10ms==TRUE)
{
tick_10msA++;
switch(tick_10msA){
}
이럴때 tick_10ms switch 문이 실행이 되더라도 while 문 아래 reg_wizchip_cs_cbfunc(SpiDrv_Enable_CSB, SpiDrv_Disable_CSB);
reg_wizchip_spi_cbfunc(SpiDrv_ReadB, SpiDrv_WriteB); 이 녀석들이 함수 콜을 계속 하다보니 case1 에 들어가도 소켓성립이 안되는것 같습니다.
그렇다면 reg_wizchip_cs_cbfunc(SpiDrv_Enable_CSB, SpiDrv_Disable_CSB);
reg_wizchip_spi_cbfunc(SpiDrv_ReadB, SpiDrv_WriteB);
이걸 따로 만들어 줘야 할것같은데
void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void))
{
if(!cs_sel || !cs_desel)
{
WIZCHIP.CS._select = wizchip_cs_select;
WIZCHIP.CS._deselect = wizchip_cs_deselect;
}
else
{
WIZCHIP.CS._select = cs_sel;
WIZCHIP.CS._deselect = cs_desel;
}
}
void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb))
{
while(!(WIZCHIP.if_mode & WIZCHIP_IO_MODE_SPI));
if(!spi_rb || !spi_wb)
{
WIZCHIP.IF.SPI._read_byte = wizchip_spi_readbyte;
WIZCHIP.IF.SPI._write_byte = wizchip_spi_writebyte;
}
else
{
WIZCHIP.IF.SPI._read_byte = spi_rb;
WIZCHIP.IF.SPI._write_byte = spi_wb;
}
}
이부분을 함수이름만 바꿔서 하면 돼나요 ?
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by lawrence WIZnet ·
안녕하세요
while에서 콜백함수를 계속 잡고 있으면 case 문에서 동작한다고 하더라도 제대로 동작할것 같지 않습니다.
말씀하신대로 while에서 함수호출을 하지마시고 case안에서 각각 호출하는 방법으로 변경하시면 어떨까요?
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void))
{
if(!cs_sel || !cs_desel)
{
WIZCHIP.CS._select = wizchip_cs_select;
WIZCHIP.CS._deselect = wizchip_cs_deselect;
}
else
{
WIZCHIP.CS._select = cs_sel;
WIZCHIP.CS._deselect = cs_desel;
}
}
void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb))
{
while(!(WIZCHIP.if_mode & WIZCHIP_IO_MODE_SPI));
if(!spi_rb || !spi_wb)
{
WIZCHIP.IF.SPI._read_byte = wizchip_spi_readbyte;
WIZCHIP.IF.SPI._write_byte = wizchip_spi_writebyte;
}
else
{
WIZCHIP.IF.SPI._read_byte = spi_rb;
WIZCHIP.IF.SPI._write_byte = spi_wb;
}
}
따로 나누어줄 필요는 없는건가요 ?
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
안녕하세요. 계속 연락드려 죄송합니다.
소스를 첨부하였습니다.
보시고 연락부탁드립니다.
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
wiz_NetInfo gWIZNETINFO = {
.mac = { 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, // Mac address
.ip = { 192, 168, 1, 210 }, // IP address
.gw = { 192, 168, 1, 1}, // Gateway
.sn = { 255, 255, 255, 0}, // Subnet mask
.dns = { 8, 8, 8, 0}, // DNS Server
.dhcp = NETINFO_STATIC
};
void InitUserEthernetDrvA(void)
{
#ifdef DBG_ON
printf(" Ethernet : MEMORY CONFIG ERR.\r\n");
#endif
//while(1);
}
}
void NetConf(void)
{
ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO);
}
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by becky ·
안녕하세요
유선상으로 말씀드렸다시피
server와 client의 ip대역대가 맞지않아서 arp 가 정상적으로 이루어지지 않고 있는 상태입니다.
ip대역대를 맞추신후에 테스트 부탁드립니다.
또한, 통신에 문제가 있을때 ping이 잘이루어지는지 확인하시는 것이 좋습니다.
command창에서
ping 192.168.xxx.xxx
입력하시면 됩니다.
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
안녕하세요.
우선 소스에 time_out 설정을 하였습니다.
MCU Reset은 없어졌는데요. connect 함수 안에 while 문 안으로 들어가 timeout으로 return 됩니다. 그래서 MCU Reset은 없어졌구요 하지만 getSn_Sr 의 상태값은 0x00->0x13 반복됩니다.
w5500에서 리셋 되는것 같습니다.
제가 코딩한 부분 첨부하겠습니다.
서버로는 되는데 클라이언트는 왜 안되는걸까요?
PC IP설정은 192.168.1.211로 설정하였습니다.
허큘레스 TCP 서버로 하고 포트는 5000번 했습니다.
그리고 포럼에 이런 현상이 많은 분들이 있으신데 해결된 답변이 보이지가 않습니다.
아래는 이런 현상이 있어 포럼에 글 올린 주소 입니다,
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by lawrence WIZnet ·
안녕하세요 위즈네트입니다.
timeout뒤에 다시 socket을 open하는 것은 함수 flow대로 동작하는 내용입니다.
다만 timeout이 나는 이유를 확인해봐야 할 것 같습니다.
PC에서 wireshark를 실행시키신다음 TCP server를 open한뒤에 칩에서 접속을 시도하시고
wireshark에서 칩 IP로 필터링하신 결과를 보내주실 수 있으신가요?
패킷 확인뒤에 어떠한 부분에서 문제가 생겼는지 검토해 보겠습니다.
감사합니다!
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by PSS ·
sss.zip (13.8 KB)
패킷은 올렸는데 보드쪽에 반응이 없네요 … 0x13 0x00 이런식이로 반복되는데…
이것때문에 패킷에 나타나지 않은것 같아요
RE: 보드 하나에 W5500 2개를 이용 내부, 외부 통신
by lawrence WIZnet ·
현재 패킷을 보면 다음과 같이 chip에서는 SYN을 보내주나 PC에서 RST 패킷을 전송합니다.
chip은 RST패킷을 받으면 바로 Close됩니다.
이 경우에는 PC에서 5000번 포트가 사용중이기때문에 접속을 거절합니다.
포트 번호를 바꾸어서 접속을 시도해보세요