<목차>

1. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(1)

2. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(2)

3. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(3)

4. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(4)

5. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(5)

6. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(6)

7. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(7)

8. W5500 ioLibrary_BSD를 MCU 8051로 포팅하기(8)

 

 

 

 

5. 포팅하기 - C8051F380 설정하기

 

 

ioLibrary 사용에 앞서 C8051F380을 사용하기 위한 MCU 기반 기본 설정(Main clock, UART, SPI, GPIO등)을 해야 한다.

 

W5500 제어를 위한 필요한 제원등을 살펴보면 다음과 같다.

   - Main Clock

   - W5500(WIZ550io) Reset , UART, SPI 등으로 사용될 GPIO  핀 설정

   - 간단한 Debugging을 위한 UART (printf 사용)

   - W5500 제어를 위한 SPI 

 

이 부분은 너무 걱정하지 않아도 되는 것이 앞서 언급된 Configuration Wizard2 tool을 이용하면 쉽게 할 수 있다. (여기 참조 : http://midnightcow.tistory.com/entry/W5500-ioLibraryBSD-8051-Porting-하기-2 )

 

자 그럼 지금부터 Configuration Wizard2를 이용하여 하나씩 설정해보자.

 

- Main Clock  (메뉴 선택 : Config Wizard  >> C8051F380 선택 >> Peripherals >> Oscillator)

 

C8051F380-TB 보드는 Y1 즉 External Clock이 없다. 따라서 내부 클럭을 선택해야 하는데 뭐가 있는지 알 수없다.

물론 데이타시트를 보고 내용을 파악할 수 있지만, Configruation Wizard2 tool에서 미루어 짐작할 수 있다.

 

Clock Source로 Internal H-F Oscillator를 선택한다.

 

SYSCLK으로 Internal H-F Oscillator를 선택한다. 그럼 SYSCLK speed가 48MHz로 표시된다.

Internal H-F 가 12MHz로 선택되고 SYSCLK speed가 48MHz이므로 내부 PLL이 4배로 동작하고 있음을 알 수 있다.

 

상기 설정을 마친 후 OK를 누르면 해당하는 코드가 다음과 같이 나타난다. 이를 복사해서 그대로 사용한다.

 

 

- W5500(WIZ550io) Reset , UART, SPI 등으로 사용될 GPIO  핀 설정

   (메뉴 선택 : ... >> Peripherals >> Port I/O)

W5500 Reset은 C8051F380 GPIO P1_0과 연결되어 있다. 이를 Digital Output으로 사용하기 위해 Pull-up 처리를 해준다. 이때 Crossbar Enable Check box를 체크해야 한다. 물론 체크하지 않았다 하더라도 OK를 누르는 순간 설정하라는 메시지창이 뜬다.

또한 UART와 SPI를 사용할 것이므로 UART0과 SPI0을 선택한다. SPI PIN들은 다른 Device와 공유될 수 있으므로 Pull-up 처리해준다. UART0과 SPI0은 기본 PIN을 그대로 사용한다. 물론 이핀들은 Pin SKIP 처리에 의해 원하는 것으로 이동도 가능하다.

설정 완료 후 OK를 누르면 Clock 설정과 같이 자동 생성된 코드가 추가된다.

 

 

 

- 간단한 Debugging을 위한 UART (printf 사용)  설정 (메뉴 선택 : ... >> Peripheral >> UART)

 

UART0 PIN 설정 완료 후 실제 통신에 필요한 설정을 해야 한다. 일반적으로 UART는 SYSCLK을 이용한 내부 Timer에 Baud rate가 결정되므로 Timer 설정도 같이 동반된다. UART는 단순 Debugging용으로 사용할 것이므로 Data bit 8, Baud rate 115200을 사용하도록 설정한다. 설정 완료 후 OK를 누르면 자동 생성된 코드가 추가된다.

 

 

 

- W5500 제어를 위한 SPI  (메뉴 선택 : ... >> Peripheral >> SPI)

마지막으로 W5500 제어를 위한 SPI 인터페이스를 설정한다. W5500은 SPI clock speed를 80MHz까지 지원한다고 되어 있다. C8051F380은 SYSCLK이 MAX 48MHz이므로 분주 클럭을 사용할 경우 최소 24MHz까지 설정 가능할 것으로 기대하나 실제 Jumper선으로 연결해서 인지 24MHz에서는 동작하지 않았다. 따라서 12MHz로 낮추어서 설정했다. 자 그럼 다음과 같이 설정해보자.

 

 

W5500은 SPI mode 0번과 3번을 지원한다. SPI mode 0 과 SPI mode 3은 모두 SPI clock이 Low인 동안 Data가 변할 수 있는 모드이고, 0번 인경우 SPI clock이 Low로 시작하고, 3인 경우는 High 상태로 시작한다. 더 궁금한 내용은 http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus를 참조하자.

3번 설정에서 W5500을 SPI mode 0으로 사용할 수 있도록 설정하였다.

 

 

이상 C8051F380 구동에 필요한 기본 정보 설정을 마쳤다. 이때 생성된 코드는 Project 의 main file인 ioLibrary_W5500_main.c 에 #include 문들과 main() 함수 사이에 복사한다.

void Timer_Init()
{
    TCON      = 0x40;
    TMOD      = 0x20;
    CKCON     = 0x08;
    TH1       = 0x30;
}

void UART_Init()
{
    SCON0     = 0x10;
}

void SPI_Init()
{
    SPI0CFG   = 0x40;
    SPI0CN    = 0x0D;
    SPI0CKR   = 0x01;
}

void Port_IO_Init()
{
    // P0.0  -  SCK  (SPI0), Open-Drain, Digital
    // P0.1  -  MISO (SPI0), Push-Pull,  Digital
    // P0.2  -  MOSI (SPI0), Push-Pull,  Digital
    // P0.3  -  NSS  (SPI0), Push-Pull,  Digital
    // P0.4  -  TX0 (UART0), Open-Drain, Digital
    // P0.5  -  RX0 (UART0), Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.0  -  Unassigned,  Push-Pull,  Digital
    // P1.1  -  Unassigned,  Open-Drain, Digital
    // P1.2  -  Unassigned,  Open-Drain, Digital
    // P1.3  -  Unassigned,  Open-Drain, Digital
    // P1.4  -  Unassigned,  Open-Drain, Digital
    // P1.5  -  Unassigned,  Open-Drain, Digital
    // P1.6  -  Unassigned,  Open-Drain, Digital
    // P1.7  -  Unassigned,  Open-Drain, Digital

    // P2.0  -  Unassigned,  Open-Drain, Digital
    // P2.1  -  Unassigned,  Open-Drain, Digital
    // P2.2  -  Unassigned,  Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital
    // P2.4  -  Unassigned,  Open-Drain, Digital
    // P2.5  -  Unassigned,  Open-Drain, Digital
    // P2.6  -  Unassigned,  Open-Drain, Digital
    // P2.7  -  Unassigned,  Open-Drain, Digital

    // P3.0  -  Unassigned,  Open-Drain, Digital
    // P3.1  -  Unassigned,  Open-Drain, Digital
    // P3.2  -  Unassigned,  Open-Drain, Digital
    // P3.3  -  Unassigned,  Open-Drain, Digital
    // P3.4  -  Unassigned,  Open-Drain, Digital
    // P3.5  -  Unassigned,  Open-Drain, Digital
    // P3.6  -  Unassigned,  Open-Drain, Digital
    // P3.7  -  Unassigned,  Open-Drain, Digital

    P0MDOUT   = 0x0E;
    P1MDOUT   = 0x01;
    XBR0      = 0x03;
    XBR1      = 0x40;
}

void Oscillator_Init()
{
    FLSCL     = 0x90;
    CLKSEL    = 0x03;
    OSCICN    = 0xC3;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Timer_Init();
    UART_Init();
    SPI_Init();
    Port_IO_Init();
    Oscillator_Init();
}

 

ioLibrary_W5500_main.c의 main() 함수에 다음과 같이 Init_Device()를 콜한다.

 

int main (void)
{
	Init_Device();

	while (1) {}                             // Spin forever

	// NOTREACHED

	return 0;
}

컴파일 후 에러가 없는지 확인한다.

다음 시간에 W5500을 ioLibrary를 이용하여 구동시켜 볼 것이다.

 

 

< PREV                                                                                                      NEXT >

블로그 이미지

MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

,