Перейти к содержанию

Лабораторная 11.13 — Сравнение RX-тракта: stock shell и runtime overlay

Цель

Показать на одной и той же живой плате и в одном воспроизводимом прогоне, отказывает ли RX-тракт захвата уже в стоковом shell Linux или только после горячей загрузки overlay курса через Linux fpga_manager.

Это убирает оставшуюся неоднозначность из прежних журналов запуска:

  1. если в стоковом shell отказывают и libiio, и iio_readdev, проблема шире, чем overlay курса;
  2. если захват в стоковом 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 через Linux fpga_manager axi_gpreg снова читается и сообщает известную картину tx_valid_count > 0, rx_valid_count = 0, received_bits = 0;
  • после той же горячей перезагрузки оба пути захвата на стороне хоста отказывают на стороне RX: прямой libiio Buffer.refill() теперь падает с OSError: [Errno 110] host unreachable, а iio_readdev снова сообщает таймаут refill Unknown error (110);
  • то же сравнение показывает, что cf-ad9361-dds-core-lpc меняет видимое состояние sync_start_enable с arm в стоковом shell на disarm после runtime-горячей загрузки.

Практический вывод: следующий шаг запуска должен сосредоточиться на том, почему runtime-overlay оставляет тракт RX DMA / refill AD9361 без данных, хотя базовая линия стокового shell исправна, а блок gpreg курса виден.