요약
- UV-5R Mini는 상·하한 숫자 대신 ‘모델 타입’(Factory, FCC, CE, EuropeCEGT 등 9종)으로 송신 대역을 정합니다. 무전기 펌웨어가 모델 번호를 보고 송신을 제한합니다.
- 대만 ROWA가 배포한 제조사 도구 BF-5RMini_FreqRangeTool v1.0.0을 실행하지 않고 분석해, 저장 위치(공장 영역 0xF250)와 값, 9종의 송신·수신 범위표를 확인했습니다.
- RadioCloud는 이 도구와 같은 위치·값·순서로 모델 타입만 바꿔 쓰고, 공장 보정값은 읽은 그대로 둡니다. 실기기에서 EuropeCEGT로 송신이 묶이는 것을 확인했습니다.
모델 타입별 범위 (제조사 도구 원본 값)
송신 범위만 144–146 / 430–440 MHz로 묶고 수신은 그대로 두려면 EuropeCEGT, 수신까지 같은 범위로 좁히려면 CE를 고르면 됩니다. 실제 사용 후기에서도 ‘CE 또는 EuropeCEGT’를 권합니다.
| 번호 | 모델 타입 | 송신 허용 | 수신 |
|---|---|---|---|
| 0 | Factory | 136–174, 220–260, 400–480 | 136–174, 220–260, 350–390, 400–520 |
| 1 | FCC | 144–148, 220–260, 420–450 | 136–174, 220–260, 350–390, 400–520 |
| 2 | IC | 144–148, 430–450 | 136–174, 220–260, 350–390, 400–480 |
| 3 | CE | 144–146, 430–440 | 144–146, 430–440 (수신도 좁아짐) |
| 4 | IAMAmateur | 136–174, 400–480 | 136–174, 400–480 |
| 5 | SRRC | 144–148, 430–440 | 136–174, 220–260, 350–390, 400–520 |
| 6 | IAMCert | 136–174, 400–438 | 136–174, 400–438 |
| 7 | EuropeCEGT | 144–146, 430–440 | 136–174, 220–260, 350–390, 400–520 (수신은 넓게) |
| 8 | Philippines | 136–174, 400–480 | 136–174, 400–520 |
어떻게 저장되나
- 무전기 주소 0xF000–0xF280은 일반 클론(CHIRP)이 읽지 않는 공장 영역입니다. 제조사 도구는 같은 R/W 명령으로 이 영역을 암호화 없이 읽고 씁니다.
- 0xF200 블록 0x30–0x3E: VHF·UHF·220MHz의 송신 허용 플래그와 수신 범위. 범위는 ‘백 단위 1바이트 + 나머지 두 자리 BCD’(예: 01 36 = 136 MHz).
- 0xF240 블록 0x00–0x04: 350MHz 대역, 0x10–0x15: 모델 타입 번호를 16진수 6자리 문자열로 저장(EuropeCEGT = “000007”). 비어 있으면(0xFF) Factory로 취급.
- 도구의 쓰기 순서: 핸드셰이크 → 0xF000–0xF240 10블록 읽기 → 모델 번호만 변경 → 0xF000부터 10블록 순서대로 쓰기 → 종료 명령(0x45)으로 재시작. 수신 범위 등 나머지는 읽은 값 그대로입니다.
- 연결할 때 0x46 명령(제조사 코드 이름 CMD_GETBANDRANGE)의 응답이 바로 0xF231부터의 수신 범위입니다. 그래서 무전기가 보고하는 대역과 공장 영역 값을 비교해, 위치·형식 해석이 맞는지 쓰기 전에 확인할 수 있습니다.
RadioCloud의 처리
- 읽기: 일반 채널 영역과 함께 공장 영역 0xF000–0xF280을 읽고, 수신 범위가 0x46 응답과 일치할 때만 쓰기를 허용합니다.
- 쓰기: 제조사 도구와 같은 순서로, 같은 세션에서 10블록을 새로 읽어 백업·보고 대역과 일치하는지 확인한 뒤 모델 번호만 바꿔 0xF000부터 전부 쓰고 종료 명령을 보냅니다.
- 처음에는 0xF200·0xF240 두 블록만 썼는데, 무전기가 응답(ACK)만 하고 저장하지 않았습니다(2026-10-09 실기기). 플래시 영역이라 처음 블록부터 순서대로 받아야 저장되는 것으로 보여 도구와 같은 방식으로 바꿨습니다.
- 검증: 재시작 후 다시 읽어 모델 번호가 쓴 값과 같은지, 다른 바이트가 바뀌었는지, 보고 대역이 어떻게 바뀌었는지 보여줍니다. 송신이 실제로 막히는지는 직접 확인해야 합니다.
- 실기기 공장 영역에는 0xF140–0xF1C0이 0xF100과 같고 0xF240 뒷부분이 0xF200과 같은 흔적이 있습니다. 도구가 블록 버퍼를 재사용해 생기는 패턴으로, 이 기기가 이미 도구로 한 번 쓰였다는 뜻입니다.
- 백업 파일에는 일반 이미지와 함께 0xD000 블록과 공장 영역 전체가 메타데이터로 저장됩니다.
공장 보정값 (보기만 함)
제조사 도구는 모델 타입 외에도 공장 보정값을 다룹니다. RadioCloud는 이 값들을 해석해 보여주기만 하고 쓰지 않습니다. 잘못 바꾸면 출력·변조가 기준을 벗어날 수 있고, 기기마다 값이 달라 되돌릴 기준도 없기 때문입니다.
| 위치 | 내용 |
|---|---|
| 0xF000 / F040 / F080 | 송신 출력 보정표 High·Middle·Low — VHF 130–175 MHz(3 MHz 간격 16칸), 220 200–260 MHz(5 MHz 간격), UHF 400–520 MHz(10 MHz 간격) |
| 0xF0C0 / F100 | 스켈치 보정표 (행·열 대응 일부 미확인) |
| 0xF200 00–05 | 배터리 전압(ADC) 보정 6단계 |
| 0xF200 10–14 | 변조 한계, CTCSS 편차, DCS 편차, 음량(광대역·협대역) |
| 0xF200 16 | 수정 발진(XTAL) 번호 |
| 0xF200 1B–1E | 오디오 필터 RX 300·3K, TX 300·3K |
0xD000 실험 (틀린 추정, 기록용)
- 처음에는 같은 계열 BF-K6의 CHIRP 구조를 근거로 0xD000을 지역 모드로 추정했습니다.
- 실기기에서 0xD000 첫 바이트를 CE(3)로 써서 저장까지 확인했지만, 보고 대역과 송신 범위는 바뀌지 않았습니다. 이 블록은 모델 타입과 무관합니다.
- 이전 실험으로 값이 바뀐 기기는 화면에서 0으로 되돌릴 수 있습니다.
분석 방법과 자료
- ROWA 제품 페이지의 FT-5Rmini-2.rar 안 BF-5RMini_EnFreqRangeTool_Setup_v1.0.0.exe에서 innoextract로 BF-5RMini_FreqRangeTool.exe(.NET)를 꺼내, 실행하지 않고 IL 코드를 디스어셈블했습니다.
- 같은 사이트의 FT-5Rmini.rar(일반 CPS v1.0.9)도 분석해, 핸드셰이크와 0x46 응답 해석 방식이 같음을 확인했습니다.
- 제조사 실행 파일은 RadioCloud에 포함하거나 재배포하지 않습니다.
기술 정보
- 통신: 115,200 baud(무응답 시 38,400), 식별 ‘PROGRAMCOLORPROU’ → 0x06, 0x46(대역) → 16바이트, 0x4D(모델) → 모델 표기, ‘SEND’ 암호 협상.
- 블록: 읽기 52 주소(2) 40 → 응답 52 주소 40 + 0x40바이트, 쓰기 57 주소(2) 40 + 0x40바이트 → 06. 일반 영역은 ‘CO 7’ XOR, 공장 영역은 암호화 없음.
- 제조사 명령 상수: 01 핸드셰이크, 02 모델 타입 조회, 03 비밀번호 확인, 46 대역 조회, 52 읽기, 57 쓰기, 45 종료, 55 부트 모드, 10–13 플래시(펌웨어) 관련 — 플래시 명령은 쓰지 않습니다.
