2016년 5월 31일 화요일

ESP8266 and STM32F4


Original Article : http://blog.naver.com/simonsayz/220724527073

​
ESP8266  -  The Wrong Solution or Good...
요즘 많이 사용하는 ESP8266을 고속 통신이 필요해서 테스트를 해보았습니다.
​
인터넷 상에서, 너무 좋은 정보들이 많이 있기는 한데, 개인적으로 정말 필요했던, ESP8266 (ESP12, WROOM02)의 물리적인 속도는 어디까지 나오는가에 대한 정보를 찾을 수가 없었습니다.


그래서 직접 TCP/IP 성능을 직접 확인하기로 하고, 각종 테스트를 진행해보았습니다.


상황 , 전제조건
 - 개인 프로젝트용으로 초당 1MB/s ​속도로 스트리밍이 되어야 함.
 - STM32F4의 통신 모듈로 사용해야 함.
 - 인터넷에 있는 내용은 전체가 그런것은 아니지만, 주객전도된 내용이 많음.
   (16Mhz Atmega가 80,160Mhz ESP8266을 통신 모듈로 사용해서,  배보다 배꼽이 더 큼. 

     Atmega가 나쁘다는 것이 아니고, ESP8266 성능이 상대적으로 너무 뛰어남. 접근성에서 Atmega가 좋은 것은 인정)
​
주의
  bps = bit / sec ,   Bps = byte /sec


실험 결과
 - AT Command 방식으로는 해결 않됨. (성능을 향상하기 위해서, Firmware 직접 작성 필수)
 - ESP8266ex는 160Mhz 클럭사용해야 함.
 - 전체 시스템 통합을 위해서, PC를 사용할 경우,
 - STM32F4 (168Mhz) 사용할 경우, UART는 10.5Mbps까지 가능 (USART1,6사용시), 나머지 Uart,Usart는 5.25Mbps까지 가능
 - ESP8266 Uart는 9Mbps까지는 가능
    ( PC로 테스트하기 위해서는 PL2303HXD를 사용해야 함, FT232BM 사용시 장비 최고 속도 미만인 관계로, 테스트 불가)
 -  ESP8266 단독 실행시 1.4MB/s 정도까지 전송속도가 보장됨 (잘 작성했을 경우)
 - STM32F4의 경우, USART를 사용해도 연동시 7Mbps정도만 가능 (보드에 따라서 성능차이 발생함)
     Resampling x8 사용시, x16 사용시 5Mbps까지 가능
 - 연동을 위해서는 SPI를 사용해야함.
     SPI 통신의 문제점을 해결하기 위해서, Uart도 사용해야 함.  (Master : ESP8266 / Slave : STM32F4 )
     잘 작성을 한다면, SPI만으로도 가능하지만, 응답을 받는 ESP8266 CPU 낭비를 없애기 위해서
​
     기본 구성도는 ...​
     PC(Mobile) -> Wifi -> ESP8266 -> SPI -> STM32 (Receive)
                                                           Uart <- span="" stm32=""> (Send)


 - ESP8266 코드 작성시, 프로토콜의 특성상, TCP<->Uart Transparent Bridge 예제와 같이 작성하면 망함.
    (TCP/IP Nagle때문에, 비대칭 송수신 통신일 경우, 패킷을 모아주어야 함, 특히 무선인터넷에서는 잘못 작성할 경우, 10배정도 차이가
     발생할 수도 있음.  응답은 한개의 패킷으로  / 개인 프로젝트에서 비대칭 (PC->Embedded System (패킷多),
     Embedded System->PC(패킷小) )
   
​
최종 결론 (/w STM32F4)
 - 1MBps가 요즘 장비(예. 단말기 - 휴대폰)에서는 저속이나, Embedded 장비에서는 매우 고속임 (bit로 환산할 경우, 10Mbps)
    (cf. 115200bps ~= 11520Bps =  11.5KBps)
 - 고속 통신을 하려면, Interrupt 방식은 Cortex M4라도 절대 사용하면 않됨
    (모두 DMA방식을 사용해야함)
 - SDIO는 DMA Stream,Channel이 고정되어 있으므로, DMA 매핑을 할때 0순위로 선정되어야 함.
 - DMA 방식으로 적당히 작성시, 100KBps정도까지 가능
 - Optimized State Machine으로 작성할 경우, 500KB까지 가능
    (손발이 오그라질때까지 최적화를 할 경우, 900KB까지 가능할 것으로 예상)
​
​
​
느낌점
 - 하드웨어가 $2이라도, $1000 소프트웨어가 붙어서, $10000 제품이 될 수도 있음.
   정말 공개 소프트웨어 개발자분들을 존경해야 함.
 - 최근 초등학생을 위한 미국에서 진행하는 S/W 캠프도 있다고 듣고, 엄청 놀랐음.
    (어렸을때 좋은 경험은 될수 있겠지만, 금액이 너무 어마 어마 해서... 손발이 곱계 정도로 짜면서 고민해야 이해할 수 있는 부분을

     금전으로 해결하는 것 같아서, 슬퍼졌음)
    ​     
참고. 하드웨어 통신 속도
 // ---------------------------------------------------------------------------
 //                      Speed    Over16      Over8
 //                               ----------- -----------
 //                               42Mhz 84Mhz 42Mhz 84Mhz
 //                               APB1  APB2  APB1  APB2   FPS    Limit
 //  --------------------------------------------------------------------------
 //  115200 x 8 x 1    =   921600  O     O     O     O      3.75
 //  115200 x 8 x 2    =  1843200  O     O     O     O      7.50
 //  115200 x 8 x 2.8  =  2580480  -     O     O     O     10.50
 //                       2625000  -     O     O     O     10.68
 //  115200 x 8 x 3    =  2764800  -     O     O     O     11.25
 //                       3000000  -     O     O     O     12.20   FT232BM
 //  115200 x 8 x 4    =  3686400  -     O     O     O     15.00
 //  115200 x 8 x 5    =  4608000  -     -           O     18.75   ESP8266 80Mhz(DataSheet p19)
 //                       5250000  -     -           O     21.36
 //  115200 x 8 x 6    =  5529600  -     -           O     22.50
 //  115200 x 8 x 7    =  6451200  -     -           O     26.25
 //  115200 x 8 x 8    =  7372800  -     -           O     30.00
 //  ###################  8000000  -     -                         ESP8266 160Mhz
 //  115200 x 8 x 9    =  8294400  -     -           O     33.75
 //  115200 x 8 x 9.55 =  8801280  -     -           O     35.81   LPix V1.3b
 //  115200 x 8 x 10   =  9216000  -     -           O x   37.50
 //                      10000000  -     -           O x   40.69
 //  115200 x 8 x 11   = 10137600  -     -           O x   41.25
 //                      10500000  -     -           O     42.7    STM32F4
 //  115200 x 8 x 12   = 11059200  -     -
 //  115200 x 8 x 13   = 11980800  -     -
 //                      12000000                                  PL2303HXD



 



댓글 없음: