Главное: - Опознан DMR-чип: FM100B = Sicomm SCT3258TD. Датащит Packet Interface (126 стр) в docs/. Открывает калибровку/AMBE/вокодер по документации. Родня: UV-4R, китайские клоны. Реализовано: - Приём Talker Alias (cmd 0x60) — позывной крупно на экране (build_ta.py) - Интерактивный агент — управление FM100B по COM без перешивки (build_agent.py + agent.py) - Полная карта команд FM100B с живой рации (fm100b-commands.md) - Работа с SPI: чтение/запись/восстановление codeplug и калибровки (spi_read/spi_wr/spi_restore) - Конструктор дисплея + редактор прошивки (tools/display-editor) Документация: - docs/SCT3258_packet_interface.txt/.pdf — спека DMR-чипа - docs/fm100b-commands.md — карта команд - docs/dmr-tx-recovery.md — диагноз/восстановление DMR-передачи Инструменты: flash_ps.py (прошивка через WSL/powershell), sniff.py (снифер кадров), hotspot_rxoffset_sweep.py, apply_patch.py, build_* сборщики. Важно: DMR TX-калибровка сбита в экспериментах со SET-командами модулю; восстановление через offset-компенсацию / .updat Radtel / калибровку по прибору (docs/dmr-tx-recovery.md).
58 строки
3.2 KiB
Markdown
58 строки
3.2 KiB
Markdown
# FM100B — карта команд (снята интерактивным агентом)
|
|
|
|
Снято `tools/agent.py` на прошивке `rt4d_agent.bin` — запрос каждой команды пустым
|
|
payload (`68 cmd 01 01 CK CK 00 00 10`), ответ модуля через снифер. Рация V1.2.0.32.
|
|
|
|
`status` (байт [3] ответа): **0x00** = OK/есть данные, **0x01** = не поддержано или нужен payload.
|
|
|
|
## Отвечают данными (status 0x00, len>0)
|
|
|
|
| cmd | len | ответ | смысл |
|
|
|---|---|---|---|
|
|
| `0x04` | 1 | `03` | параметр |
|
|
| `0x24` | 4 | `01 00 40 01` | возможности/идентификатор модуля |
|
|
| `0x25` | 4 | `01 02 00 32` | **версия прошивки = V1.2.0.32** |
|
|
| `0x27` | 1 | `00` | статус |
|
|
| `0x28` | 1 | `00` | статус |
|
|
| `0x34` | 2 | `00 00` | параметр (2 байта) |
|
|
| **`0x35`** | 35 | `10 02 21 6a df 62 e1 4f 53 90 38 …` | **таблица** (записи с сигнатурой `e1 4f 53 90`) |
|
|
| `0x36` | 1 | `00` | статус |
|
|
| `0x3B` | 1 | `01` | флаг |
|
|
| **`0x43`** | 33 | `10 01 01 70 65 57 5b e1 4f 53 90 31 … 32 …` | **таблица**: две записи `…e1 4f 53 90` + индекс 1/2 (контакты/RX-группы?) |
|
|
| `0x46` | 1 | `00` | статус |
|
|
| `0x85` | 1 | `00` | статус |
|
|
|
|
## Приняты без данных (status 0x00, len 0) — действия/OK
|
|
|
|
`0x01 0x03 0x1A 0x40 0x4B 0x65 0x66`
|
|
(`0x66` = девиация ш/у полосы по changelog; `0x65` рядом — вероятно связанное)
|
|
|
|
## Не поддержано / нужен payload (status 0x01)
|
|
|
|
`0x0D 0x0E 0x10-0x19 0x22 0x2B 0x2C 0x2D 0x30 0x37 0x3A 0x3C 0x3D 0x3F 0x41 0x44 0x45
|
|
0x47 0x4A 0x4E 0x4F 0x50 0x51 0x52 0x54 0x56 0x58 0x5C 0x5D 0x5E 0x60 0x61 0x63 0x64
|
|
0x67 0x83 0x84 0x86 0x87`
|
|
(это SET/enable-команды — на пустой запрос отвечают отказом; проверять с payload)
|
|
|
|
## Не опрошены (опасные SET — меняют состояние)
|
|
|
|
`0x05` конфиг канала · `0x06` вызов · `0x07` данные канала · `0x0A` PTT ·
|
|
`0x49` свой DMR ID · `0x62` параметры вызова · `0x81/0x82` SMS · `0x2A 0x42 0x48
|
|
0x4C 0x4D 0x55 0x57` · **`0x3E` прошивка модуля — НЕ СЛАТЬ**
|
|
|
|
## Известны из снифера входящего вызова (FM100B → MCU)
|
|
|
|
| cmd | смысл |
|
|
|---|---|
|
|
| `0x62` | параметры вызова (src/dst/TG) |
|
|
| `0x06` | setup (sub 0x60) / end (sub 0x6f) |
|
|
| `0x60` | **Talker Alias (позывной)** — см. docs/talker-alias |
|
|
| `0x59` | активность приёма (гейт звука PA14) |
|
|
| `0x05` | конфигурация канала |
|
|
|
|
## Открыто
|
|
|
|
- **AMBE-выдача** (для модема): по умолчанию нет. Кандидаты — SET-команды со `status 0x01`,
|
|
проверять с payload `enable` + активный вызов + наблюдение потока через агента.
|
|
- Таблицы `0x35`/`0x43`: расшифровать формат записи (сигнатура `e1 4f 53 90`).
|