Problem with RX and metadata

Discussions related to embedded firmware, driver, and user mode application software development
Post Reply
marius
Posts: 1
Joined: Thu May 30, 2024 12:16 pm

Problem with RX and metadata

Post by marius »

Hi All,

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)
Which is also accompanied with a -14 error on the RX submission which indicate the submission was late. How can this be avoided?

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.
Additional details:

Connected to USB 3.2 port have tried multiple other 3.0 and 3.1 ports.
Host PC: Ryzen 7950x, 64GB ram

Thanks
murazika
Posts: 1
Joined: Thu Aug 29, 2024 9:26 pm

Re: Problem with RX and metadata

Post by murazika »

What specific techniques or optimizations can be implemented to reduce the latency slope game of RX transfers compared to TX transfers, especially when using the SC16_Q11_META format, and how can these adjustments improve overall synchronization?
soiltrunnel
Posts: 2
Joined: Wed Apr 17, 2024 2:13 am

Re: Problem with RX and metadata

Post by soiltrunnel »

How to find the mistake coreball point rapidly. Could you elaborate? The study being done by Bladerf is quite amazing in the format SC16_Q11_META.
Last edited by soiltrunnel on Thu Jan 09, 2025 8:40 pm, edited 1 time in total.
isaachackett
Posts: 1
Joined: Tue Sep 17, 2024 7:26 pm

Re: Problem with RX and metadata

Post by isaachackett »

What methods work best for finding errors in the Bladerf research quickly? Can you provide me some details on how it works? Interesting and captivating is the SC16_Q11_META.coreball format.
Post Reply