안녕하세요.
W7500P가 정상작동하는지 확인을 하기 위해서 예제를 참고하여 다음과 같은 테스트 소스를 작성하였습니다. 제 생각에는 아래처럼하면 고정 ip를 받는 것이고 문제 없이 링크가 붙어서 통신일 될 것이라고 생각했습니다.
라우터 포트에 연결하여 보니 w7500p을 확인할 없었습니다. 정상적으로 링크가 붙지 않는것 같아서 데스크탑과 같은 네트워크 대역을 갖게 설정한 뒤 1:1로 연결하였지만 링크가 붙지 않는 것 같았습니다.
회로의 문제가 아닐까 하여 엠베드 보드와 다른 회로를 사용해 보았는데도 동일 증상이 발생합니다.
혹시 시간이 되시면 한번 검토해주셔도 되나요?
/*netset.h*/
#ifndef NET_SETTING_H__
#define NET_SETTING_H__
#include "W7500x_wztoe.h"
#include "W7500x_miim.h"
#include "loopback.h"
#include "dhcp.h"
#include "socket.h"
#include "flash.h"
#define SOCK_TCPS 0
#define SOCK_DHCP 2
#define MY_MAX_DHCP_RETRY 3
#define MAC_ADDR_SIZE 6
#define IP_ADDR_SIZE 4
typedef struct netconfig{
uint8_t mac_addr[6];
uint8_t src_addr[4];
uint8_t gw_addr[4];
uint8_t sub_addr[4];
}NetConfig;
void netboot(void);
void netset(void);
void vDHCPTaskFunction(void* pvParameters);
#endif
/*netset.c*/
#include "netset.h"
#include "flash.h"
#define debug_mode
const uint8_t SIPR[4] = {192,168,42,9};
const uint8_t GAR[4] = {192,168,42,1};
const uint8_t SUBR[4] = {255,255,255,0};
uint8_t test_buf[2048];
uint32_t my_dhcp_retry = 0;
#ifdef debug_mode
const uint8_t SHAR[6] = {0x00, 0x08, 0xDC, 0x71, 0x72, 0x77};
#endif
void netboot(void){
#ifdef debug_mode
DO_IAP(IAP_PROG, DAT0_START_ADDR, (uint8_t*)SHAR, MAC_ADDR_SIZE);
DO_IAP(IAP_PROG, DAT0_START_ADDR + MAC_ADDR_SIZE, (uint8_t*)SIPR, IP_ADDR_SIZE);
DO_IAP(IAP_PROG, DAT0_START_ADDR + MAC_ADDR_SIZE + IP_ADDR_SIZE, (uint8_t*)GAR, IP_ADDR_SIZE);
DO_IAP(IAP_PROG, DAT0_START_ADDR + MAC_ADDR_SIZE + IP_ADDR_SIZE + IP_ADDR_SIZE, (uint8_t*)SUBR, IP_ADDR_SIZE);
#endif
PHY_Init();
while( link() == 0x0)
netset();
// if((Buffercmp((uint8_t*)SIPR,(((/*volatile */uint8_t *)(DAT0_START_ADDR) + MAC_ADDR_SIZE)),IP_ADDR_SIZE) == PASSED) &&
// (Buffercmp((uint8_t*)GAR, (((/*volatile */uint8_t *)(DAT0_START_ADDR) + MAC_ADDR_SIZE + IP_ADDR_SIZE)),IP_ADDR_SIZE) == PASSED) &&
// (Buffercmp((uint8_t*)SUBR,(((/*volatile */uint8_t *)(DAT0_START_ADDR) + MAC_ADDR_SIZE + IP_ADDR_SIZE + IP_ADDR_SIZE)),IP_ADDR_SIZE) == PASSED) )
// {
//run dhcp task->if 3 time loss, then default netset
// }
}
void netset(void){
NetConfig config;
readflash((uint8_t*)config.mac_addr,(/*volatile */uint8_t *)(DAT0_START_ADDR), MAC_ADDR_SIZE);
readflash((uint8_t*)config.src_addr,(/*volatile */uint8_t *)(DAT0_START_ADDR + MAC_ADDR_SIZE), IP_ADDR_SIZE);
readflash((uint8_t*)config.gw_addr, (/*volatile */uint8_t *)(DAT0_START_ADDR + MAC_ADDR_SIZE + IP_ADDR_SIZE), IP_ADDR_SIZE);
readflash((uint8_t*)config.sub_addr,(/*volatile */uint8_t *)(DAT0_START_ADDR + MAC_ADDR_SIZE + IP_ADDR_SIZE + IP_ADDR_SIZE), IP_ADDR_SIZE);
setSHAR(config.mac_addr);
setSIPR(config.src_addr);
setGAR(config.gw_addr);
setSUBR(config.sub_addr);
}
void vDHCPTaskFunction(void* pvParameters){
}