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 이다.
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