답변해주셔서 감사합니다.
먼저 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의 타이밍은 아래 그림과 같고
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);
}
}
오실로스코프로 데이터 출력을 확인했을때 데이터 값과 어드레스 값이 출력되는 것을 확인했으나
디버그 모드에서 메모리를 확인하거나 데이터를 읽어오면 제대로된 값을 불러오지 못하더라고요…
해당 칩셋을 다루시지 않기에 세세한 답변은 어려우시겠지만 사소한 조언만이라도 주시면
감사하겠습니다.
기다란 글 읽어주셔서 감사합니다.