I am trying to understand some problems we are having with the application we are developing.
Basically we are trying to get the RX and TX to continuously run without dropping samples and to start sampling at the same time
How we have it running now is start a TX and RX request in separate threads at the same timestamp (using the SC16_Q11_META format) then schedule the next TX/RX transfer to start at the very next timestamp after the previous transfer finishes. Is this the correct approach?
A problem that I have noticed is that the RX transfers take much longer to finish than the TX transfers, after a while I start seeing errors like this:
Code: Select all
[DEBUG @ host/libraries/libbladeRF/src/streaming/sync.c:654] Current timestamp is 36111342, target=36103662 (user=36103662)
Running the same code but without using metadata (SC16_Q11 format) does not result in any buffer overruns, so somehow the metadata seem to be causing problems yet we need it to ensure the TX/RX are being performed at the same time. Any suggestions?
Also, is there a way to start a continuous RX stream like how we can start a continuous TX burst transfer then just keep appending to it?
Here is the startup log for reference:
Code: Select all
[VERBOSE @ host/libraries/libbladeRF/src/bladerf.c:1749] USB reset on open enabled
[DEBUG @ host/libraries/libbladeRF/src/devinfo.c:278] Instance: 1
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/libusb.c:642] Using libusb version: 1.0.27.11882
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/libusb.c:519] Found a bladeRF (idx=5)
[DEBUG @ host/libraries/libbladeRF/src/backend/usb/libusb.c:189] Bus 010 Device 018: Nuand bladeRF 2.0, serial a301a493f1604f7f809e57e9b9cc8120
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/libusb.c:554] Devinfo doesn't match - skipping(instance=0, serial=1, bus/addr=1
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/libusb.c:519] Found a bladeRF (idx=9)
[DEBUG @ host/libraries/libbladeRF/src/backend/usb/libusb.c:189] Bus 006 Device 018: Nuand bladeRF 2.0, serial bca7d565b87f4db39894243017df2253
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/libusb.c:581] USB port reset succeeded for bladeRF bca7d565b87f4db39894243017df2253
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 0
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:293] Read Firmware version: 2.4.0-git-a3d5c55f
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:299] Capability mask before FPGA load: 0x0000007f00000000
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:401] Found SPI flash manufacturer: WINBOND.
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:404] Found SPI flash device: W25Q32JV (32 Mbit).
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:452] SPI flash total size = 32 Mbit
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:453] SPI flash page size = 256 bytes
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:454] SPI flash erase block size = 65536 bytes
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:455] SPI flash number of pages = 16384
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf1/flash.c:456] SPI flash number of erase blocks = 64 pages
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 2
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 1
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 1
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:125] Read FPGA version: 0.15.3
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:131] Capability mask after FPGA load: 0x000000ff00001abc
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:586] nios_ina219_write: Wrote 0x8000 to addr 0x00
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:573] nios_ina219_read: Read 0x399f from addr 0x00
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:586] nios_ina219_write: Wrote 0x019f to addr 0x00
[DEBUG @ host/libraries/libbladeRF/src/driver/ina219.c:70] Configuration register: 0x019f
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:586] nios_ina219_write: Wrote 0xa000 to addr 0x05
[DEBUG @ host/libraries/libbladeRF/src/driver/ina219.c:82] Calibration register: 0xa000
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/common.c:281] Default tuning mode: Host
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2338] bladerf2_set_tuning_mode: New tuning mode: Host
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2388] bladerf2_set_tuning_mode: Initializing Host RFIC control
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/rfic_host.c:85] _rfic_host_initialize: initializating
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/rfic_host.c:106] _rfic_host_initialize: ad9361 initialized @ 0x561aada721b0
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/rfic_host.c:154] _rfic_host_initialize: initialization complete
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 2
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/usb.c:106] Changing to USB alt setting 1
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:817] nios_ad56x1_vctcxo_trim_dac_write: Wrote 0x1eeb
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:805] nios_ad56x1_vctcxo_trim_dac_read: Read 0x1eeb
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2620] trim DAC is enabled
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:805] nios_ad56x1_vctcxo_trim_dac_read: Read 0x1eeb
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2653] saving current trim DAC value: 0x1eeb
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:817] nios_ad56x1_vctcxo_trim_dac_write: Wrote 0xc000
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:440] nios_config_write: Wrote 0x00000801
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:843] nios_adf400x_write: Wrote 0x00000064 to addr 0x00
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:843] nios_adf400x_write: Wrote 0x00006000 to addr 0x01
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:843] nios_adf400x_write: Wrote 0x001f8090 to addr 0x02
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000801
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:440] nios_config_write: Wrote 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:805] nios_ad56x1_vctcxo_trim_dac_read: Read 0xc000
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2620] trim DAC is disabled
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:805] nios_ad56x1_vctcxo_trim_dac_read: Read 0xc000
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:2657] restoring old trim DAC value: 0x1eeb
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:817] nios_ad56x1_vctcxo_trim_dac_write: Wrote 0x1eeb
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:207] _bladerf2_initialize: complete
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1175] Clearing RX1 retune queue.
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1197] RX1 operation duration: 0
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1175] Clearing TX1 retune queue.
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1197] TX1 operation duration: 0
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:440] nios_config_write: Wrote 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00000001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:440] nios_config_write: Wrote 0x00010001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:429] nios_config_read: Read 0x00010001
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:440] nios_config_write: Wrote 0x00010001
[DEBUG @ host/libraries/libbladeRF/src/board/bladerf2/bladerf2.c:1086] bladerf2_set_sample_rate: enabling 4x decimation/interpolation filters
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/common.c:351] check_total_sample_rate: active_channels=0, rate_accum=0, maximum=80000000
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/common.c:351] check_total_sample_rate: active_channels=0, rate_accum=0, maximum=80000000
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] TX1 trigger read value 0x08
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] TX1 trigger read value 0x08
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] RX1 trigger read value 0x08
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] RX1 trigger read value 0x08
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1289] TX1 trigger write value 0x05
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] TX1 trigger read value 0x0d
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1289] RX1 trigger write value 0x01
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] RX1 trigger read value 0x09
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1289] TX1 trigger write value 0x07
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] TX1 trigger read value 0x07
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/common.c:351] check_total_sample_rate: active_channels=1, rate_accum=1920000, maximum=80000000
[VERBOSE @ host/libraries/libbladeRF/src/board/bladerf2/common.c:351] check_total_sample_rate: active_channels=2, rate_accum=3840000, maximum=80000000
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:501] nios_get_timestamp: Read TX timestamp: 11555
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1289] TX1 trigger write value 0x07
[VERBOSE @ host/libraries/libbladeRF/src/backend/usb/nios_access.c:1249] TX1 trigger read value 0x07
[DEBUG @ host/libraries/libbladeRF/src/streaming/sync.c:464] sync_rx: Worker is idle. Going to reset buf mgmt.
[DEBUG @ host/libraries/libbladeRF/src/streaming/sync.c:485] sync_rx: Reset buf_mgmt consumer index
[DEBUG @ host/libraries/libbladeRF/src/streaming/sync.c:500] sync_rx: Worker is now running.
[DEBUG @ host/libraries/libbladeRF/src/streaming/sync.c:1030] sync_tx: Worker is now running.
[DEBUG @ host/libraries/libbladeRF/src/backend/usb/libusb.c:1426] Non-blocking buffer submission requested, but no transfers are currently available.
Connected to USB 3.2 port have tried multiple other 3.0 and 3.1 ports.
Host PC: Ryzen 7950x, 64GB ram
Thanks