[Re-curation]TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test
TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test
TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test
W5300은 하드웨어적으로 TCP/IP를 구현한 Ethernet Controller이지만 Ethernet 데이터 부분을 사용자 임의 데이터를 보낼수 있는 MACRAW 모드로 구동할 수 있다. MACRAW 모드를 이용하면 임의이 데이터를 보낼수 있는데.. EtherCat 페킷을 보내면 EhterCat 통신을 할 수 있다. 특히 TMS320F28335와 같이 실시간 처리가 가능한 DSP를 이용하면 EtheCat구현이 쉬어진다.
아래 표는 EtherCat Frame 데이터 구조이다.
간단히 구조를 살펴 보면 목적지, 출발지 MAC주소와 EtherType에 0x88A4를 사용하고 EtherCat Data를 전송하면 된다.
EhterCat Data 필더에는 2Byte의 총 데이터 길이와 Cmd, Idx, Address... 등등의 Data Headerd와 데이터로 채워진다.
데이터는 2+26 번째 버퍼 부터 시작된다.
W5300 MACRAW 모드 초기화
Sn_MR_MACRAW 모드로 소켓을 생성하면 된다. 여기서 주의 사항은 MACRAW모드는 반드시 소켓 0번만 가능하다.
void Init_EtheCat(void)
{
socket(0, Sn_MR_MACRAW, 3000, Sn_MR_MF);
}
EtherCat 데이터 전송함수
데이터 송신시 첫 2Byte의 EtherHeader 와 마지막 2Byte CRC는 W5300에서 자동 생성된다. 다만 수신은 모든 페킷이 수신되므로 이부분을 적절히 처리해 주어야 한다.
uint32 EtherCatSend(SOCKET s, uint8 * buf, uint32 len)
{
uint8 status=0;
uint8 isr=0;
uint32 ret=0;
// check size not to exceed MAX size.
if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s);
else ret = len;
// copy data
wiz_write_buf(s, buf, ret);
// send
setSn_TX_WRSR(s,ret);
setSn_CR(s, Sn_CR_SEND);
// wait SEND command completion
while (!((isr = getSn_IR(s)) & Sn_IR_SENDOK))
{
status = getSn_SSR(s);
if ((status == SOCK_CLOSED) || (isr & Sn_IR_TIMEOUT))
{
setSn_IR(s,Sn_IR_TIMEOUT);
return 0;
}
}
// Clear Sn_IR_SENDOK
setSn_IR(s, Sn_IR_SENDOK);
return ret;
}
TMS320F28335, W5300을 이용한 EtherCat 테스트
테스트는 두세트의 이더넷 모듈을 이용해서 스위치를 누르면 EtherCat 페킷으로 데이터를 전송하고 수신된 데이터를 분석해서 LED를 On/Off 하도록 했다.
수신된 데이터는 WireShack를 이용하여 패킷을 캡쳐할 수 있고 EtherCat 데이터를 확인할수 있다.
26번 버퍼부터 데이터 필더 이다. 테스트에서는 스위치를 누를때 마다 1씩 증가해서 전송하도록 해서 테스트 했다.
그리고 시리얼포트를 이용하여 수신된 페킷을 확인할 수 있다.
TMS320F28335와 W5300 MACRAW모드를 이용한 EtherCat 테스트 동영상