3/29/2022

ESP32 WIFI 관련자료 정리

1. WIFI의 관련정보의 정리 

최근에 WIFI MCU를 하게되어 이전에 정리했던 WIFI 자료와 다 같이 정리하기로 했다. 
그리고, 자꾸 WIFI 관련문제사항들이 발생하여, WIFI 원인분석이 필요한 부분들은 간단히 정리한다. 

WIFI 사용되어지는 용어정리 
WIFI에서 사용되어지는 기본적인 용어와 관련내용을 간단히 정리


1.1 WIFI Layer 2 와 WIFI Driver 정보 

WIFI Driver를 분석하고 내용알려면, 대충은 Layer2는 어떻게 동작하는지는 알아야한다. 
그리고, WIFI Driver 역시 각 Chip Vendor마다 지원되는 기능도 다르다. 
이전에는 Full Mac/Soft Mac 으로 WIFI Chip 어디까지 Control하느냐에 따라 이를 구분하고, 또, 지원되는 모드도 다 달라서 사용하기가 좀 그랬다.  
사실 요즘 WIFi Driver를 거의 잘 보지를 못해서 현재는 잘모르겠으며, 오래전에 정리한 것을 링크만 연결한다. 

WIFI Layer2 와 Ethernet Encapsulation
WIFI의 핵심인 Layer2 Packet 종류와 관련내용들 정리
이부분을 더 알고 싶다면, 돈을 내시고 IEEE 802.11 협회에 가입하셔서, Spec을 보시길 권장하며, 나도 옛날꺼 밖에 없으며, 이것도 지인을 통해 얻은 것이다. 

Linux WIFI Driver 관련정리 
옛날에 대충정리해서 지금보니 엉망이라 다시 정리를 해야 할 것 같다. 

Linux WIFI Tool 이용 
별로 쓸모가 없을거 같으나, 일단 Linux의 Tool 사용을 위해서 참고만 하자


1.2 WIFI 2.4G Channel 관련자료 

가장 많이 사용하는 WIFI의 2.4G 대역의 Channel을 간단히 알아보고 혼선 및 특징을 알아보자. 
더불어 요즘 WIFI 2.4G이외에 다른 ISM Band도 추가해서 사용하는데, 관련부분도 좀 알아보자. 

WIFI Wiki
역시 Wiki가 설명이 잘되어있으며, 정말 감사하다 

  • WIFI 2.4GHz (802.11b/g/n/ax 나라별 사용하는 Channel) 
각 Channel의 간격은 5MHz 이지만, Ch14만 12MHz
WIFI Bandwith는 보통 20MHz/40MHz로 각 AP에서 HP를 통해 설정가능 
ChannelF0 (MHz)Frequency
range
(MHz)
North
America
[3]

Japan
[3]

India
[4]
Most of
world
[3][5][6][7]
[8][9][10][11]
124122401–2423YesYesYesYes
224172406–2428YesYesYesYes
324222411–2433YesYesYesYes
424272416–2438YesYesYesYes
524322421–2443YesYesYesYes
624372426–2448YesYesYesYes
724422431–2453YesYesYesYes
824472436–2458YesYesYesYes
924522441–2463YesYesYesYes
1024572446–2468YesYesYesYes
1124622451–2473YesYesYesYes
1224672456–2478NoBYesYesYes
1324722461–2483NoBYesYesYes
1424842473–2495No11b onlyCNoNo


WIKI설명을 보면 
간섭의 보장 받기 위해서 2MHz는 Guard band로 사용한다고 하며, 보통 16.25 ~ 22MHz 사이로 사용한다고 한다. 
하지만, WIFI 와 LTE는 OFDMA방식이므로, 아래와 같이 Channel 간의 중복을 허용한다. (궁금하시면, OFDM 보시길)
  1. Ch6 Center Frequency:  2437 -  (22/2) = 2426 으로 Ch4의 1Mhz가 부족 
  2. Ch6 Center Frequency:  2437 + (22/2) = 2448 으로 Ch8의 1Mhz가 부족  
  https://en.wikipedia.org/wiki/List_of_WLAN_channels

Overlap되지 않는 Bandwith는 아래와 같다하며, 
좌측 20MHz 기반으로 중간을 보면 1/5/9/13으로 사용

https://en.wikipedia.org/wiki/List_of_WLAN_channels

WIFI 2.4G Channel 간섭문제 


ISM Band 
ISM Band는 주로 Industrial/Scientifc/Medical 목적으로 무료로 사용가능한 주파수 대역을 말한다
나의 경우, ISM Band는 LoRa나 TI의 Simplicity를 통해 알게되었는데, 400/900MHz 대역만 있는줄 알았는데, 아래를 보니, 아니였다. 
최근 IoT RF에 해당하는 프로토콜의 관련주파수 대역이기도 하다. 

ISM Band 와 LoRA 
좀 이상한게, LoRA Gateway 경우는 800MHz 대역을 분명 사용한 걸로 기억을하는데, 이 부분은 나중에 Semtech Datasheet를 다 확인해 봐야겠다. 
내 기억으로는 LoRA Gateway의 경우 1개의 SX1301로 2개의 SX1257(Transciever) Control 한다. 
이유는 동시에 여러 Channel Bandwith(200MHz)를 확보하기 위해서 두개 사용한 걸로 기억한다. 
만약, LoRA device로만 사용한다면, Transciver 한개면 충분하다. 


2. ESP32 의 WIFI 자료분석  

ESP32에서 제공하는 WIFI의 기능들을 간단히 알아보도록 하자. 

  • ESP32 WIFI Guide 
ESP32 WIFI Feature들을 간단히 정리해서 알아보자. 
  • Support station-only mode, AP-only mode, station/AP-coexistence mode : 각 3개모드 제공 (STA/AP/AP+STA)
  • Support IEEE 802.11b, IEEE 802.11g, IEEE 802.11n and APIs to configure the protocol mode (802.11bgn 지원 및 Configuration 가능)
  • Support WPA/WPA2/WPA3/WPA2-Enterprise and WPS : 암호화 부분 거의 제공 
  • Support AMPDU, HT40, QoS and other key features: WIFI Layer 2관련내용으로, Bandwith, QoS 관련내용 
  • Support Modem-sleep: Power Management 기능 
  • Support the Espressif-specific ESP-NOW protocol and Long Range mode, which supports up to 1 km of data traffic: ESP사 전용 Protocol로 Lora 같이 ISM Band 사용할거 같음(LR)
  • Up to 20 MBit/s TCP throughput and 30 MBit/s UDP throughput over the air
  • Support Sniffer: Smart Config 때문에 필요(WIFI STA/AP+STA) 
  • Support both fast scan and all-channel scan:  fast scan은 좀더 알아봐야 할거 같음 
  • Support multiple antennas: MIMO???
  • Support channel state information: 이 부분은 좀더 확인 


2.1 ESP32 의 WIFI 관련정보 

  • ESP32 WIFI 성능개선법 
ESP32의 경우 기본적으로 LWIP 와 WIFI를 연결하여 사용되어지며, 각 Buffer도 세부조절이 가능하다. 
한마디로 적절하게 설정해서 성능을 향상하라는 것이며, 아래의 각 설정에 대해서 세부적으로 알아보도록하자. 
각 설정에 따른 성능표를 제공하고 있으므로, 이를 참조하자.  

  • ESP32 WIFI PSRAM기반의 Buffer 설정 
WIFI Buffer를 PSRAM을 사용한다고 하는데, 각 설정하는 법과 성능확인 
WIFI Buffer를 Static or Dynamic 설정인데, 동적할당도 문제가 생기면 동일하게 한계는 있는 것 같다. 
WIFI Buffer 와 LWIP Buffer 는 밀접한 관계이므로 각 설정을 알아두도록하자 

  • WIFI STA 의 Beacon Timeout 
ESP32의 WIF STA일 경우 WIFAP가 살아있는지 확인을 위해서 60개 becaons을 받아 AP의 존재여부를 확인하는데, 
이때,  Layer 2의 Beacon이 Timeout이 발생한다면, Layer 2의 Probe Reqeust를 보내 확인 AP의 연결상태를 확인한다는 내용이다. 
결론적으로  WIFI STA 주기적으로 Beacon을 받고 Timeout 되며 Probe Reqeust로 재확인하고 실패하면, WIFI STA는 DISCONNECTED로 됨 

  • ESP32 Low-Level TX API 
ESP32에서 제공해주는 Layer2의 Management Packet 사용가능한 API
beacon/probe (request/response)/action/Qos 지원

  • ESP32의 WIFI STA의 Scan방식 
WIFI STA일 경우, Active/Passive Scan 다 지원하며 default가 active scan 방식이라며, 각 다양한 Scan방식을 확인 가능
  1. All-Channel Background Active Scan
  2. All-Channel Background Passive Scan
  3. All-Channel Foreground Active Scan
  4. All-Channel Foreground Passive Scan
  5. Specific-Channel Background Active Scan
  6. Specific-Channel Background Passive Scan
  7. Specific-Channel Foreground Active Scan
  8. Specific-Channel Foreground Passive Scan 

  • ESP32 WIFI Channel State Information
Channel 상태 정보라고 하는데, Sub carrier를 같이사용하여 이용하는 것 같다.  

  • ESP32 의 WIFI AP 설정 
AP를 설정할 경우, Channel은 Country Code에 의해 변경되어지며, 이는 미국/유럽 및 나라마다 사용하는 채널이 조금씩 다름 

  • WIFI HT20/40
WIFI의 Bandwith 설정 


ESP32에서 제공하는 WIFI/BT의 RF Calibration 


ESP WIFI Mesh
ESP에서 제공해주는 기능으로 Mesh기능으로 추후에 이부분을 개인적으로 좀 더 해보도록하겠다. 


2.2 ESP32 WIFI Sniffer Mode

ESP32에서 WIFI Sniffer를 사용하는 이유는 아래의 SmartConfig 기능이 때문일 것이다.

  • WIFI SmartConfig 란?
TI에서 개발되어진 WIFI Provisiong 특허기술이라고 하며, 최근 회사에서 사용해서 알게되었다.
보통 WIFI STA 의 경우,  WIFI AP에 접속하려면, SSID/PW 정보를 WIFI STA에서 직접 입력 후 이를 Provisiong, 즉 암호화해서 전달해준다.
WIFI STA에서 Provisiong은 Layer 2부터 변경해서 하는데, 상위 특허기술은 내 생각에는 획기적이라고 생각들었다. (역시 TI, 특허도 오픈하고) 

ESP32, SmartConfig가 지원되는 WIFi STA 되면,  WIFI AP 접속을 다른 WIFI STA에서 쉽게 제어가능하다. 
ESP Touch 의 Android 앱을 설치한 후 핸드폰(WIFI STA)에서 UDP로 SSID/PW를 Broadcast전송하다.
이를 ESP32가 Sniffer Mode에서 상위 UDP기반의 SSID/PW를 받아 WIFI Provisiong 진행한다.


SmartConfig (WIFI Provisioning)


SmartConfig 필수 조건사항 
  1. ESP32 or ESP8266:  ESP32의 WIFI STA Mode 설정과 WIFI Sniffer Mode 지원
  2. Android (WIFI STA Mode)기기: ESP Touch App 설치 

ESP Touch APP과 ESP32 동작순서  
  1. ESP Touch APP  SSID/PW 입력 , 이 정보를 UDP 전송 
  2. ESP32은 WIFI STA/Sniffer 기능으로 상위 UDP 정보(SSID/PW)획득
  3. ESP32은 받은 SSID/PW기반으로 WIFi STA Provisiong 진행 
  4. ESP32의 WIFI STA 은 WIFI AP 접속완료  
한마디로 Provisiong 전에 UDP로 몰래 빼어보내고, 이 정보 받아 실제 WIFI Provisiong 진행한다는 것이다. 
https://www.espressif.com/en/products/software/esp-touch/overview

ESP32 SmartConfig (Sniffer기능 필수), WIFI STA으로 가능 

ESP32 SmartConfig 소스 
아래의 소스를 보면 동작원리를 대충알게되어진다. 

ESP32 SmartConfig Example 


2.3. WIFI STA Monitor(Sniffer) 모드

ESP32가 Packet Sniffer 모드를 지원한다고 해도, 외부에서 ESP32의 Packet을 Sniffer하고 싶어할 것이다. 
이를 위해서 다른 Linux Board or Android Board or Laptop 에서 설정하는 법을 간단히 소개한다. 
만약 Linux or Android에서 하고 싶다면 wifi driver에서 설정 monitor 변경 후 tcpdump를 사용하여, Wireshark에 연결하면 될거 같다. 
iwconfig 이용하여 monitor (promiscous)로 변경가능하지만,  WIFI Driver에서 미제공 및 HW가 안되는 경우가 있으므로 주의해야 한다. 

tcpdump 와 Wireshark 사용법 

  • 확인사항
각 WIFI STA 모드에서 Monitor모드가 지원되는 지 반드시 확인 

  • Rasperry Pi4의  WIFI 설정확인 (Monitor 미제공확인)
원래 Rasperry Pi4에서 iwconfig로 monitor 하려고 했으나, Raspberry Pi4의 WIFI는 monitor가 미지원되는 것으로 확인
이전에는 WIFI Monitor는 USB WIFI Dongle로 진행했던거 같으며, Odroid 때도 동일한 것 같음(Odroid는 WIFI가 동글로제공) 

  • Laptop 기반으로 wireshark로 설치 
우선 나의 Laptop의 WIFI가 monitor mode가 지원되어 아래와 같이 진행

Laptop 의 ifname 변경 
ifname이 너무 길어서 아래와 같이 간단히 변경 
$ sudo ip link set name eth0 dev enp7s0
$ sudo ip link set name wlan0 dev wlp0s20f3

Laptop 의 Ubuntu 20.04 Wireshark 설치 

/usr/bin/dumpcap 의 권한문제 발생하여 아래와 같이 변경 
$ sudo apt update 
$ sudo apt upgrade 
$ sudo apt install wireshark
$ sudo chmod +x /usr/bin/dumpcap
$ wireshark

Laptop 의 WIFI Monitor변경 
Laptop의 WIFI가 Monitor가 지원되는 것을 확인
$ iwconfig  // Manage Mode 확인 
$ iw list | grep monitor // WIFI Phy 정보확인 및 monitor 지원여부확인 

$ sudo ifconfig wlan0 down
$ sudo iwconfig wlan0 mode monitor
$ sudo ifconfig wlan0 up

$ wireshark       //WIFI Monitor 모드로 동작확인  

WIFI Packet Capture (WireShark)
아래는 참고만 하시면 되겠다. 


3. Android의 WIFI 정보정리 

Android에서 사용하는 기본 WIFI 정보들이며, Google에서 쉽게 설명이 제공되어 있어 다음과 같이 링크로 연결 

  • Android WIFI Overview
Google에서 제공하는 WIFI Overview로 관련부분에 대해 설명이 잘나와있다. 
  https://source.android.com/devices/tech/connect/wifi-overview

  • Android WIFI Scan 
WIFI AP Scan부분이 궁금하여 관련부분을 찾았으나, 현재 자세한 설명은 없어 아래에서 Android WIFi Scan은 Passive 방식 
현재 Android WIFI Scan은 default로 Passive Scan 방식이라고 함 
 
  • WIFI AP/STA 동시 실행 
  

3.1. Android/Linux WIFI 의 구조정리 

오래전에 Android WIFI의 AP/STA/ Direct 의 경우 각각의 구조를 정리한 것이지만, 현재와 많이 다를 것 같다. 
구조만 참고하자. 

Android WIFI STA의 구조 

Android WIFI AP의 구조 


3.2. WIFI Driver Porting 방법 

오래전 집에서 Odroid 기반으로 WIFI Driver를 간단하게 Porting한 것으로 자료를 대충정리했지만, 참고하시길