본문 바로가기

[INTERFACE]/WIZNET_EVM

W5300 을 이용한 네트워크 카메라 구현 1/3 - 기본 개발환경 구성하기

W5300 테스트를 위한 테스트 보드 제작 및 기본 개발환경 설정

 

 

개요

Hardwired TCP/IP가 내장된 이더넷 컨트롤러 칩 W5300(https://www.wiznet.io/ko/product-item/w5300/)은 최대 80Mbps의 네트워크 성능이 있다고 한다.

고속의 네트워크 통신을 적용할 수 있는 분야로 카메라를 제작 해 보면 좋을것 같다.

W5300을 이용한 네트워크 카메라를 제작 해 보려고 한다.



첫번째 단계로 W5300을 제어하기 위해  Wiznet ioLibrary Driver (https://github.com/Wiznet/ioLibrary_Driver)를 STM32에 포팅하고 TCP Loopback 테스트로 네트워크 성능을 측정해 볼것이다.

 

그다음 단계로 STM32 카메라 인터페이스(DCMI)에 카메라 모듈을 연결하고 네트워크로 영상을 전송하는 테스트를 진행 할 예정이다.



프로젝트 관련 전체 소스코드는 https://github.com/elabsystem/STM32_RP 에서 다운로드할수있다.

 

MCU 선정

W5300의 인터페이스는 Address/Data Bus 방식 이므로  데이터 버스를 제공하고 카메라 인터페이스가 있는 STM32F4 시리즈중 144핀 패키지의 STM32F417Zx를 선정 했다.

STM32의 경우 같은 핀맵으로 더 높은 성능으로 쉽게 확장 가능하다. [STM32-RP Board] 시리즈로 계속 업데이트 할 예정이다.


 

보드 구성 

MCU Board는 여러가지 확장성을 고려 하여 실험하기 편한 형태로 제작 했다.

공통의 표준화된 핀맵을 사용하고 추후 확장성도 고려해서 Raspberry Pi 형태 (https://pinout.xyz/) 로 제작 했다.

 



하드웨어 회로도

W5300은 STM32의 Flexible static memory controller(이하 FSMC)에 연결하고 CS핀은 NE2에 연결을 했다.

카메라는 STM32의 Digital camera interface(이하 DCMI)에 연결 하고 카메라 설정은 I2C2에 연결 했다.

전체 회로도는 https://github.com/elabsystem/STM32_RP 에서 다운 받을 수 있다.

 



 

소프트웨어

STM32의 개발환경은 STM32CubeIDE ( https://www.st.com/en/development-tools/stm32cubeide.html)를 이용하였다. 

W5300제어를 위해서  Wiznet ioLibrary Driver (https://github.com/Wiznet/ioLibrary_Driver) 를 다운로드 받아 사용했다.

 

프로젝트 생성 및 기본 동작 테스트

먼저 STM32CubeIDE를 이용하여 새로운 프로젝트를 생성하고 UART, FSMC, DCMI, I2C 등의 각종 장치들을 설정해야 한다.

 

우선 가장 기본이 되는 UART 통신으로 “W5300 Hello World” 메시지를 출력해 보자 .

STM32CubeIDE에서 Connectivity항목에서 USART1의 Mode를 Asynchronous로 설정하고 디폴트 옵션으로 사용하면된다.




STM32의 클럭 설정은 8Mhz의 외부 크리스털로 설정하고 클럭스피드를 최대 168Mhz로 설정해 준다.




설정이 끝나고 저장하면 자동으로 기본 동작 코드가 생성된다.



STM32CubeIDE의 Settings에서 Optimize level 은  -Ofast 로 설정한다.




printf 함수를 사용하기 위해 _write() 함수를 재 정의 해서 UART1으로 출력 하도록 설정하면 된다.

int _write( int32_t file , uint8_t *ptr , int32_t len )
{
    /* Implement your write code here, this is used by puts and printf for example */
    for ( int16_t i = 0 ; i < len ; ++i )
    {
        HAL_UART_Transmit( &huart1, ptr++, 1, 100);
    }
    return len;
}

 

 

printf 함수를 이용해서 W5300 Hello World 메시지를 출력하는 코드를 작성하고 다운로드 한다.

int main(void)
{
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */
  printf("W5300 Hello World!\r\n");

  while(1);
}

 

 

다운로드는 SWD(Serial Wire Debugging) 로 하고 시리얼 디버깅은 UART 커넥터에 연결하거나 USB2UART 모듈을 연결하여 테스트 할 수 있다.



프로그램을 실행하면 시리얼 포트로 메시지가 출력되는 것을 확인 할 수 있다.





W5300제어용 FSMC 설정

W5300은 STM32의 FSMC를 통해 제어 되므로 FSMC 설정이 필요 하다. 

W5300의 CS가 STM32의 PG9에 연결되어 있기 때문에 NE2(BANK2)로 설정하면 된다.




W5300의 CS 핀은 PG9->FSMC_NE2에 연결되어 있고  0x64000000 어드레스 에서 제어 할 수 있다.

 

FMC 어드레스 할당 핀맵

(BANK1)CS1 -> PD7    : ((uint32_t)0x60000000) 

(BANK2)CS2 -> PG9    : ((uint32_t)0x64000000) 

(BANK3)CS3 -> PG10   : ((uint32_t)0x68000000)

(BANK4)CS4 -> PG12   : ((uint32_t)0x6C000000)

 

이제 기본 설정 및 테스트가 완료 되었다면 Wiznet ioLibrary Driver 포팅 및 TCP Loopback 전송률 테스트를 해 볼 수 있다.