Skip to content

Latest commit

 

History

History
70 lines (61 loc) · 4.48 KB

File metadata and controls

70 lines (61 loc) · 4.48 KB

Radex Obsidian — заметки по реверсу serial-протокола

Собрано вживую 2026-08-20 с реального прибора (серийник 0425000100218, прошивка v1.21).

Транспорт

  • USB VID/PID: ABBA:A006 (OBSIDIAN). Другие модели: A008 = Obsidian G Pro, A00A = Obsidian2, A011 = RADEX ONE.
  • Мост: Silicon Labs CP210x (silabser.sys), виртуальный COM-порт.
  • 115200 8N1, поднять DTR и RTS.
  • Строго request→response. Сам прибор ничего не шлёт. Уходит в USB selective suspend; будится обычным запросом после переподключения.
  • То же самое семейство кадров туннелируется по BLE через Nordic UART Service (6E4000xx).

Кадр

offset  size  поле
0       1     0x7b запрос / 0x7a ответ
1       1     0xff  (константа)
2       1     cmd   (0x20 = read register)
3       1     flags (0x80 в ответе)
4       2     len   payload, LE16
6       4     counter, LE32 (эхо возвращается в ответе)
10      2     header checksum, LE16
12      len   payload
12+len  2     payload checksum, LE16

Контрольная сумма — internet checksum (one's complement)

Сумма всех 16-битных LE-слов блока (с обнулённым полем cksum) + сам cksum == 0xFFFF. cksum = 0xFFFF - ones_complement_sum(block_with_zero_cksum). Отдельно для заголовка (12 байт) и отдельно для payload (data + 2 нулевых байта). Проверено на всех захваченных кадрах — сходится побитно. (В python-radexreader это же выглядело как «магические ключи» keyA/keyC: keyA+keyC=0x5e — просто чексумма.)

Команда 0x20 — read register

payload запроса: <HH> = (addr: LE16, count: LE16). count=12 — рабочее значение для большинства регистров. Ответ: payload = 8-байтовый префикс [addr:LE16][0000][len:LE16][0000] + данные.

Карта регистров (директория в 0x0000)

addr что
0x0000 директория: список 16-битных адресов доступных регистров
0x0800 live-метрики (см. ниже), 128B
0x0801 конфиг: пороги/калибровка (float32)
0x080d история/тренд: 3×unix-timestamp + массив float32
0x0821 таблица (в основном 0xFF — пусто)
0x0825 одиночный float + поля
0x0870 флаги/режим
0x0872 паспорт прибора (ASCII, см. ниже)

0x0872 — паспорт (ASCII, поля через 0x00)

QUARTA-RAD \0 Obsidian \0\0\0 0425000100218 6 \0\0 v1.21 \0\0 01 \0\0 643 \0\0 → производитель, модель, серийный номер, версия прошивки.

0x0800 — live-метрики (payload 128B, данные с offset 8; всё float32 LE, если не указано)

Подтверждено по временному ряду (какие offset меняются) и сверено с BLE-характеристиками FE6417xx из BLE-реверса.

offset (в data) значение-пример вероятный смысл
8 0.128 МЭД (DER), µSv/h — совпадает с фоном и BLE DER
12 0.013 погрешность МЭД
20 0.70 ?
24 234.68 ? (почти константа, калибровка/счётчик)
60 9→16 CPS-подобное (растёт)
64 12.33 ?
68 700→1489 накопительный счётчик импульсов
76 12.2 CPS — совпадает с BLE CPS
84 917→898 ?
100 26.54 температура, °C (константа в покое)
108 u32 1787229279 часы прибора, unix time (= 2026-08-20)
113 22 0c 14 08 1a 04 дата/время по полям (доп. формат)

Точную привязку beta/dose/battery доведём при TDD с живым захватом (BLE-реверс даёт семантику: DER, DER_dev, BETA, BETA_dev, CPS, CPS_dev, DOSE, BATTERY u8, MALFUNCTION u8, USER u8).