[W5300] Bus Interface 통신 관련 문의

안녕하세요 Cypress CY8C5888LTI 를 기반으로 WIZ830MJ를 16 Bit Indirect Mode 로

기능 구현 이전에 모듈과 MCU 간의 동작 테스트를 하고자 합니다.

ioLibrary 의 To Do List 룰 참조하여 Initialize 하였고 EMIF 를 이용하여 모듈을 동작시키려하였지만

외부 메모리 영역(0x60000000 ~ )에서 값이 원하는입력 값으로 안들어가

잘못된 설정이나 Initialize 과정 중 실수가 있는지 도움을 요청하고자 문의드립니다.

아래에 해당 프로젝트 파일을 첨부하였습니다.

확인 가능하시면 도움 부탁드리겠습니다.

감사합니다.

W5300_EMIF.cydsn.zip (2.9 MB)

안녕하세요

프로젝트 전체에 대한 코드를 리뷰해드리지는 않으며, 특히 해당 MCU를 다루지 않기때문에 확인이 어렵습니다.
작성하신 코드에서 Init하는 부분과 설정에 대한 부분을 설명해주시면 확인해드리겠습니다.

답변해주셔서 감사합니다.

먼저 STM32를 이용해서 테스트를 해보니 동작이 되는 것을 확인하였습니다.

그 후 해당 코드를 pSoC 프로젝트로 옮겨 pSoC 에 맞춰 변형하였더니 동작이 되지않아 고민 중 입니다.

어드레스 지정에 있어서는 pSoC 의 EMIF 모듈이 10 bit 주소를 지원하지 않아 8bit + GPIO 2개를 이용하고 있습니다.

iodata_t wizchip_bus_readdata(uint32_t AddrSel) 
{
    AddrSel = (_WIZCHIP_IO_BASE_) + ((AddrSel & 0x3FF) << 0);
    ADDR_H_D9_Write((AddrSel >> 9) & 0x01);
    ADDR_H_D8_Write((AddrSel >> 8) & 0x01);
	return (CY_GET_XTND_REG16(AddrSel));
}

void 	wizchip_bus_writedata(uint32_t AddrSel, iodata_t wb)  
{
    AddrSel = (_WIZCHIP_IO_BASE_) + ((AddrSel & 0x3FF) << 0);
    ADDR_H_D9_Write((AddrSel & 0x200) >> 9);
    ADDR_H_D8_Write((AddrSel & 0x100) >> 8);
    CY_SET_XTND_REG16(AddrSel, wb);
}

pSoC에서 제공하는 EMIF의 타이밍은 아래 그림과 같고

image

pSoC EMIF 모듈의 타이밍도는 아래 파일 12~13p 에서 확인 가능합니다.

메인 함수는 아래와 같이 간단한 TCP 클라이언트 루프백 테스트로 구성하였습니다.

#include "project.h"
#include "stdio.h"
#include "socket.h"
#include "loopback.h"

void wizChip_HwReset()
{
    RESET_Write(0);
    CyDelay(20);
    RESET_Write(1);
    CyDelay(40);
}

uint8_t memsize[2][8] = { { 2, 2, 2, 2, 2, 2, 2, 2 },
                          { 2, 2, 2, 2, 2, 2, 2, 2 } };

char netTxBuf[2048] = {0, };
char netRxBuf[2048] = {0, };

wiz_NetInfo netInfo = {
    {0x11, 0x12, 0x13, 0x14, 0x15, 0x16},
    {192, 168, 0, 5},
    {255, 255, 255, 0},
    {192, 168, 0, 1},
    {8, 8, 8, 8},
    NETINFO_STATIC
};

uint8_t tcpHostIP[4] = {192, 168, 0, 4};

int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    UART_Start();
    EMIF_Start();

    wizChip_HwReset();

    ctlwizchip(CW_INIT_WIZCHIP, (void*)memsize);

    setMR(MR_DBW);

    ctlnetwork(CN_SET_NETINFO, &netInfo);

    socket(1, Sn_MR_TCP, 8002, 0);

    for(;;)
    {
        /* Place your application code here. */
 	    loopback_tcpc(1, (uint8_t*)netTxBuf, tcpHostIP, 8002);
    }
}

오실로스코프로 데이터 출력을 확인했을때 데이터 값과 어드레스 값이 출력되는 것을 확인했으나

디버그 모드에서 메모리를 확인하거나 데이터를 읽어오면 제대로된 값을 불러오지 못하더라고요…

해당 칩셋을 다루시지 않기에 세세한 답변은 어려우시겠지만 사소한 조언만이라도 주시면

감사하겠습니다.

기다란 글 읽어주셔서 감사합니다.