W5100 indirect setting 문의드립니다

#1

안녕하세요. W5100 사용자입니다. 절차가 아래 표시한게 맞는지요?

하드웨어는 아래와같이 구성되어 있습니다.

CS/WR/RD, [A1:A0], [D7~D0] 사용하고, [A14~A2]와 SEN을 GND 처리하였습니다.

CS = 0
  1. MR setting

    [A1:A0] = 0:0
    [D7:D0] = 03 --> AI & IND setting
    WR = 0
    WR = 1

  2. GAR0~GAR3 setting
    [A1:A0] = 0:1
    [D7:D0] = 00 -->MSB
    WR = 0
    WR = 1
    [A1:A0] = 1:0
    [D7:D0] = 01 – LSB
    WR = 0
    WR = 1
    [A1:A0] = 1:1
    [D7:D0] = 192
    WR = 0
    WR = 1
    [D7:D0] = 168
    WR = 0
    WR = 1
    [D7:D0] = 100
    WR = 0
    WR = 1
    [D7:D0] = 254
    WR = 0
    WR = 1

검토 부탁드립니다.

감사합니다.

#2

하드웨어 구성은 특별히 틀린 것이 없어 보입니다.

Read /Write는 하기의 W5100 Driver를 참고 하시기 바랍니다.
간단히 설명하면,
IDM_AR0 register에 상위 어드레스를 Write하고
IDM_AR1 register에 하위 어드레스를 Write한뒤
Reat와 Write에 맞게
IDM_DR register에 값을 Read혹은 Write하시면 됩니다.
감사합니다.


uint8 IINCHIP_READ(uint16 addr)
{
	uint8 data;
        IINCHIP_ISR_DISABLE();
	*((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8);
	*((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF);
	data = *((vuint8*)IDM_DR);
	IINCHIP_ISR_ENABLE();  
	return data;
}


uint8 IINCHIP_WRITE(uint16 addr,uint8 data)
{
	*((vuint8*)IDM_AR0) = (uint8)((addr & 0xFF00) >> 8);
	*((vuint8*)IDM_AR1) = (uint8)(addr & 0x00FF);
	*((vuint8*)IDM_DR)  = data;
        IINCHIP_ISR_ENABLE();
	return 1;
}

W5100 Driver Link : http://wiznet.co.kr/sub_modules/en/product/product_detail.asp?Refid=648&page=1&cate1=&cate2=&cate3=&pid=1074&cType=2