---
title: "[W5300] 데이터 깨짐 현상"
url: "https://maker.wiznet.io/forum/13716"
markdown_url: "https://maker.wiznet.io/forum/13716/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "skarldyd123"
created: "2020-02-21T07:31:49+09:00"
last_activity: "2020-02-24T07:35:44+09:00"
language: "ko"
views: 1270
replies: 3
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# [W5300] 데이터 깨짐 현상

## Question

Asked by skarldyd123 on 2020-02-21 in Ethernet Chips.

안녕하세요 현재 Cortex-M 계열로 W5300을 사용하여 Ethernet 통신을 하고 있습니다
다름이 아니라 MCU에서 데이터를 전송 시 수신 받는 쪽에서 데이터가 깨지는 현상이 발생하고 있습니다
아래의 코드에서 delay를 10us 미만으로 설정을 할 경우 데이터 전송 시 무조건 깨지는 현상이 발생하고
10us 일 때는 간간히 깨지는 현상이 있습니다. 10MB 속도로 통신을 해야 되는데…데이터가 깨져서 사용 할 수 없게 되고 있습니다
주석 처리 한 방법을 사용해도 똑같고, 주석을 처리하지 않은 방법을 사용해도 똑같이 깨집니다…

void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint32_t len)
{
uint32_t i = 0;
if(len == 0) return;
for(i = 0; i &lt; len; i+= 2)
{
WIZCHIP_WRITE(Sn_TX_FIFOR(sn), ((((uint16_t)wizdata[i]) &lt;&lt; 8) + wizdata[i+1]));
//WIZCHIP_WRITE(sn, (((uint16_t)wizdata[i]) &lt;&lt; 8) | (((uint16_t)wizdata[i+1]) & 0x00FF))
//delay_us(10);
}
}

그리고 데이터 수신 시에는 처음 몇자리가 깨지는 현상이 있습니다
2byte 정도?? 깨지는데…

void wiz_recv_data(uint8_t op, uint8_t sn, uint8_t *wizdata, uint32_t len)
{
uint32_t rd = 0;
uint32_t i = 0;
uint8_t tmp = 0;
if(len == 0 )
return;
for(i = 0; i &lt; len; i += 2)
{

```
	*((uint16_t *)(wizdata + i)) = getSn_RX_FIFOR(op, sn);
	tmp = wizdata[i];
	wizdata[i] = wizdata[i + 1];
	wizdata[i + 1] = tmp;
	//delay_us(1);
}
```

}

어떻게 해결을 해야 할지…
자문 부탁드리겠습니다

## Replies

### Reply 1 by becky, 2020-02-23

안녕하세요

![](https://avatars.discourse-cdn.com/v4/letter/s/898d66/48.png) skarldyd123:

> //WIZCHIP_WRITE(sn, (((uint16_t)wizdata[i]) &lt;&lt; 8) | (((uint16_t)wizdata[i+1]) & 0x00FF))

우선 이부분이
WIZCHIP_WRITE(Sn_TX_FIFOR(sn), (((uint16_t)wizdata[i]) &lt;&lt; 8) | (((uint16_t)wizdata[i+1]) & 0x00FF))
인데 실수하신거 같은데 수정하시기 바랍니다.

recv data부분도 ioLibrary에 따라 수정하시기 바랍니다.

```
void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint32_t len)
{
   uint16_t rd = 0;
   uint32_t i = 0;
   
   if(len == 0) return;
      
   for(i = 0; i < len; i++)
   {
      if((i & 0x01)==0)
      {
         rd = getSn_RX_FIFOR(sn);
         wizdata[i]   = (uint8_t)(rd >> 8);
      }
      else  wizdata[i] = (uint8_t)rd;  // For checking the memory access violation
   }
   //sock_remained_byte[sn] = (uint8_t)rd; // back up the remaind fifo byte.
}
```

추가로 데이터 깨짐은 하드웨어 문제일 수도 있습니다. 하드웨어는 어떻게 사용중이신가요?

### Reply 2 by skarldyd123, 2020-02-24 (in reply to reply 1)

STM32F7 시리즈로 FMC(SRAM Controller) 통신 10bit address, 16bit data bus로 bank1 select 2와 bank1 select 3 두 개를 사용하고 , W5300은 wiz830mj 제품 2개로 하나는 server, 하나는 client로 사용하고 있습니다

### Reply 3 by skarldyd123, 2020-02-24

홀수 데이터가 수신이 되어서 Align Mode를 하지 않은 상태입니다. 그리고 전송 데이터를 보내더라도 완전 깨져서 전송이 됩니다
Align Mode를 하지 않으면 전송에 문제가 되는지 궁금합니다

---

Source: https://maker.wiznet.io/forum/13716
