Lab 11.13 - Stock shell versus runtime overlay RX-path comparison¶
Objective¶
Demonstrate, on the same live board and in one reproducible run, whether the
RX capture path already fails on the stock Linux shell or only after the course
overlay is hot-loaded through Linux fpga_manager.
This removes the remaining ambiguity from the earlier bring-up logs:
- if stock-shell
libiioandiio_readdevboth fail, the problem is broader than the course overlay; - if stock-shell capture works but post-reload capture fails while
axi_gpregstill answers, the blocker is specifically the runtime RX/DMAC path under the overlay.
Files¶
| Path | Purpose |
|---|---|
blocks/block_11_integrated_sdr_project/python/lab_11_13_stock_vs_runtime_rx_compare.py |
runs the stock-shell baseline, hot-loads the corrected overlay, repeats the same RX checks, and optionally reboots back to the stock shell |
docs/assets/lab113_stock_vs_runtime_rx_compare_live.json |
consolidated live hardware report for the comparison run |
What the script checks¶
For both the stock-shell stage and the post-reload stage, the helper records:
- compact AD9361 board state over SSH;
- IIO context summary from the host;
- one
axi_ad9361_adc_dmaregister snapshot before and after capture attempts; - one direct
libiiohost capture throughBuffer.refill(); - one
iio_readdevcapture through the same network IIO endpoint; - a short
dmesgtail.
For the runtime stage it also records:
- the uploaded
.bit.binpayload checksum; - Linux
fpga_managerstate and reload log tail; axi_gpregID/signature readback;- one burst-control run with
tx_valid_count,rx_valid_count, andreceived_bits.
Run¶
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
The default flow reboots the board back to the stock shell after the runtime checks so the lab bench is not left in the broken hot-reload state.
Live result on 2026-06-23¶
The comparison now establishes the following sequence:
- before any overlay reload, the stock shell supports both a direct host-side
libiioRX capture and a shortiio_readdevcapture; in the live report the stocklibiiopath returned16384complex samples andiio_readdevreturned65536bytes with no stderr text; - after the corrected
bridge_txrx_mux.wordswap.bit.binpayload is hot-loaded through Linuxfpga_manager,axi_gpregbecomes readable again and reports the knowntx_valid_count > 0,rx_valid_count = 0,received_bits = 0pattern; - after that same hot reload, both host-side capture paths fail on the RX side:
direct
libiio Buffer.refill()now fails withOSError: [Errno 110] host unreachable, andiio_readdevagain reports refill timeoutUnknown error (110); - the same comparison also shows that
cf-ad9361-dds-core-lpcchanges its visiblesync_start_enablestate fromarmon the stock shell todisarmafter the runtime hot load.
Practical consequence: the next bring-up step should focus on why the runtime overlay leaves the AD9361 RX DMA / refill path starved even though the stock shell baseline is healthy and the course gpreg block is visible.