Лабораторная 11.13 — Сравнение RX-тракта: stock shell и runtime overlay¶
Цель¶
Показать на одной и той же живой плате и в одном воспроизводимом прогоне, отказывает ли RX-тракт захвата уже в стоковом shell Linux или только после горячей загрузки overlay курса через Linux fpga_manager.
Это убирает оставшуюся неоднозначность из прежних журналов запуска:
- если в стоковом shell отказывают и
libiio, иiio_readdev, проблема шире, чем overlay курса; - если захват в стоковом shell работает, а после перезагрузки отказывает, тогда как
axi_gpregпо-прежнему отвечает, блокировщик: именно runtime-тракт RX/DMAC под overlay.
Файлы¶
| Путь | Назначение |
|---|---|
blocks/block_11_integrated_sdr_project/python/lab_11_13_stock_vs_runtime_rx_compare.py |
выполняет базовую линию стокового shell, горячо загружает исправленный overlay, повторяет те же проверки RX и при необходимости перезагружает обратно в стоковый shell |
docs/assets/lab113_stock_vs_runtime_rx_compare_live.json |
сводный живой аппаратный отчёт прогона сравнения |
Что проверяет скрипт¶
И на этапе стокового shell, и на этапе после перезагрузки помощник записывает:
- компактное состояние платы AD9361 по SSH;
- сводку контекста IIO с хоста;
- один снимок регистров
axi_ad9361_adc_dmaдо и после попыток захвата; - один прямой захват
libiioна хосте черезBuffer.refill(); - один захват
iio_readdevчерез тот же сетевой endpoint IIO; - короткий хвост
dmesg.
Для runtime-этапа он также записывает:
- контрольную сумму загруженной нагрузки
.bit.bin; - состояние Linux
fpga_managerи хвост журнала перезагрузки; - считывание ID/сигнатуры
axi_gpreg; - один прогон управления пакетом со счётчиками
tx_valid_count,rx_valid_countиreceived_bits.
Запуск¶
python blocks/block_11_integrated_sdr_project/python/lab_11_13_stock_vs_runtime_rx_compare.py \
--json-out docs/assets/lab113_stock_vs_runtime_rx_compare_live.json
Поток по умолчанию перезагружает плату обратно в стоковый shell после runtime-проверок, чтобы стенд не остался в сломанном состоянии горячей загрузки.
Живой результат 2026-06-23¶
Сравнение теперь устанавливает такую последовательность:
- до любой перезагрузки overlay стоковый shell поддерживает и прямой захват RX
libiioна хосте, и короткий захватiio_readdev; в живом отчёте стоковый путьlibiioвернул16384комплексных отсчёта, аiio_readdev:65536байт без текста в stderr; - после горячей загрузки исправленной нагрузки
bridge_txrx_mux.wordswap.bit.binчерез Linuxfpga_manageraxi_gpregснова читается и сообщает известную картинуtx_valid_count > 0,rx_valid_count = 0,received_bits = 0; - после той же горячей перезагрузки оба пути захвата на стороне хоста отказывают на стороне RX: прямой
libiio Buffer.refill()теперь падает сOSError: [Errno 110] host unreachable, аiio_readdevснова сообщает таймаут refillUnknown error (110); - то же сравнение показывает, что
cf-ad9361-dds-core-lpcменяет видимое состояниеsync_start_enableсarmв стоковом shell наdisarmпосле runtime-горячей загрузки.
Практический вывод: следующий шаг запуска должен сосредоточиться на том, почему runtime-overlay оставляет тракт RX DMA / refill AD9361 без данных, хотя базовая линия стокового shell исправна, а блок gpreg курса виден.