본문 바로가기

임베디드

CC2652P 칩셋 기반의 모듈을 이용한 Zigbee 3.0 코디네이터 제작

HomeAssistant를 이용한 집 자동화 및 IoT를 재미로 시작한지 3개월 정도 되었습니다.

그런데 어느날 갑자기 뭔 바람이 불었는지 느닷없이 Zigbee 3.0 코디네이터를 직접 만들어 보고싶은 마음이 생겼습니다.

재택 근무로 무지 심심했던 5월 초였습니다.

 

구글로 여러 자료를 찾아 공부하면서 EasyEDA를 이용하여 회로 설계와 PCB 아트웍을 했습니다.

아트웍 결과를 3D로 확인해 보았습니다. 모듈 덕분에 부품 갯수가 몇개 안되는 아주 단순한 구성이 되었습니다.

CC2652P 동글 모델링 뒷면

 

CC2652P USB 동글 모델링 앞면

TI사의 CC2652P 칩셋이 탑재된 EByte사의 E72-2G4M20S1E라는 모듈을 사용하였습니다.

AliExpress에서 $6~$7 정도에 구입 가능합니다.

https://www.aliexpress.com/item/1005001315624806.html

모듈의 세부  데이터시트는 아래 링크에서 다운로드 가능합니다.

https://www.ebyte.com/en/downpdf.aspx?id=1002 

 

 

하드웨어 구성은 Github에 Alex Egony 님이 공개하신 자료를 거의 그대로 이용하였습니다.

다만 제 수준에서 소량으로 구입하기 쉬운 부품으로 변경하고 단순화하여 회로도를 그려보았습니다.

CC2652P USB 동글 회로도

PCB 설계를 끝내고 Array 배치까지 마무리하고 PCB 기판을 주문하였습니다.

CC2652P USB 동글 PCB 기판 도면

기판은 중국 JLCPCB라는 업체에 주문하였고, SMT 작업도 함께 의뢰하였습니다.

PCB 제작은 2일, SMT는 3일 정도 소요되었습니다. 참고로 JLCPCB의 SMT 서비스는 단면만 지원하여 Bottom 면에 SMD 부품을 몰아서 배치하였습니다.

배송업체(SF Express)가 중국 심천에서 픽업을 하였으며 한국에는 6일 뒤 도착했습니다.

좀 느린것 같아 답답하니 다음에는 운송비가 좀 비싸더라도 2~3일 내에 도착하는 DHL을 선택해야 겠습니다.

 

PCB 최소 주문 수량이 5장이라서 USB 동글은 25개가 되었습니다. 이제 코디네이터 벼락부자입니다.

시간 나는대로 7월초까지 조립해서 지인들에게 나누어 줄 계획입니다.

뒷면 3장, 앞면 2장이 보이도록 펼쳐놓고 사진을 찍었습니다.

 

절단선(Mouse bite)를 중심으로 꺽어주었는데, 절단면이 심하게 울퉁불퉁합니다.

니퍼로 정리하고 줄로 다듬어 주었습니다. 이제 좀 봐줄만 합니다.

이제 지그비 모듈, USB 커넥터, 안테나(SMA) 커넥터를 땜질합니다.

Zigbee Module은 원래 PCB 패턴 안테나 용으로 만들어져서, SMA 커넥터를 부착하기 위해서는 칼로 패턴을 자르고 솔더레지스터도 긁어내야 합니다. 아주 귀찮은 작업입니다.

 

 

PC USB포트에 연결해서 시리얼 포트로 정상 인식되는지 보면서, USB 전류 측정 장치로 혹시 과전류가 흐르는지 확인했습니다.

펌웨어를 기록하기 전에는 약 100mA정도 먹는데, 코디네이터 펌웨어를 기록하면 10mA 남짓만 소모하네요. 

 

이제 펌에어를 기록할 차례입니다. 빵판 작업용을 사용하던 Dupond 케이블을 연결하고, 살짝 눌러준 상태로 기록합니다.  지우기/쓰기/검사까지 30초 정도 소요된것 같습니다.

CC2652P 펌웨어 기록용 JTAG 장비는 아래 링크에서 $16 정도에 구입하였습니다.

https://www.aliexpress.com/item/32833502027.html

처음에 한번만 JTAG으로 펌웨어를 기록하면, 그 뒤로는 USB 포트만으로도 펌웨어 업그레이가 가능합니다.

 

USB 동글 PCB 뒷면의 버튼을 누른채로 USB 포트에 꼽고 3~4초 뒤에 버튼을 놓으면 펌웨어 업데이트 모드로 진입합니다.

그 상태에서 아래 링크의 Python 스크립트로 JTAG 장비없이 간편하게 펌웨어 변경이 가능합니다.

https://github.com/egony/cc2652p_E72-2G4M20S1E/wiki/Flashing-EN

 

우분투 PC에서 업데이트 명령어를 실행한 결과입니다. 업데이트는 10초 미만에 끝난것 같습니다. 

리눅스 기반의 ARM SBC에서도 동작할듯 합니다.

$ python cc2538-bsl.py -p /dev/ttyUSB0 -ewv znp_CC2652P_E72_sdk_4_40_00_44_20210319.hex
Invoking bootloader by method 1 (default)
Opening port /dev/ttyUSB0, baud 500000
Reading data from znp_CC2652P_E72_sdk_4_40_00_44_20210319.hex
Your firmware looks like an Intel Hex file
Connecting to target...
CC1350 PG2.0 (7x7mm): 352KB Flash, 20KB SRAM, CCFG.BL_CONFIG at 0x00057FD8
Primary IEEE Address: 00:12:4B:00:22:91:D7:82
    Performing mass erase
Erasing all main bank flash sectors
    Erase done
Writing 360448 bytes starting at address 0x00000000
Write 104 bytes at 0x00057F988
    Write done                                
Verifying by comparing CRC32 calculations.
    Verified (match: 0xc366b93d)

 

USB 포트만으로 Egony님의 CC2652P_E72_20210319 버전과 Koenkk님(zigbee2mqtt add-on 제작자)의  CC1352P2_CC2652P_other_coordinator_20210120 버전을 번갈아 설치해 보면서 업그레이드 기능은 확인하였습니다.

최종적으로는 Egony님의 CC2652P_E72_20210319을 사용하고 있습니다만, 기능이나 성능상 차이점은 느끼지는 못했습니다.

 

기능에 문제가 없음을 확인하였으니 이제 케이스를 조립합니다.

안테나 커넥터와 간섭이 있어서 케이스 코너쪽을 살짝 갈아주었습니다.

윗뚜껑까지 덮으니 이제 물건 같아졌습니다. 케이스의 6개 돌기가 좀 뻑뻑해서 본드를 칠하지 않고도 단단하게 결합되었습니다.

케이스는 알리에서 $4.6에 구입했습니다. PCB를 설계할때 케이스 도면을 참고하여 외곽 라인을 그렸고요.

https://www.aliexpress.com/item/32764195967.html

 

안테나는 아래 링크에서 구입한 2.4Ghz용 범용 3dBi SMA 타입을 사용했습니다.

https://www.aliexpress.com/item/32974868251.html

 

 

여분으로 보유하고 있는 Zigbee 장치 몇개를 연결해 보았습니다. 페어링은 문제없었고 LQI값도 준수해 보입니다.

Raspberry Pi 4와 ODROID-XU4에서 테스트 해보았는데, 모두 잘 동작하네요.