Документация обновлена — записал результат для отчёта:
§9 — статусы техдолга: #1,#2,#3,#4,#5,#7 → ✅ исправлено; #6 → ⚙️ частично (детектор seq есть, ARQ нет). §10 — дорожная карта: этап 2 закрыт §12 (новый раздел «Журнал ввода в строй») — таблица результатов BIST-loopback (2 мс: 76/100, md5 ✗; 20 мс: 100/100, md5 ✅) с выводом, что пайплайн исправен, а потери на 2 мс — CPU-contention одной платы
This commit is contained in:
59
README.md
59
README.md
@@ -230,19 +230,21 @@ ssh root@192.168.2.1 '/tmp/ofdm_bench 1.92'
|
||||
|
||||
| # | Проблема | Статус |
|
||||
|---|---|---|
|
||||
| 1 | Заголовок 12 Б vs 8 Б по умолчанию у liquid (раздел 7) | **чинить до передачи файлов** |
|
||||
| 2 | `recovered[4096]` в receiver при лимите nblocks≤100 (22 КБ) → переполнение стека на битом заголовке. Лимит должен быть `4096/RS_DATA = 18` | чинить |
|
||||
| 3 | `fec_decode()` liquid не сообщает о неисправимых RS-блоках → счётчик `rs_saved` фиктивен. Достоверный критерий — только CRC/md5 поверх данных | знать; добавить CRC после декода |
|
||||
| 4 | Внешний NCO-CFO в receiver: `set_phase(0)` на границах буферов рвёт фазу; ofdmflexframesync и так компенсирует CFO сам | убрать или обосновать замером |
|
||||
| 5 | TX пушит весь буфер 16384 сэмпла при кадре ~10300 → ~35% эфира впустую + паузы `-p` | оптимизация: push ровно idx сэмплов |
|
||||
| 6 | Нет ARQ: потерянный кадр = молчаливая дыра в файле. seq в заголовке есть, но RX его игнорирует | минимум: детектор пропусков seq с логом |
|
||||
| 7 | Файл `reciever.c` → переименовать в `receiver.c` (make его ждёт) | тривиально |
|
||||
| 1 | Заголовок 12 Б vs 8 Б по умолчанию у liquid (раздел 7) | ✅ исправлено: `set_header_len(12)` на обеих сторонах |
|
||||
| 2 | `recovered[4096]` в receiver при лимите nblocks≤100 (22 КБ) → переполнение стека на битом заголовке. Лимит должен быть `4096/RS_DATA = 18` | ✅ исправлено: лимит `nblocks ≤ 4096/RS_DATA = 18` |
|
||||
| 3 | `fec_decode()` liquid не сообщает о неисправимых RS-блоках → счётчик `rs_saved` фиктивен. Достоверный критерий — только CRC/md5 поверх данных | ✅ исправлено: CRC32 поверх данных до RS на TX, сверка после декода на RX; `rs_saved`/`rs_fail` достоверны (подтверждено loopback'ом, §12.2) |
|
||||
| 4 | Внешний NCO-CFO в receiver: `set_phase(0)` на границах буферов рвёт фазу; ofdmflexframesync и так компенсирует CFO сам | ✅ исправлено: внешний NCO удалён, CFO оставлен только как телеметрия |
|
||||
| 5 | TX пушит весь буфер 16384 сэмпла при кадре ~10300 → ~35% эфира впустую + паузы `-p` | ✅ исправлено: `iio_buffer_push_partial(idx)` + дренаж хвоста DMA перед закрытием |
|
||||
| 6 | Нет ARQ: потерянный кадр = молчаливая дыра в файле. seq в заголовке есть, но RX его игнорирует | ⚙️ частично: добавлен детектор пропусков seq (лог `[ПОТЕРЯ]` + счётчик «Потери seq»); ARQ ещё нет |
|
||||
| 7 | Файл `reciever.c` → переименовать в `receiver.c` (make его ждёт) | ✅ исправлено |
|
||||
|
||||
## 10. Дорожная карта
|
||||
|
||||
1. ✅ Бенчмарк CPU на ARM Pluto → выбран rate 1.92 MSPS
|
||||
2. Перенос TX/RX на Pluto (`local:`), фиксы #1, #2, #7
|
||||
3. Файл через кабель + аттенюатор, md5 на 1 и 10 МБ
|
||||
2. ✅ Перенос TX/RX на Pluto (`local:`), фиксы техдолга #1–#7 (см. §9)
|
||||
3. ⚙️ **текущий этап** — файл через эфир (OTA), md5 на 1 и 10 МБ.
|
||||
Ввод в строй ведётся строго OTA; кабельный этап осознанно пропущен.
|
||||
✅ 2026-07-14: цифровой BIST-loopback подтвердил DSP-тракт (§12.2), далее двухплатный OTA
|
||||
4. Антенны на столе: замер скорости, PER, счётчик потерянных seq (#6)
|
||||
5. FDD 868/915 двусторонняя + меры из docs/NOTES.md
|
||||
6. UDP-туннель поверх линка; затем web-настройка (libmicrohttpd)
|
||||
@@ -259,5 +261,42 @@ ssh root@192.168.2.1 '/tmp/ofdm_bench 1.92'
|
||||
| Работает на малом трафике, падает под нагрузкой | CPU-лимит: rate > 1.92 MSPS? второй процесс на ядре 0? |
|
||||
| Loopback ок, дуплекс в эфире нет | самоглушение FDD (раздел 6) |
|
||||
|
||||
## 12. Журнал ввода в строй (commissioning)
|
||||
|
||||
Ввод в строй ведётся строго **OTA** (антенны с самого начала). Кабельный
|
||||
этап регламента отладки (§5.5) осознанно пропущен — фиксируется как отклонение.
|
||||
|
||||
### 12.1 Программные фиксы перед первым включением (2026-07-14)
|
||||
|
||||
Перед первой передачей закрыты DSP-техдолги, способные испортить приём даже
|
||||
при идеальном канале (детали и статусы — §9): удалён вредный внешний
|
||||
NCO-CFO-контур (#4), добавлена достоверная проверка целостности CRC32 поверх
|
||||
RS (#3), детектор пропусков seq (#6); TX переведён на partial-push + дренаж
|
||||
хвоста DMA (#5). PHY-параметры не менялись → бенчмарк §2 остаётся в силе.
|
||||
|
||||
### 12.2 Цифровой BIST-loopback (2026-07-14) — DSP-тракт без эфира
|
||||
|
||||
Цель: изолировать код/протокол от RF **до** первого выхода в эфир. Внутренний
|
||||
цифровой шлейф AD9361 (`/sys/kernel/debug/iio/iio:device0/loopback = 1`), TX и
|
||||
RX на одной плате (192.168.2.1), файл 100 КБ случайных данных, режим `-c rs8`.
|
||||
|
||||
| Пауза TX (`-p`) | Поймано/послано | RS испр | RS битых | Потери seq | md5 | EVM |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 2 000 мкс | 76/100 | 2 | 17 | 24 | ✗ (дыры) | −56 дБ |
|
||||
| 20 000 мкс | 100/100 | 0 | 0 | 0 | ✅ совпал | −60 дБ |
|
||||
|
||||
**Вывод: DSP-пайплайн полностью исправен** — при разгруженном RX 100% кадров
|
||||
приняты байт-в-байт, md5 совпал. Потери на паузе 2 мс — не баг фрейминга, а
|
||||
**конкуренция за CPU: TX+RX+iiod на одной 2-ядерной плате**; RX не успевает за
|
||||
эфиром и kernel роняет сэмплы (согласуется с бюджетом 1.22× из §2). В штатном
|
||||
двухплатном OTA у RX выделенное ядро — ожидается кратное снижение потерь.
|
||||
Проверка CRC-поверх-RS подтверждена в бою: 17 неисправимых кадров корректно
|
||||
отброшены (не ушли мусором в файл), 2 кадра реально восстановлены RS — счётчики
|
||||
`rs_saved`/`rs_fail` теперь достоверны (техдолг #3 закрыт по факту).
|
||||
|
||||
Следующий шаг: двухплатный OTA (192.168.2.1 → 192.168.3.1) — энергетика/несущая
|
||||
(RSSI при TX-on/off), затем первые кадры без FEC, свип TX gain, md5 на 1 и 10 МБ.
|
||||
|
||||
---
|
||||
*Замеры и решения актуальны на 2026-07-10, прошивка v0.38, liquid-dsp 1.8.0.*
|
||||
*Ввод в строй: 2026-07-14. Замеры CPU и базовые решения — 2026-07-10.
|
||||
Прошивка v0.38, liquid-dsp 1.8.0.*
|
||||
Reference in New Issue
Block a user