:::: MENU ::::
Posts tagged with: WIZFi210

WizFi210과 IoT서비스 연동

Cosm은 IoT 서비스로 예전에 Pachube라는 이름으로 서비스를 하다가 LogMeIn에 인수가 되면서 Cosm으로 이름이 바뀌었다.먼저 Cosm의 서비스를 사용하기 위해서는 회원 가입을 하고, Device/Feed를 추가해야한다.

Cosm 설정
1. 회원 가입
회원 가입을 하면 API키를 발급을 하는데, 이 정보는 기억을 해둬야하고, 나중에 Keys에서 다시 확인을 할 수 있다.

cosm_00

2. Device/Feed 추가
Something Else를 선택한다.
cosm_01
Step1에서 디폴트로 선택이 되어 있는 “No, I will push data to Cosm”를 선택을 한다.

cosm_02

나머지 Title, Tag등의 정보를 입력을 하면 Feed 설정이 끝나고 다음과 같이 피드ID가 생성이 된다. API키와 Feed ID는 이 서비스를 사용하기 위해 꼭 필요한 정보이다.

cosm_03

WizFi210 설정

1. Association
AT command mode에서 다음과 같은 순서로 입력을 해서 AP에 연결을 한다.이것은 AP의 보안 설정에 따라 다르며, 하기 내용은 infrastructure 모드에 암호가 없고, DHCP로 IP를 받는 경우이다.
AT+WD
AT+WAUTH=0
AT+NDHCP=1
AT+WA=”SSID of your AP”
AP에 정상적으로 연결이 되면 다음과 같이 모듈의 IP정보가 출력된다.
WizFi210_IP

2. DNS lookup & connection

api.cosm.com에 접속을 해야하므로, 이 URL의 실제 IP를 얻기위해서 DNSLOOKUP명령을 사용한다.
WizFi210_Cosm
  1) 위 그림을 보면 IP를 216.52.233.121을 얻었고,
  2) TCP client로 이 IP로 연결을 한다. 웹이기 때문에 포트는 80
  3) AT+CID=? 명령어는 connection ID를 얻기위한 정보이고, HTTP로 데이터를 보낼때 사용한다.
3. HTTP packet 보내기
HTTP raw 데이터를 보내기 위한 명령어 및 절차는 다음과 같다.
1) [ESC][S][CID] <= 즉 Hex로 표현을 하면 0x1B 0x53 0x30 3바이트를 입력한다.
 
2) HTTP raw 데이터 전송
WizFI210_HTTP_data
위 그림에서 1)은 Feed ID, 2) API key, 3) HTTP data size, 4) Feed 및 데이터 “200”
 
3) [ESC][E] <= 즉 Hex로 표현을 하면 0x1B 0x45 2바이트를 입력한다. 
실제 데이터는 위 [ESC][E]명령을 보낼때 전송이 되며, Cosm 서버로 부터의 응답은 다음과 같다.

Cosm_reply

Cosm서버에서 확인한 내용
cosm_data
200이라는 값이 업로드 됨을 알 수 있다.

WizFi210의 F/W를 SPI버젼으로 바꾸기

  • H/W 설정

WizFi210의 F/W를 업데이트하기 위해서는 모듈을 RUN mode에서 PROGRAM mode로 설정을하고, UART를 이용해서 업데이트를 해야한다. 아래 회로도를 보면 모듈의 37번핀을 Low로 하면 RUN mode이고, High로 하면 PROGRAM mode이다. 이 핀을 High로하고, UART핀 TX(40번), RX(42번)핀을 RS232 트랜시버를 거쳐서 PC의 시리얼 포트에 연결을 한다.

wizfi210_program

  • PC프로그램 설정

WIZSamrtScript 프로그램을 다운로드 받는다. 링크

SPI 용 F/W를 다운로르 받는다. 링크

WIZSamrtScript 프로그램의 압축을 풀면 다음과 같이 3개의 폴더가 생기는데, AppFWFiile 폴더에 SPI용 F/W를 copy하고, 각각 s2w-app1.bin, s2w-app2.bin, WFW.bin로 이름을 바꾼다.

wizsmartscrypt2

WIZSmartScript를 실행하고, 보드와 연결된 PC의 COM 포트를 Manual로 정확하게 입력한다. Group 항목을 U. JIG(User) 로 선택한다. Script는 2. Flash Write(WLAN, APP, Clear) 를 선택한다.

  • F/W 업데이트

Start Script를 클릭하면 다음 그림처럼 자동으로 flash를  erase 하고 다시  write 한다.

wizsmartscrypt

업데이트가 끝나면, 전원을 끄고 보드를 Program mode 에서 Run  mode로 설정을 변경한다.

모듈의 37번 핀을 Low 상태로 하여, 모듈run mode로 설정을 한다. 

  • MAC 어드레스 입력

이와 같이 F/W를 업데이트를 하면 MAC가 초기화된다.  따라서 AT command를 사용해서 다시 입력을 해야한다.

아두이노를 이용해서 MAC 어드레스를 입력하기

필요한 라이브러리: WizFi 쉴드의 라이브러리.

 

이 파일들은 아두이노가 설치된 폴더의 libraries 폴더 아래에 압축을 풀어서 copy한다.

MAC 어드레스 입력을 위한 아두이노용 스케치를 아두이노에 다운로드를 하고, 실행을 한후 시리얼 터미널을 실행시키면 코드는 MAC 어드레스를 받을 준비를 하는데, 이때 ‘S’를 입력한다. ”R’이 리턴이 되며, 다음 그림과 같이 MAC 어드레스를 입력을 한다.

cfile7.uf.176DA83550CEC0DD0B16D4.zip

스크린샷_2012-12-17_오후_3.45.27


TI의 SimpleLink Wi-Fi CC3000

TI가 기존의 오픈 소스 무선랜 솔루션이 외에 새로이 SimpleLink 라는 Wi-Fi 솔루션을 릴리즈 했다. EETimes 기사
이 기사에 따르면 잔디깍기, 그릇 세척기, 알람시스템, 홈시큐리티, 혈압 모니터 등의 가전, 홈네트워크 및 헬스케어 디바이스에 쉽게 Wi-Fi를 추가할 수 있다고 한다. 심지어 우산에 장착해서 기상시스템에 연결해서 비가 올것으로 예상이 되면 LED를 켜는 내용의 소개도 있다.

마케팅 매니저인 Kurtz에 의하면

“We realized that it was unreasonable to expect them to start running Linux and change to a high performance applications processor, so knowing the potential of the Internet of Things market, we rolled up our sleeves and rearchitected our existing Wi-Fi solution to make it suitable for any product – regardless of the architecture,” he said, adding that SimpleLink offered customers a “blueprint to connect even the simplest devices to the Internet.”

기존의 임베디스 Wi-Fi 솔루션을 가지고 있던 업체들과 동일한 얘기이다. 즉 Gainspan이나 Redpine Signals의 솔루션과 바로 경쟁이 될듯하다.
아래 동영상을 보면 상당히 쉬운 솔루션으로 소개를 하고 있으며, IoT(Internet of Things)의 시대가 바로 얼마남지 않은듯 하다.

Features



  • Wi-Fi 802.11 b/g

  • Best-in-class Link Budget

  • TX Power: +20dBm

  • RX Sensitivity: -89dBm

  • Embedded software including all drivers, stack, and supplicant

  • Low code size (Flash and RAM) required for MCU

  • Certified and production-ready modules

  • Complete platform solution including API guide, sample applications, Support Community (Wiki and Forum), User and porting guides

Benefits



  • Universal IP connectivity enabled anywhere

  • Enables low memory, low cost, low power MCU systems

  • Longer range advantage vs. competition

  • Proven Wi-Fi RF and interoperability

  • Implement Wi-Fi quickly without previous Wi-Fi or RF experience

  • Reduce development timeline and cost with CC3000 implementation and support infrastructure

  • Simple certification process, reusing module RF certification

  • Smaller board space for compact layouts


위 블럭다이아그램에 보듯이 Host MCU와는 SPI로 통신을 한다. SPI clock은 최대 26Mhz까지..
CC3000을 self-contained wireless processor라고 표현을 하는데, 이 말은 Wi-Fi를 위해 대부분의 처리는 CC3000에서 하므로 Host 시스템에서는 별로 할 것이 없다는 얘기이다.
정말 그런가? 이건 뒤에서 더 살펴보기로 하고…

제공되는 개발 플랫폼은
MSP430 기반의 보드 4종
CC3000 + MSP430 FRAM, CC3000 + MSP-EXP430F5529, CC3000 + MSP-EXP430F5438, CC3000 + MSP-EXP430FG4618
Cortex-M3기반 1종 CC3000 + Stellaris Cortex-M3,
Cortex-M4기반 1종 CC3000 + Stellaris Cortex-M4 이 있다.
모듈도 제공을 하는데 현재 LS Research사의 TiWi-SL이 있고 Murata에서 TypeVK를 출시 예정이다.

얼마나 쉽길래 SimpleLink 일까?
하드웨어적으로는 위 블럭 다이아그램처럼 간단히 SPI, IRQ, 전원정도만 연결을 하면 된다. 하지만 CC3000을 제어하기 위해서는 Host MCU에 SPI 드라이버를 포팅해야 한다. 이것도 이미 MCU에 대해 일반적인 지식이 있으면 어렵지 않다.

Host Driver Porting Guide
관련 자료 : http://processors.wiki.ti.com/index.php/CC3000_Host_Driver_Porting_Guide
MSP430을 쓰면 별도의 포팅 가이드 없이 제공해 주는 것을 쓰면 되겠지만 그렇지 않은 경우에는 위 가이드를 참고해서 같은 수준의 SPI 드라이버를 포팅한다.

Host Programming Guide



위 두 그림을 보면 TI에서 제공하는 s/w가 어떤 식으로 구성이 되는 지 알 수 있다. 위 두 그림은 같은 내용의 그림인데, 윗쪽의 그림을 보면 각 API가 command로 동작을 하고 event 기반임을 알 수 있다. 결국 SPI인터페이스 위에 HCI(Host Controlled Interface 의 약자)레이어가 있고, 4개의 API로 모듈화를 시켜놓았다.
각각의 모듈의 기능은 다음과 같다.



  • WLAN APIs, which interact with the underlying entity that is responsible for 802.11 protocol implementation

  • Network stacks APIs, which interact with the embedded network stack. These APIs comply with the well-known Berkeley socket APIs and are easy to use.

  • Embedded network application APIs, which interact with the embedded networking application delivered as a complementary part of the on-chip content. These include basic networking applications that the user can leverage (for example, ping utility and DNS).

  • Nonvolatile memory (NVMEM) APIs, which configure the external CC3000 device EEPROM, where most of the configuration is store.


코드를 보니 사실 NVMEM API는 configuration을 위한 독립적인 API이고, 나머지는 WLAN, SOCKET, NETAPP API는 서로 관련이 있는 API들인데, NETAPP API는 arp, ping, DHCP 및 IP 설정등을 담당하고, SOCKET API는 기본적인 TCP 함수들 send, recv, bind 등의 함수를 제공한다. WLAN API의 경우는 wlan 연결 설정 및 connect, close 등의 함수를 제공한다.
따라서 결론적으로 위의 코드들이 host MCU에 다 올라가야 한다는 얘기이다. -_-;;

임베디드시스템에 Wi-Fi를 추가하기 위해 어려운 점은 다음과 같다.
-. Linux와 같은 OS를 포팅해야 한다. 기존 시스템을 OS 기반의 시스템으로 전분 바꿔야 할지도…
-. RF에 대한 지식 부족. 전문가가 아니면 쉽게 손대기 힘들다. 따라서 모듈을 쓰는 경우가 많다.
-. 인증에 대한 비용 및 시간.
-. Wi-Fi 솔루션의 비용. 배보다 배꼽이 더 커질 수 있다.

SimpleLink가 많은 부분을 커버하고 있긴 하지만, AT command 기반의 seiral to Wi-Fi 모듈보다는 Host쪽에 코드를 포팅하는 작업은 그리 만만치 않아보인다.

보다 자세한 자료는 TI의 Wiki 페이지에서…http://processors.wiki.ti.com/index.php/CC3000_Wi-Fi_for_MCU


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