:::: MENU ::::
Browsing posts in: Wiznet

WIZFi210을 SPI로 제어하자

H/W 연결
WIZFi210은 SPI slave로 동작을 하고 MCU의 SPI는 master로 동작을 한다.
다음 그림과 같이 H/W 연결을 하는데, 테스트에 사용된 MCU는 W5200E01-M3에 있는 STM32F103C8을 사용하였다.
SPI signal외에 WIZFi210의 GPIO19핀(Host wake up signal: High Active)의 연결이 필요하며, WIZFi210의 H/W reset을 위해 전원을 control하기 위해 GPIO가 하나 더 필요하다.


이외에 GPIO29번은 <데이터/커맨드 모드간의 변경>에 사용되며 GPIO21번은 <공장초기화> <Limited AP 모드> 등의 개발 및 운용을 위한 다양한 용도를 위해 사용된다. 따라서, 예외적인 경우를 제외하고는 반드시 고려되는 것이 좋다. 또한 펌웨어를 업그레이드 하기 위해서는, 37번 핀을 pull up/pull down 하기 하여, Program/Run Mode를 전환하여 시리얼을 통해 펌웨어 파일을 전송할 수 있는 하드웨어적인 구성이 꼭 필요하다. 

SPI 스펙
WIZFi210에서 지원하는 SPI 스펙은 다음과 같다.
-. SPI Mode 0 지원 (CPOL = 0 and CPHASE = 0)
-. Only 8 bit SPI data word size is supported
-. SPI Clock Rate is 200 KHZ 



주의 할 점: 매 바이트 전송 마다 Chip Select 신호 SSPI_CS는 반드시 HIGH를 유지해야 한다.

SPI Data handling
SPI 데이터는 byte stuffing작업을 거치며, Control Escape code로 0xFB를 사용한다. 따라서 아래 표와 같은 패턴의 데이터를 받으면 이것을 0xFB로 시작하는 2 바이트로 인코딩을 한다. 2 바이트로 인코딩된 데이터를 원래의 패턴으로 변환을 하려면, 0xFB를 제거하고 0x20으로 XOR 연산을 하면 된다.


























 Pattern  Encoded as  Description
 0xFD  0xFB 0xDD  SPI_XON
 0xFA  0xFB 0xDA  SPI_XOFF
 0xFB  0xFB 0xDB  Control ESCAPE
 0xF5  0xFB 0xD5  SPI_IDLE
 0xF3  0xFB 0xD3  SPI link ready indication

WIZFi210은 idle 한 상태일 때 주기적으로 IDLE code인 0xF5를 전송하며, SPI slave와의 동기를 위해 초기 리셋 이후에는 Host에서도 IDLE Code인 0xF5를 전송해야 한다.


예제 코드


cfile6.uf.1902E4384ECCCA69172C3E.zip


예제 코드는 STM32F103의 SPI2를 사용하고, Chip Select로 PB12, PB10을 Host wakeup 신호로, H/W 리셋을 위해 PB11을 사용한다. Host wakeup 신호는 MCU의 인터럽트에 연결이 되어있으며 Wi-Fi 설정이 끝난 후에 enable이 되도록 되어 있다.

만약 H/W 리셋을 하지 않을 경우는 WIZFi210이 데이터 모드인지 커멘드 모드인지 판단을 하기 위해 AT 커맨드를 전송을 하고 일정 시간 이내에 커맨드에 대한 응답이 없으면 데이터모드로 판단을 하고, 커맨드 모드 진입을 위해 “+++”을 전송한다.
Host Wakeup 신호가 HIGH이면 WIZFi210에서 보낼 데이터가 있다는 의미이므로 SPI로 이 데이터를 읽어야 한다.

다음은 Static IP 192.168.88.123으로 설정을 하고, TCP server 192.168.88.228:5000에 접속을 하는 시나리오이다. 이때 AP의 SSID는 WIZ_RED이고 WPA 패스워드는 wiznet0123456 이다.


H/W reset or checking data mode or command mode
Send IDLE character for Synchronization
Check Host wakeup signal and read data
AT+WD
AT+WAUTO=0,WIZ_RED
AT+WAUTH=0
AT+WWPA= wiznet0123456
AT+NDHCP=0
AT+NSET=192.168.88.123,255.255.255.0,192.168.88.1
AT+NAUTO=1,1,,5000
AT+XDUM=1
ATA


STM8S-DISCOVERY 보드와 WIZ820io의 연결

ST마이크로의 8비트 MCU EVB인 STM8S-Discovery 보드에 Wiznet의 WIZ820io를 SPI로 연결하여 테스트를 해보았다.

STM8S-DISCOVERY 관련자료 : http://www.st.com/internet/evalboard/product/247087.jsp
STM8S-DISCOVERY보드의 메뉴얼;

cfile7.uf.185721394EB3C4731FDE54.pdfWIZ820io 관련 자료 : http://www.wiznet.co.kr/wiz820io

1. 하드웨어 연결
SPI 신호들은 CN1, CN2에 나와 있는 SPI 신호에 연결하고, nSS, nINT, nRESET, PWDN 신호들은 각각 STM8S의 GPIOs(PA4, PA5, PA3 and PA6)에 연결이 된다.

2. Firmware
컴파일러는 Cosmic사의 CXSTM8 compiler와 ST 홈페이지에서 다운로드 받을 수 있는 STVD를 사용한다. CXSTM8 compiler는 등록을 하면 일정기간 사용이 가능하다.

3. Test
STM8S의 Application Note인 RS232 communications with a terminal using the STM8S-DISCOVERY를 참고로 시리얼 터미널 기반의 application을 만들어 보았다. 기존의 메뉴에 다음과 같이 네트웍을 설정하고 확인하는 메뉴, TCP/UDP loopback, DNS, Twitter 기능을 테스트 할 수 있는 기능을 추가했다.

Application Note:

cfile7.uf.130B70444EB3C74F2E6C98.pdf


임베디드 보드에서 트위터하기

이 블로그 포스트는 Twitter API Proxy 서비스인 supertweet.net를 이용해서 PC나 스마트폰이 아닌 임베디드 보드에서 트위터 메시지를 보내는 방법을 설명한다.
참조 사이트:mbed의 post to Twitter via SuperTweet 

먼저 트위터 아이디가 필요한데, 테스트를 위해 twitter.com 에서 ID를 하나 만들었다. EspressoDopio2. 참고로 내 트위터 아이디는 EspressoDopio

Supertweet.net 에 접속해서 docoment link에 가면 3가지 step으로 설명을 해 놓고 있다.
1. Sign UP/ Sign in now를 클릭해서 MyAuthAPIProxy가 계정 사용을 승인하도록 한다.
2. Basic Auth를 위한 패스워드를 설정한다. 이 password는 패스워드와 다르게 설정함.
이 설정이 되면 다음과 같이 Username이 나타다고 Secret 밑에 Show 를 클릭하면 내가 정한 password가 나타난다.


3. 이젠 임베디드 보드에서 트위터 메시지를 보내면 되는데, Twitter.com 대신에  http://api.supertweet.net 로 보내면 된다.
구체적인 방법은 http://www.supertweet.net/about/api 링크를 확인하면 되는데, 간단히 메시지 post하는 것을 설명하면…

 아래 예제는 curl를 사용해서 메세지를 보내는데, user:password는 위 테이블의 Username 즉 트위터 아이디가 되겠고, password는 Supertweet에서 설정한 password이다. 트위터 메시지는 “playing with cURL and the SuperTweet.net API” 이게 되겠다.

curl -u user:password -d “status=playing with cURL and the SuperTweet.net API” http://api.supertweet.net/1/statuses/update.xml
참고) cURL은 http://curl.haxx.se/ 에서 다운로드 가능. 윈도우 버젼도 있다.

실제 트위터에 메시지가 올라간 경우.


Wireshark로 실제 날라가는 패킷을 잡아보면 다음과 같다.

빨간색이 보낸 패킷이고 파란색이 받은 패킷이다.
보낸 패킷에서 2번째 줄이 Authorization인데, Basic 뒷 부분은 “Username:password” 가 base64로 인코딩되어 있고, 보낸 패킷의 마지막 부분의 status= 뒷부분이 보낸 메시지 이다.

따라서 임베디드 보드에서 이것을 구현을 하려면,
-. DNS: api.supertweet.net에 접속을 위해
-. HTTP Client
-. Base64 encoding 함수등이 구현이 되야 겠다.

구체적인 구현 결과물은 다음 기회에……


W7100 TCP loopback

위즈네트W7100을 이용한 loopback소스입니다.

cfile10.uf.1564FB4D4D50CCD605E1B3.zip

W7100이 8051기반인데 많이 사용하는 Keil 컴파일러 대신에 SDCC 를 사용했습니다.
사용된 소스는 iMCU design contest에 출품한 Clayton Gumbrel([email protected])의 Remote Finger소스를 수정했습니다.

수정 내용은 소스를 간단하게 하기 위해 UART를 인터럽트를 사용하지 않는 루틴으로 바꾸고, application code는 제거를 하고 TCP loopback 코드를 포팅햇습니다.

아래 사진은 SDCC로 컴파일을 하고 나서 WizISP로 W7100EVB에 코드를 다운로드한 후 ping을 한 것을 캡쳐한 그림입니다.

Circuit Cellar의 project editor인 David Tweed가 쓴 iMCU W7100 article 첨부 합니다.
cfile30.uf.1775AE594D50C35C269DDB.pdf


Pages:12