감사합니다.
제가 DSP28335 의 SPI 클럭을 10MHZ 이상으로 해서 W5100과 IP 주소를 쓰고 다시 읽으니 쓰레기 값이 들어오더라구요.
SPI 클럭을 10MHZ 이상 올리지를 못하겠네요.
10MHz 클럭으로 전송 시 이더넷 통신속도가 1.5Mbps가 나오던데요.
전송속도를 올리는 스킬이 있는지요?
저는 wiznet git에 있는 W5100_ATMega_WEBSERV-master 소스를 수정하여 사용하고 있습니다.
send 함수를 수정하여 다음과 같이 수정하였습니다.
DSP 28335의 메모리 특성상 16bit 메모리로 고정이 되어 기존의 send()함수를 사용하지 못하고 수정하였습니다.
Uint8 Send16(Uint8 sock, const Uint16 *buf, Uint16 buflen)
{
Uint16 ptr;
Uint16 offaddr;
Uint16 realaddr;
Uint16 txsize;
Uint16 timeout;
Uint16 sockaddr;
// Uint16 DMASendFlagState;
if (buflen == 0 || sock >= W5100_NUM_SOCKETS) return W5100_FAIL; // ignore illegal requests
sockaddr = W5100_SKT_BASE(sock); // calc base addr for this socket
// Make sure the TX Free Size Register is available
txsize = W51_read(sockaddr+W5100_TX_FSR_OFFSET); // make sure the TX free-size reg is available
txsize = (((txsize & 0x00FF) << 8 ) + W51_read(sockaddr+W5100_TX_FSR_OFFSET + 1));
timeout = 0;
while (txsize < buflen)
{
// DELAY_US(10);
txsize = W51_read(sockaddr+W5100_TX_FSR_OFFSET); // make sure the TX free-size reg is available
txsize = (((txsize & 0x00FF) << 8 ) + W51_read(sockaddr+W5100_TX_FSR_OFFSET + 1));
if (timeout++ > 1000) // if max delay has passed…
{
DisconnectSocket(sock); // can’t connect, close it down
return W5100_FAIL; // show failure
}
}
// Read the Tx Write Pointer
ptr = W51_read(sockaddr+W5100_TX_WR_OFFSET);
offaddr = (((ptr & 0x00FF) << 8 ) + W51_read(sockaddr+W5100_TX_WR_OFFSET + 1));
while (buflen)
{
buflen–;
realaddr = W5100_TXBUFADDR + (offaddr & W5100_TX_BUF_MASK); // calc W5100 physical buffer addr for this socket
static Uint8 tmp;
tmp = *buf & 0x00ff;
W51_write(realaddr, tmp); // send a upper byte of application data to TX buffer
offaddr++; // next TX buffer addr
tmp = (*buf) >> 8;
W51_write(realaddr+1, tmp); // send a lower byte of application data to TX buffer
offaddr++; // next TX buffer addr
buf++; // next input buffer addr
if(DMASendFlag)
{
// return DMA_OVERFLOW;
}
}
W51_write(sockaddr+W5100_TX_WR_OFFSET, (offaddr & 0xFF00) >> 8); // send MSB of new write-pointer addr
W51_write(sockaddr+W5100_TX_WR_OFFSET + 1, (offaddr & 0x00FF)); // send LSB
W51_write(sockaddr+W5100_CR_OFFSET, W5100_SKT_CR_SEND); // start the send on its way
while (W51_read(sockaddr+W5100_CR_OFFSET)) ; // loop until socket starts the send (blocks!!)
return W5100_OK;
}
위와 같이 수정하여 전송하면 전송속도가 1.5Mbps가 최고이더라구요. ㅠ ㅠ
전송 속도를 올릴 수 있는 방법이 있는지요?