Tcp모드에서 데이터 전송 관련 문의 입니다


#1

칩은 16bit 버스모드로 사용중입니다.

데이터 전송 시 Sn_TX_FIFOR에 데이터를 넣고,
Sn_TX_FIFOR에 넣은 만큼의 바이트를 Sn_TX_WRSR에 넣은 후 Sn_CR에 보내기 명령을 줍니다.

그런데 만약 TX_FIFOR에 데이터를 4개 넣었는데 TX_WRSR에는 5개라고 알려주고 보내기 명령을 주면
TX_FIFOR버퍼의 4+1번째에 들어있는 값까지 전송이 되는지 문의 드립니다.

추가 문의(2013.1.2 17:32)
16bit버스 모드이므로 TX_FIFOR에 무조건 2바이트씩 쓰긴하지만 보내고자 하는 데이터가 홀수 개일 때는 TX_WRSR에 홀수를 넣어도 상관 없는지 문의 드립니다.

추가 문의2(2013.1.3 9:38)
제가 데이터를 보낼때 send_ok를 체크하기는 하는데요 현재 방식을
w5300이 데이터를 보내는중이라고 했을때
send_ok유무에 관계 없이 현재 보내고싶은 데이터를 TX_FIFOR에 넣습니다.
그리고 send_ok를 대기하였다가 TX_WRSR 값 설정 및 보내기 명령을 보내는데요
TX_FIFOR에 데이터를 넣는것도 send_ok 후에 수행해야 되는건가요?
메뉴얼상으로는 상관없는것으로 보이기는 하는데요…


#2

16bit를 사용하신다니 W5300에 관한 질문인 듯합니다.
질문에 답을 드리면

  1. Memory Write 수와 상관없이 Sn_TX_WRSR 크기만큼 데이타가 전송됩니다.
    Memory에 뭐가 들어 있든 상관없이 해당 크기만큼 보내지만, Sn_TX_RD/Sn_TX_WR과 같은 Pointer Register는 향상 2바이트 단위로 증가함에 주의하세요.

  2. Sn_TX_WRSR은 반드시 보내는 DATA 크기로 설정하셔야 합니다. 홀수 9로 전송할 경우 반드시 9로 설정해야 합니다.

  3. 네 가능합니다. 보통 성능을 좀더 올리기 위해 그런 방식을 씁니다. (경험상 눈에 띄는 성능항상은 없습니다. ㅠㅠ)
    하지만, Send_OK는 필수 조건입니다. Send_Ok를 반드시 다음 Send command 이전에 반드시 체크되어야 합니다.


#3

전송 DATA를 메모리에 복사할 경우, Send_OK보다 Memory Free buffer Size(Sn_TX_FSR)에 더 주의하여야 됩니다.
Sn_TX_FSR보다 큰 값을 메모리에 write한 경우 설사 send_ok가 떴다 하더라도 잘못된 패킷이 전송될수 있습니다.
send_ok가 확인되었다 하더라도 해당 Packet이 상대방에게 전달되었다는 보장은 없습니다. TCP인 경우 재전송이 발생할 수 있기 때문에, Memory 복사시 Free buffer size 확인 무엇보다도 중요합니다.


#4

문의 내용에 대한 답변중 1, 2번 내용을 보면

1번에서는 메모리에 쓴내용이 없어도 Sn_TX_WRSR 어떤한 크기를 주고 전송명령을 내리면 메모리에 무엇이 들어있는지 는 모르지만 전송이 된다는 것으로 이해를 하고

그리고 2번에서 홀수개 9개의 데이터를 보내고 싶을때는 반드시 9개로 설정을 해야된다고 하였는데요 10로 할 경우 9+1번째의 메모리상에 있는 데이터 1개가 추가적으로 더 전송되기 때문에 인것으로 이해하면 되는 건가요?


#5

안녕하세요.

네. 이해하고 계신게 맞습니다.

감사합니다~~.