본문 바로가기

[ST_MICRO]/STM32F4

[STM32F4-RP ] STM32F405에서 W5300을 FSMC 방식으로 연결하여 테스트 하기

소소코드 : https://github.com/elabsystem/STM32_RP/tree/master/ex10_w5300_loopback

 

GitHub - elabsystem/STM32_RP

Contribute to elabsystem/STM32_RP development by creating an account on GitHub.

github.com

 

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

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

 

 

W5300제어용 FSMC 설정

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

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




Wiznet ioLibrary Driver 포팅

W5300을 제어 하기 위해 가장 기본적으로 해야 할 일이 W5300의 레지스터에 원하는 값을 쓰고 읽어 보는 것이다.

레지스터의 값을 쓰고 읽는 함수는 Wiznet ioLibrary Driver에 포함되어 있고 보드에 맞도록 포팅해 주어야 한다.

 

우선 다운로드 받은 ioLibrary의 Ethernet 폴더에 W5300관련 코드를 프로젝트에 복사 하고 컴파일 해 보자

 

아래와 같이 에러가 발생 한다.

헤더파일의 디렉토리를 찾을수 없다고 한다.



STM32CubeIDE의 환경설정에서 ioLibrary의 include paths를 설정해 주면 해결된다.

../Core/Src/ioLibrary_Driver-master/Ethernet

../Core/Src/ioLibrary_Driver-master/Ethernet/w5300

 




컴파일이 완료 되었다면 ioLibrary를 보드에 맞게 포팅해 주어야 하는데 W5300의 리셋함수, W5300 레지스터 읽기 함수(W5300_read), 쓰기 함수(W5300_write)를 등록 해 주면 된다.

#define W5300_BANK_ADDR                 ((uint32_t)0x64000000)
#define _W5300_DATA(p)                  (*(volatile unsigned short*) (W5300_BANK_ADDR + (p<<1)))


void Reset_W5300()
{
    HAL_GPIO_WritePin(RESET_W5300_GPIO_Port, RESET_W5300_Pin, GPIO_PIN_RESET);
    HAL_Delay(10);
    HAL_GPIO_WritePin(RESET_W5300_GPIO_Port, RESET_W5300_Pin, GPIO_PIN_SET);
    HAL_Delay(100);
}

void W5300_write(uint32_t addr, iodata_t wd)
{
    _W5300_DATA(addr) = wd;
}

iodata_t W5300_read(uint32_t addr)
{
    return _W5300_DATA(addr);
}




메인 함수에서 아래와 같이 코드를 작성하여 W5300의 SHAR 레지스터에 값을 쓰고 읽는 테스트를 해보자

printf("W5300 Hello World!\r\n");

Reset_W5300();
reg_wizchip_bus_cbfunc(W5300_read, W5300_write);

while(1)
{
    wr_data = 0x1234;

    printf("write= %x\r\n", wr_data);
    WIZCHIP_WRITE(SHAR, wr_data);

    rd_data = WIZCHIP_READ(SHAR);
    printf("read= %x\r\n", rd_data);

    HAL_Delay(1000);
}

 

프로그램을 실행 하면 시리얼 포트를 통해 W5300의 SHAR 레지스터에 쓴값을 동일하게 읽는것을 확인 할수 있다. 




 

 

 

반응형