:::: MENU ::::
Posts tagged with: W5500

Arduino Ethernet 라이브러리 업데이트

WZnet 칩 W5100, W5200과 W5500을 지원하는 통합 아두이노 라이브러리인 Arduino Ethernet 라이브러리를 업데이트 했다. 기존 코드에서 달라진 점은 다음과 같다.

  • Arduino IDE 1.5.x 지원 : Arduino Due를 지원하기 위함.
  • Due용  SPI 드라이버 추가
  • W5200및 W5500의 경우 SPI드라이버 속도를 높였다. 무려 42Mhz까지 지원
  • w5100::read_data함수의 파라미터의 형 변경
  • flush() 함수 추가

Arduino IDE 1.5.xx를 지원하기 위해서는

  • 32비트 SAM용 SPI 드라이버가 추가 되야한다.
  • IDE 1.5.x의 폴더 구조가 바뀌어서 헤더파일 include가 변경된다.아래 그림 참고…  예를 들면 #include “w5100.h”가 #include “utility/ w5100.h” 이런 식으로…

Arduino_Folder

  • AVR코드와의 구별은 #if defined (ARDUINO_ARCH_AVR)로 한다.

W5500 SPI

W5500_SPI

데이터 시트에는 이론상 80Mhz까지 가능하다고 나오지만 실제로는 33Mhz 정도가 최대 SPI clock으로 명기해 놓고 있다. 그리고 Atmel SAM에서  SPI clock은 다음과 같이 결정된다. 즉 메인 클럭을 분주해서 사용을 하는데, 아두이노에서는 84Mhz를 메인으로 사용하므로 14Mhz, 28Mhz, 42Mhz, 84Mhz가 설정이 가능하다.

SAM_SPI

 

아두이노 코드에서는 다음과 같이 클럭을 분주해서 42Mhz가 가능하다. 1로 분주하면 84Mhz 인데, 칩에서는 80Mhz까지만 지원하므로 84Mhz는 지원이 안된다. 42에서 84는 갭이 크다…

참고로 아두이노에서 W5100의 SPI는 4Mhz로 설정이 되어 있으니, 거의 10배 이상이 빨라짐~~


W5500 드라이버 포팅: Parallax Propeller칩

Parrallax는 미국의 펩리스 반도체 회사이다. 이 회사의 칩은 Propeller인데 이 칩은 특이하게도 내부에 8개의 프로세어 코아가 있어서 병렬처리가 가능하다. 이 8개의 코아를 COG라고 부르는데, 아래 블럭다이아그램 처럼 내부에 각각 프로세서, RAM, 레지스터, 카운터 등이 있고 이 COG가 외부에 나와 있는 I/O를 공유한다. 그리고 각각의 COG를 제어하는 HUB가 있어서 각각의 COG각 언제 I/O를 access할지를 결정한다.

parallax_propeller

Propeller칩을 프로그래밍하게 위해서는 어셈블러, SPIN이라는 언어로 프로그래밍이 가능하며, 최근에는 C 컴파일러가 지원이어서 C로도 프로그래밍이 가능하지만 코드사이즈나 성능이슈로 대부분의 코드는 어셈블러나 SPIN으로 만들어져 있다.

데이터 시트 및 메뉴얼은 다음 링크에서 다운로드…

[wpdm_file id=7]  [wpdm_file id=8]

W5500칩의 드라이버를 포팅하기 위해 사용한 보드는 Propeller Activity Board인데, 이 보드에 있는 브레드보드에 WIZ550io를 꼽고 와이어링을 통해 Propeller칩과 연결을 했다. 연결되는 방식은 SPI 신호, 리셋 신호 및 전원 신호만 결하면 되므로 간단하다.

Propeller_WIZ550io

포팅한 코드는 Mike G라는 사람이 W5200으로 만든 코드를 포팅을 했는데, 이 코드는 SPI 인터페이스가 어셈블러로 되어있어서 이것을 일단 SPIN 랭귀지로 수정했다. W5500에서는 SPI 포맷 및 메모리 맵이 바뀌어서 W5500을 read, write하는 함수들 역시 수정을 했다.  수정된 코드가 제대로 동작하는지 확인을 하기위해 TCPMultiSocketServer 프로그램(간단한 웹서버 프로그램) 코드와 같이 컴파일을 해서 돌리니 잘 동작한다.

관련된 모든 코드는 github에 오픈: https://github.com/jbkim/Parallax_W5500