개요 |
|
기본정보.
1. SimpleLink API 간략 레퍼런스 사이트
2. SimpleLink API pdf 문서.
|
|
|
TI사의 CC3100/CC3200 을 사용자 목적에 맞게 펌웨어 코딩하는 과정은 TI사에서 제공하는 SimpleLink Driver 라는 C로 되어있는 소스코드 라이브러리를 활용하는 것으로 이뤄진다. 본 글은 SimpleLink Driver가 무엇이며, 어떻게 활용하는지 방법을 정리해둔다.
SImpleLink Driver 이해하기
CC3100 의 경우에는 외부에 별도의 MCU 코딩환경에서 SimpleLink Driver 소스들을 포함시키고, 사용자 코드는 SimpleLink Driver 에서 제공하는 함수를 호출하는것으로 개발이 진행된다. 이때 MCU와 CC3100간의 통신은 SPI, UART가 가능하다.
CC3200 의 경우에는 "내장"된 MCU 개발환경에서 SimpleLink Driver 소스들을 포함시키고, 사용자 코드는 SimpleLink Driver 에서 제공하는 함수를 호출하는것으로 개발이 진행된다.CC3100과 완전히 동일하다. CC3200 의 MCU는 내부적으로 SPI로 네트웍코아측과 통신하게 된다.
즉, CC3100이나, CC3200 이나 개발방법론은 완전히 동일하게 SimpleLink Driver 기반으로 한다.
CC3100은 외부 MCU, CC3200 은 내부 MCU라는 점 만이 차이점이다.
SImpleLink Driver 정보사이트
CC3200 용 SimpleLink 사이트와 CC3100용 SimpleLink 사이트가 따로있지만,
CC3200 용 SimpleLink 사이트: http://software-dl.ti.com/ecs/cc31xx/APIs/public/cc32xx_simplelink/latest/html/index.html
CC3100 용 SimpleLink 사이트: http://software-dl.ti.com/ecs/cc31xx/APIs/public/cc31xx_simplelink/latest/html/index.html
위 사이트에서 볼 수 있는 SImpleLink Driver 라는 것은 완전히 동일한것이다.
위 2개 정보사이트에서의 차이점이라고는 CC3200 은 칩내에 MCU가 있다는 점이고, 내장 MCU와 네트웍코아간에 SPI통신으로 고정되어있고, CC3100은 외부 MCU와 SPI, UART 2종 가능하다.
SImpleLink Driver 파일 확보하는 방법
https://igotit.tistory.com/295 에서 설명됨.
SimpleLink Driver 요점정리.
앞의 SimpleLink Driver pdf문서에 전부 있는 내용이지만, 요점만 리해둔다.
이 내용들은 앞부분 20페이지까지의 내용 중 일부이다.
SimpleLink Driver를 탑재하는 MCU의 적은리소스만 요구한다.
예: TCP 클라이언트 응용의 경우 7kbyte flash, 0.7kbyte RAM이면 충분하다.
SimpleLink Driver는 모든 MCU, 컴파일러, 운영체제 무관하게 포팅가능하다. -완전한 호환성.
사유:완전표준화된 ANSI C(C89),BSD Socket 코드,단순한 API 로 만들어졌기 때문임.
- simplelink driver는 표준C컴파일러(C89) 를 모두 지원한다.또한 특정 컴파일러 종속적인 코드가 없단다.
- simplelink driver는 8bit, 16bit, 32bit MCU를 모두 지원한다.
- simplelink driver는 모든 클럭에서 작동가능하다.
- simplelink driver는 big-endian, little-endian 모두 지원한다.
- simplelink driver는 OS 사용, 비사용 모두 지원한다.
주 - RTOS환경에서도 작동한다는 말이며, CC3200 의 응용예를 보면 FreeRTOS 기반으로 만들어진 것도 많고 고기능에서는 FreeRTOS를 사용하는것이 유리한것으로 보인다.
SimpleLink Driver 의 구성요소(빌딩블럭)
- 주요기능 6종이 구현된 API모듈로 구성된다.
1. Device API - 하드웨어관련 기능들 예 : start, stop, set, read device configuration.
2. WLAN API - WLAN (IEEE802.11 프로토콜)관련 기능들. 예 : station, AP, P2P같은 mode, provisioning 방식설정, connection profiles 추가, setting connection policy
3. Socket API - Berkeley socket APIs 와 함께 제공. 사용자 응용에서 가장 흔히 사용되는것.
4. NetApp API - HTTP server, DHCP server, mDNS Client/Server 류의 networking service.
5. NetCfg API - configuring networking parameters, MAC주소설정, DHCP로부터 IP확보, static IP 주소 설정등.
6. File System API - CC3100/CC3200 의 외부 Serial Flash 메모리 읽기쓰기위한것.
아래그림에서 푸른색부분이 SimpleLink Driver를 보이고 있다. 최상단 사용자 코드는 SimpleLink Driver 의 함수를 호출한다.
CC3100 의 경우 SimpleLink Driver 의 계층을 아래 그림에서 명확히 알 수 있다. CC3100 외부의 별도의 MCU내에서 사용자 응용코드는 SimpleLink Driver 를 경유하여 SPI나 UART 로 CC3100 과 연결되어 작동된다.
SimpleLink Driver 포팅방법.
CC3100 을 핸들링하는 임의 MCU에 SimpleLink Driver 를 포팅하는 방법 설명한다.
TI사의 위키: http://software-dl.ti.com/ecs/cc31xx/APIs/public/cc31xx_simplelink/latest/html/porting.html
위 주소의 porting부분에 총 8 step으로 설명 잘 되어 있으니 이를 따라서 진행하면된다.
SimpleLink Driver 이용한 Network Application 코딩흐름.
- 본 내용은 아래 pdf 문서의 페이지 13~20 까지의 내용 요약이다.
문서제목 : CC3100\CC3200 SimpleLink™ Wi-Fi Network Processor Subsystem
pdf보기 : http://www.ti.com/lit/ug/swru368/swru368.pdf
- network application 에 필요한 SimpleLink Driver에서 제공하는 SW block 을 설명한다.
- 본 설명에서 제시하는 흐름은 대부분의 응용코드 작성에서 추천되는 흐름이다.
- SimpleLink Driver 의 SW block 을 활용함에서 있어서 개발자는 omplete flexibility 를 가질 수 있으며 본 내용에서의 설명은 단지 가이드를 위한 단순 사례로써 제시되는 정보이다.
SimpleLink Driver 기반 코딩흐름.
단계1. Device Initialization - Wi-Fi subsystem initialization
hibernate state 에서 Wi-Fi subsytem을 깨운다.
단계2. Configuration
주로 한번만 이뤄지면 되는 설정들 달성한다.
예: cold boot configuration , WLAN STA 인것을 WLAN sott AP로 혹은 WLAN P2P로 변경, MAC address 변경 등.
이들 설정이 실 적용될려면 Wi-Fi subsystem 을 재부팅해야한다.
단계3. WLAN Connection
WLAN 통신이 수립된다. 예: WLAN STA로 AP에 접속하는것.
DHCP : TCP/UDP 통신 이전에 반드시 IP Address 가 수신되어야 한다. (주 : DHCP서버가 발행하고 DHCP클라이언트가 수신해야 한다.)
단계4. Socket Connection
TCP/IP 계층을 셋업한다. 이 과정은 아래 단계로 이뤄진다.
1. Creating the Socket - TCP, UDP, RAW socket 중 1개를 선택한다. server socket/ client socket 중 하나를 선택한다. 소켓특성 blocking/non-blocking , socket time-out 설정한다.
2. Querying for the server IP address - client socket 측에서는, 통상 서버측 IP address 가 필요해진다. 이를 확보하는 방법은 server name 을 이용하여 IP address 를 요청한다. 이때 사용되는 프로토콜이 DNS다.
3. Creating socket connection - TCP 소켓에서는 데이터 통신전에 socket connection 을 수립해야한다.
단계5. Data transaction
단계4에서 socket connection이 수립되면 socket server 와 socket client 간에 데이터 통신을 응용로직에 맞게 구현한다.
단계6. Socket Disconnection
더 이상 소켓기반 데이터 통신 하지 않을려는 경우 socket 연결수립된 것을 닫기 처리한다.
단계7. Wi-Fi subsystem hibernate
wi-Fi subsystem 을 오랫동안 사용하지 않는 경우 hibernate state 로 보낸다.
단계6과 단계7 부연설명 : 응용목적마다 다르게 처리된다. 어떤 경우엔 장치 오프할 때까지 연속 통신해야하는 경우도 있으며 이 때는 단계6과 7처리는 생략해도 된다.
Code example
- 위 코딩흐름 각 단계별 코드 예.
아래 문서 페이지 14~17.
문서제목 : CC3100\CC3200 SimpleLink™ Wi-Fi Network Processor Subsystem
pdf보기 : http://www.ti.com/lit/ug/swru368/swru368.pdf
SimpleLink 주요활용정보.
non-OS에서 활용하는 경우 while문내에 _SlNonOsMainLoopTask(); 둬라는 내용
http://e2e.ti.com/support/wireless_connectivity/f/968/t/365663.aspx
<- 중요하다. 함수 _SlNonOsMainLoopTask(); 를 main while 문내에 배치해둬야 STATION 연결 비연결 이벤트가 정상적으로 발생한다. _SlNonOsMainLoopTask(); 를 while속에 두지 않으면 STATION 연결 비연결 이벤트가 정상적으로 발생하지 않고 AP 실행 처음에 STATION연결이벤트가 한번만 발생하고 이후에 STATION 연결, 비연결시 이벤트 발생하지 않음.
cc3100/cc3200 이 AP 로 작동시 1개의 Station만 접속 가능한데, 이 질답의 답변중에 " If you require more clients to access, then you will need to use Station mode (i.e. Join it to a Wifi Router network)" <- 이런 말이 있다. Router Network..<- 별 의미있는 솔루션 아님.그냥 기존의 다른 AP(혹은 라우터라 불리는것)에 여러개 접속시켜라는 말임.
http://e2e.ti.com/support/wireless_connectivity/f/968/p/354255/1244936.aspx#1244936
WLAN Connection 관련 주요활용정보.
STATION 연결 해제시 AP측에서 이벤트 발생하지 않음 질답
http://e2e.ti.com/support/wireless_connectivity/f/968/p/351918/1235049.aspx#1235049
connection event 질답 : http://e2e.ti.com/support/wireless_connectivity/f/968/p/362968/1279201.aspx#1279201
소켓관련 주요활용정보.
소켓서버에서 클라이언트 드롭된것 확인하는 빠른 방법 질답 : http://e2e.ti.com/support/wireless_connectivity/f/968/t/360713.aspx
답변: The return value of sl_Recv() can be used to detect the connection drop from the remote side. A sl_Recv() should return 0 if the connection is closed by the remote in both blocking and non-blocking case.
첫 등록 : 2016년 7월 16일
최종 수정 : 2019년 11월 11일
단축 주소 : https://igotit.tistory.com/819
'임베디드.일렉트로닉스' 카테고리의 다른 글
USB 커넥터 Type-A,B, mini, micro, 2.0, 3.0 (0) | 2019.11.13 |
---|---|
CC3100 BoosterPack - wifi chip (0) | 2019.11.11 |
SMT Assembly 용 Pick & Place File , Component Placement List (CPL) (0) | 2019.11.04 |
ALTIUM(알티움). 거버, NC Drill 출력파일 만들기 (0) | 2019.11.04 |
ALTIUM (알티움). 보드외각 데이터 만들기. (0) | 2019.11.04 |
댓글