---
title: "어드레스 접근 문제"
url: "https://maker.wiznet.io/forum/10762"
markdown_url: "https://maker.wiznet.io/forum/10762/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "palmer"
created: "2015-01-06T14:26:32+09:00"
last_activity: "2017-05-04T08:34:46+09:00"
language: "ko"
views: 848
replies: 1
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# 어드레스 접근 문제

## Question

Asked by palmer on 2015-01-06 in Ethernet Chips.

하드웨어 작업을 하기전에 WIZ140SR 에 프로그램을 라이팅 해서 테스트를 하고 있습니다.
관련 글 중에 getIDR() 을 했을 경우 5300 으로 읽혀야 하는데 0100 이나 B800 등으로 읽혔었습니다.

STM32 의 FSMC bank 설정을 FSMC_Bank1_NORSRAM2 (64000000) 으로 했던게 원인이었습니다.

이부분은 #define **DEF_IINCHIP_MAP_BASE** ((uint32_t)0x68000000)
이렇게 고치고 해당 레지스터들을 미리 쉬프트 했습니다.

#define IDR (COMMON_REG_BASE + 0xFE*2)
#define IDR1 (IDR + 1)

위처럼 고치니까 getIDR() 을 했을 경우 5300 으로 정상 출력이 되었습니다.

그러나 IP 라든지, MAC 이라든지 이런 부분을 아래와 같이
uint8 ip[4] = {192,168,0,100}; // for setting SIP register
uint8 gw[4] = {192,168,0,1}; // for setting GAR register
uint8 sn[4] = {255,255,255,0}; // for setting SUBR register
uint8 mac[6] = {0x00,0x08,0xDC,0x11,0x22,0x86}; // for setting SHAR register

```
GPIO_ResetBits(GPIOF, GPIO_Pin_6);
Delay(10);
GPIO_SetBits(GPIOF, GPIO_Pin_6);

// initiate W5300
iinchip_init();

setMR(getMR()|MR_FS);            
setSHAR(mac);                                      // set source hardware address

// configure network information
setGAR(gw);                                     // set gateway IP address
setSUBR(sn);                                    // set subnet mask address
setSIPR(ip);                                    // set source IP address
```

라이팅 하고 읽어보면
W5300 ver : 5300
W5300 MR : B900
Network Setting Information
Physical Address : dc:11:dc:11:22:86
Gateway Address : 0.1.0.1
Subnet Mask : 255.0.255.0
Ip Address : 0.100.0.100

이렇게 출력이 됩니다. 첨부된 파일처럼 레지스터들을 모두 2배수 했는데 안되는 이유는 무었인가요?
[w5300.h](https://maker.wiznet.io/uploads/short-url/cwg9IWPBY631KsrYXSxgfphSCZQ) (26.7 KB)

## Replies

### Reply 1 by palmer, 2015-01-31

스코프로 확인시 어드레스 및 데이터는 16비트로 동작하는게 확인 되었습니다.

uint8 mac[6] = {0x01,0x02,0xDC,0x1E,0x5E,0x0E}; // for setting SHAR register
uint8 addr[6]= {0,0,0,0,0,0};
vPrintf(UART1_SERIAL, “Write : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
setSHAR(mac);

getSHAR(addr); // get source hardware address
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);

이렇게 사용하면
Read : dc:1e:dc:1e:5e:0e
이렇게 읽힙니다.

IINCHIP_WRITE(SHAR2,((uint16)mac[2]&lt;&lt;8)+mac[3]);
addr[0] = (uint8)(IINCHIP_READ(SHAR)>>8);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
addr[1] = (uint8)IINCHIP_READ(SHAR);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);

addr[2] = (uint8)(IINCHIP_READ(SHAR2)>>8);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);

addr[3] = (uint8)IINCHIP_READ(SHAR2);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);

IINCHIP_WRITE(SHAR4,((uint16)mac[4]&lt;&lt;8)+mac[5])
addr[4] = (uint8)(IINCHIP_READ(SHAR4)>>8);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
addr[5] = (uint8)IINCHIP_READ(SHAR4);
vPrintf(UART1_SERIAL, “Read : %02x:%02x:%02x:%02x:%02x:%02x\r\n”, addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);

Write : 01:02:dc:1e:5e:0e
Read : 01:00:00:00:00:00
Read : 01:02:00:00:00:00
Read : 01:02:dc:00:00:00
Read : 01:02:dc:1e:00:00
Read : 01:02:dc:1e:5e:00
Read : 01:02:dc:1e:5e:0e

이렇게 정상적으로 읽힙니다.
레지스터에 1번 접근하고 다음 레지스터에 접근할 때의 문제 일까요?

---

Source: https://maker.wiznet.io/forum/10762
