RPi를 이용한 CC2531 펌웨어 플래싱
zigbee IoT 장치들(End Device)를 사용하기 위해선 장치들이 연결되기 위한 Coordinator가 필요하다.
코디네이터를 중심으로 end device 들이 연결되는데, 중간에 네트워크 확장을 위해서 라우터를 추가하기도 함.
코디네이터 혹은 라우터로 사용할 수 있는 CC2531 을 구매 후 펌웨어 변경 작업을 정리해 보았음.
CC2531 펌웨어 플래싱 with RPi
* 참고:
* What do I need? | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/what_do_i_need.html
* Flashing the firmware on the CC2531 USB stick | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html
* Alternative flashing methods | zigbee2mqtt.io - https://www.zigbee2mqtt.io/information/alternative_flashing_methods.html
* ConBee implementation #72 - https://github.com/jmichault/flash_cc2531/issues/9
우선 CC2531(약 $5) 이랑 다운로더 케이블(약 $2)를 준비한다. 난 AliExpress 에서 주문하였음.
칩안테나(회로에 안테나가 그려져 있는) 버전이 있고 안테나 단자가 달려 있고 안테나를 같이 파는 버전도 있다.
CC2531 을 그냥 쓸 경우 신호가 약하다는 글을 많이 봐서 난 안테나 버전으로 구매하였음.
펌웨어 작업이 이미 되어 있는 CC2531을 팔기도 한다던데 그걸 살 경우 다운로더 케이블과 이 작업이 필요없다.
위에 참고로 건 글 중 Flashing the firmware on the CC2531 USB stick 글을 보면 Windows, Mac, Linux 에서 플래싱을 할 수 있지만, 왠지 pi에서 하는게 더 편할 것 같았다.
pi나 아두이노로 진행하는 방법은 Alternative flashing methods 글을 참고하면 됨.
1. 파이에 WiringPI 설치
sudo apt install wiringpi
2. 파이에서 툴 다운로드
git clone https://github.com/jmichault/flash_cc2531.git
3. 파이와 다운로더 모듈 간에 GPIO핀 연결
연결을 위해선 암-암 점퍼 케이블 4개가 필요함.
다운로더 모듈 |
파이 |
pin 1 (GND) |
pin 39 (GND) |
pin 7 (reset) |
pin 35 (GPIO24, BCM19) |
pin 3 (DC) |
pin 36 (GPIO27, BCM16) |
pin 4 (DD) |
pin 38 (GPIO28, BCM20) |
다운로더 모듈의 핀보드는 모듈에 적혀있으니 그걸 보면 되고, 파이의 핀 위치는 https://pinout.xyz/ 사이트 참고.
4개 핀도 연결하고 전원 공급을 위해 CC2531 을 파이의 USB단자에도 연결해준다.
4. 플래싱
1) 먼저 잘 연결이 되었는지 확인해본다.
cd flash_cc2531
./cc_chipid -m 90
ID = b524.
ID가 0000, ffff 등이 나온다면 뭔가 오류가 있음.
원래 -m 90 을 붙여주지 않아도 되는데, 나의 경우 계속 붙여줘야 정상적으로 진행이 가능했다.
2) 펌웨어 파일 다운로드
코디네이터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default
라우터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/router/CC2531/bin
# 코디네이터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip
unzip CC2531_DEFAULT_20190608.zip
# 라우터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/router/CC2531/bin/CC2531_router_2020_09_29.zip
unzip CC2531_router_2020_09_29.zip
라우터 버전은 펌웨어가 3개가 나온다.
- router-cc2531-std.hex: 라우터 기능만 작동
- router-cc2531-diag.hex: 라우터 + 진단 정보
- router-cc2531-diag-usb.hex: 라우터 + 진당전보 + USB 시리얼포트로 인식 (진단정보를 USB로 읽기 가능)
진단정보가 뭘 말하는건지 모르겠어서 난 그냥 -std 버전을 사용하였음.
3) 펌웨어 플래싱
./cc_erase -m 90
./cc_write -m 90 CC2531ZNP-Prod.hex (혹은 해당하는 펌웨어명)