기본 콘텐츠로 건너뛰기

RF-BM-S02 Pinouts (CC2540/CC2541 Bluetooth LE Module)

* PinOuts


* Pin설명
GND : -
VCC : + 전원 (2~3.6v)
P22 : (Output) Sleep indication
P21 : (Output) connection status indication (low level인지 square wave인지 확인인. module parameter settings 참조)
RES : Reset - GND 연결시
P20 : (INPUT) Level Trigger (Default) / Pulse Triggering Mode
      * Level Trigger Mode 
      GND 일때 활성화 (자체 Pullup)
      0: 장비와 접속될때까지 브로드캐스팅 시작.
      1: 즉시 sleep 모드로 전환. 
      * Pulse Triggering
      매번 Pulse를 받을 때 마다 Boot-up/Shutdown 모드를 전환
      * 모드 전환에 대해선 module parameter settings 참조
P17 : (Input/Output) PWM Input/Output
U+, U- : USB + -, 사용 안함
P12 : (Input/Outpu) Factory Reset. 
      전원을 넣고 30초안에 
      5초간 GND와 연결하면 매개변수 초기화 (Shallow Recovery)
      20초이상 연결시 공장초기화 (Deep Recovery)
      30초이후론 보통의 I/O로 작동.
P11 : (Output) PWM 1out
P07 : (Output) PWM 3out
P06 : (Output) PWM 4out (EN)- High 일때 Sleep, Low 일때 200ms 간격으로 broadcasting. 
P05 : (Input) BRTS 입력 - 모듈 Wake up을 위한 데이터 전송 요청
      0: 호스트에서 데이터를 보냈고 모듈은 호스트로부터 데이터 전송을 기다릴 것이다. 따라서 Sleep 모드로 들어가지 않는다.
      1: 호스트가 데이터를 보내지 않았거나 이미 보냈다. 신호값은 "1"로 설정될 것
P04 : (Output) BCTS 출력. 선택사항. 호스트 Wake up. 
      0: 모듈은 데이터를 보냈고 호스트는 데이터를 수신할 것이다.
      1: 모듈은 데이터를 보내지 않았거나 이미 보냈다. 신호값은 "1"로 설정될 것
P03 : (Output) UART TXD
P02 : (Input) UART RXD
P01 : (Input) ADC - Analog Input

* 기본특징
연결 상태 지원 P21핀
6개의 Input/Output으로 사용가능한  IO있음 - 알람, 조명제어, 리모콘, 등등 사용
2개의 Timing/Cycle Output 지원 - 스케쥴링
2개의 ADC Input (14bit) 지원 - EN/BAN - 온습도 측정/조도 등등
4개의 PWM Output 120hz - 조명 디밍(Dimming)제어 - 디폴트로 Off
안티하이재킹을 위한 암호 지원
내부 RTC 지원
IO port 설정과 상태를 초기 설정으로 저장가능.
얕은 복구와 깊은 복구 모드를 지원
리모트 셧다운 지원

* 활용분야
- LED 전구 : http://www.szrfstar.com/jiejuefangan/lanyajiejuefangan/136.html
- 전자담배 : http://www.szrfstar.com/jiejuefangan/lanyajiejuefangan/135.html
- Beacon, 분실물 방지 Tag, RC, 체중계

* BlueBasic
http://blog.xojs.org/bluebasic




* Bridge 모드 (Transparent transmission mode)
AT명령을 사용할 수 있는 모드. MCU랑 연결시 사용
UART를 통해 쌍방향 통신이 가능.
AT 커맨드를 통해 제어가능.
UART Hardware protocol - 115200BPS/8/no parity/1 stop bit
EN이 High 일때

* Direct-Drive 모드
추가 MCU없이 독립 동작.
앱에서 직접 BLE프로토콜로 통신가능.
이 모드에선 사용자는 오직 코딩만 하면 된다.
기본적으로 전원이 들어왔을때 모듈은 자동으로 브로드캐스트를 한다.
이때 스마트 폰의 경우 특정 어플리케이션에서 스캔할 수 있고 페어할 수 있다.
Characteristic value 가 중요.

* service UUID / Characteristic value UUID / Handle 별 Protocol Description
0xffe5 / FFE9 / 0x0013 - (Write) Write data from UART TX output
0xffe0 / FFE4 / 0X000E - (Write) ...
암튼 이렇게 접근 차차 정리.

0xFFC0 / FCC1 / 0x0045 - 6byte(old password) + 6byte(new password)  암호설정
0xFFC0 / FFC2 / 0x0048 - 0: 암호전송성공 1: 암호전송실패 2: 암호업데이트성공 3: 암호사용취소

0x180F / 2A19 / 0x000A - 남은 배터리 용량 % 값

Module Parameter Settings
0xFF90 / FF9A / 0x007D - 0b00000000 : level enabled , 0b00000001 : pulse enabled


* Apps
RF-STAR에서 제공하는 앱.
LightBlue Bean 을 잘 잡는 것을 확인.
전원 VCC+/GND 만 연결하고 3.3v, 3.7v를 각각 넣어보았으나 스캔 실패.

* Serial 연결
USB2TTL 을 꽂으니 RX 파란불 점멸.
USB2TTL 의 TXD -> BLE P02 RXD
USB2TTL 의 RXD -> BLE P03 TXD
교차연결
REST -> GND 연결 클릭시 -  Tv221u-B4994C5E4926 (디바이스명)- 과 같은 문자열을 한줄씩 출력. RX 점멸

CC Debugger 없이 USB2TTL로 업로드는 안되나?
일단 핀 간격이 1.27mm로 매우 좁아서 훅 클립을 사용했다.
혹시라도 쇼트가 나거나 연결이 정확하지 않으면 TX쪽 불이 계속 들어올 수도 있으니 그럴땐 다시 조정하자



댓글

이 블로그의 인기 게시물

NeoVim + LazyVim 사용기 - 자주 쓰는 단축 포함.

주로 쓰는 컴터들이 죄다 리모트로만 연결해서 iSH나 Termux 같은 모바일 터미널에서 간단하게 개발환경을 쓰고 싶었음. 사실 vi (vim 도 아님) 으로 충분하지만 avante.nvim  이라는 녀석이 Cursor 처럼 외부 LLM 모델을 쓸 수 있다고 해서 삽질을 시작함;;; macOS 에서야 대충해도 되니 약간 삽질이 필요했던 windows 기준으로 기록. NeoVim 설치 https://winstall.app/apps/Neovim.Neovim winget 이 별도로 설치 없이 쓸 수 있는 package manager 라서 간단하게 winget install --id=Neovim.Neovim  -e 로 끝나는 점이 좋았음.  LazyVim 설치 https://www.lazyvim.org/installation  보고 Powershell 로 설치. 깔끔하다! 생각보다 빠르다! nvim-treesitter 관련 오류 수정 시작할 때 마다 nvim-treesitter 에서 오류 발생. 실행 속도도 느려지고 매우 불편! 다행스럽게도 reddit 에서 해결법을 알려줌. https://www.reddit.com/r/neovim/comments/14oozmu/neovim_cant_find_c_compiler/ choco install mingw  refreshenv   관리자모드에서 mingw 를 설치하고 (winget 으로는 설치 안되는 듯?) refreshenv 하니 해결. 필요한 외부 유틸들 설치 https://www.nerdfonts.com/font-downloads  Nerdfonts 설치. ligature를 쓰고 싶어 FiraCode Nerd Font를 선택. ripgrep ,  fd  도 설치. search & replace 를 편하게 쓸 수 있다. :, esc 눌렀을 때 모달 팝업 같은 UI가 나와서 당황. https://www.youtube.com/wat...

MQTT 접속해제 - LWT(Last will and testament)

통신에서 중요하지만 구현이 까다로운 문제로 "상대방이 예상치 못한 상황으로 인하여 접속이 끊어졌을때"의 처리가 있다. 이것이 까다로운 이유는 상대방이 의도적으로 접속을 종료한 경우는 접속 종료 직전에 자신의 종료 여부를 알리고 나갈 수 있지만 프로그램 오류/네트웍 연결 강제 종료와 같은 의도치 않은 상황에선 자신의 종료를 알릴 수 있는 방법 자체가 없기 때문이다. 그래서 전통적 방식으로는 자신의 생존 여부를 계속 ping을 통해 서버가 물어보고 timeout 시간안에 pong이 안올 경우 서버에서 접속 종료를 인식하는 번거로운 방식을 취하는데 MQTT의 경우 subscribe 시점에서 자신이 접속 종료가 되었을 때 특정 topic으로 지정한 메시지를 보내도록 미리 설정할 수 있다. 이를 LWT(Last will and testament) 라고 한다. 선언을 먼저하고 브로커가 처리하게 하는 방식인 것이다. Last Will And Testament 라는 말 자체도 흥미롭다. 법률용어인데  http://www.investopedia.com/terms/l/last-will-and-testament.asp 대략 내가 죽으면 뒷산 xx평은 작은 아들에게 물려주고 어쩌고 하는 상속 문서 같은 내용이다. 즉, 내가 죽었을(연결이 끊어졌을) 때에 변호사(MQTT Broker - ex. mosquitto/mosca/rabbitMQ등)로 하여금 나의 유언(메시지)를 상속자(해당 토픽에 가입한 subscriber)에게 전달한다라는 의미가 된다. MQTT Client 가 있다면 한번 실습해보자. 여러가지가 있겠지만 다른 글에서처럼  https://www.npmjs.com/package/mqtt  을 사용하도록 한다. npm install mqtt --save 로 설치해도 되고 내 경우는 자주 사용하는 편이어서 npm install -g mqtt 로 전역설치를 했다. 호스트는 무료 제공하고 있는 test.mosquitto.o...

세상 간단한 https(+secured websocket): Caddy

nginx, apache2 같은 걸로 매번 certbot 연동을 통해 https 하는게 지겨워서 알아보니 Caddy라는게 있더라. 설치법은 강하게 크기 위해 알아서 해본다. # cat /etc/caddy/Caddyfile your.shitty.site:8123 {   proxy / localhost:9123 {     websocket     transparent   } } 이건 외부에서 8123으로 들어오는 걸 내부적으로 9123로 맞춰서 https 맞춰주는 reverse proxy. 만일 port를 생략하면 # cat /etc/caddy/Caddyfile your.shitty.site {   proxy / localhost:9123 {     websocket     transparent   } } 기본포트인 443으로 되어 https://your.shitty.site 로 접속이 된다. 요새 말썽이던 cloudflare 버리고 netlify domain이랑 caddy를 쓰니까 앓던 이가 빠진 느낌. 이 조합은 당분간 계속 써야겠다 싶다.