Most Powerful Open Source ERP

Try to Reach 100M Bandwidth Goal with ORS

Try to Reach 100M Bandwidth Goal with ORS
  • Last Update:2024-04-10
  • Version:001
  • Language:en

Hardware description

The GC0802 chip has been soldered in place of an AD9361 on the SDR board of the ORS. This SDR board if open hardware and you can find the schematics/gerbers on our public git repository : https://lab.nexedi.com/nexedi/ors-hardware/-/tree/master/hardOrsTypeA.

The main points to remember about this board:

  • it already works fine with AD9361
  • the FPGA is a XC7A35T and we can easily recompile the firmware
  • for now the AD9361 is only supported in FDD mode even for TDD signals
  • the FPGA is connected to the PC through a PCIe driver

Our Goals

Goal 1

Make the GC0802 work in FDD mode in 10/20/40 MHz bandwidth (exactly the same as we do with AD9361 now). This goal shouldn't need to change the current FPGA firmware. After goal 1 is reached, we should evaluate the quality of radio signal sent by GC0802.

Goal 2

Make the GC0802 work in TDD mode. For this, we will need to change the FPGA firmware to send correctly the samples.

Goal 3 (ultimate goal)

Make the GC0802 work in TDD mode in 2x2 MIMO in 100MHz bandwidth.

Current status

For now, note that we are only working in FDD 20MHz bandwidth.

Initialization

We can initialize the GC0802 only for certain frequencies:

Now, I tried to use different tx_flo values between 3600MHz and 3800MHz, many values of tx_flo fail. Only very few of them succeed (I tested each 1 MHz):  

  • 3649 MHz
  • 3732 MHz
  • 3733 MHz
  • 3734 MHz
  • 3735 MHz
  • 3736 MHz
  • 3737 MHz
  • 3738 MHz
  • 3739 MHz
  • 3740 MHz
  • 3741 MHz
  • 3742 MHz
  • 3743 MHz
  • 3745 MHz

I'm using a xtal oscillator at 38.4MHz

here is a log of succeeding initialisation:

in detect_chip
detect_chip in line 1535 Success to detect transceiver device in spi bus
phy version: V2.8.25-2023_12_06
Val = 0x22.
chipInfo->low_freq = 200 MHz.
chipInfo->high_freq = 5000 MHz.
chipInfo->low_bandwidth = 12 KHz.
chipInfo->high_bandwidth = 100000 KHz.
chipInfo->tx_num = 2.
chipInfo->rx_num = 2.
chipInfo->chip_ver = 1.
rcal in line 1176 phy->r_cal result is 0x27
auxadc_cal in line 1240, auxadccal_slope is -9, and auxadccal_ordinate is -31
Val = 0x22.
chipInfo->low_freq = 200 MHz.
chipInfo->high_freq = 5000 MHz.
chipInfo->low_bandwidth = 12 KHz.
chipInfo->high_bandwidth = 100000 KHz.
chipInfo->tx_num = 2.
chipInfo->rx_num = 2.
chipInfo->chip_ver = 1.
[0x23 0x09 0x15] [0x02 0x09]
Enable Filter used Fir.
voltage[3]=515
voltage[3]=516
syspll lock failed ! flo=3741000000 voltage=91
voltage[3]=518
voltage[3]=517
syspll lock failed ! flo=3740000000 voltage=91
voltage[3]=517
voltage[3]=517
syspll lock failed ! flo=3740040000 voltage=91
voltage[3]=512
voltage[3]=512
syspll lock failed ! flo=3740040000 voltage=91
 band_dep_calibr_phase_of_switch_bandwidth in line 173, Cur Bandwidth is 3
Rx dc offst cal version=2 
voltage[3]=516
voltage[3]=517
[fn_tx_qec_lol_cal_rflp,152] sample_rate=15360000
voltage[3]=518
voltage[3]=518
voltage[3]=514
voltage[3]=513
voltage[3]=512
voltage[3]=512
voltage[3]=514
voltage[3]=512
voltage[3]=514
voltage[3]=515
voltage[3]=516
voltage[3]=516
voltage[3]=518
voltage[3]=518
voltage[3]=533
voltage[3]=532
voltage[3]=556
voltage[3]=557
voltage[3]=515
voltage[3]=515
voltage[3]=503
voltage[3]=503
voltage[3]=720
voltage[3]=720
voltage[3]=517
voltage[3]=517
voltage[3]=870
voltage[3]=869
Dir=1 lock failed ! flo=3744360000 voltage=869
voltage[3]=942
voltage[3]=941
Dir=1 lock failed ! flo=3744840000 voltage=941
voltage[3]=1003
voltage[3]=1003
Dir=1 lock failed ! flo=3745320000 voltage=1003
voltage[3]=514
voltage[3]=514
voltage[3]=518
voltage[3]=518
voltage[3]=532
voltage[3]=532
voltage[3]=556
voltage[3]=553
voltage[3]=515
voltage[3]=515
voltage[3]=652
voltage[3]=651
voltage[3]=516
voltage[3]=516
voltage[3]=794
voltage[3]=794
voltage[3]=868
voltage[3]=866
Dir=1 lock failed ! flo=3744360000 voltage=866
voltage[3]=941
voltage[3]=940
Dir=1 lock failed ! flo=3744840000 voltage=940
voltage[3]=513
voltage[3]=513
voltage[3]=1028
voltage[3]=1026
Dir=1 lock failed ! flo=3745800000 voltage=1026
[fn_rx_qec_cal,531] sample_rate=15360000
voltage[3]=516
voltage[3]=515
voltage[3]=518
voltage[3]=518
rx_dc_tracking_action_start in line 593 TRX_CHN1 task has been started.
rx_dc_tracking_action_start in line 593 TRX_CHN1 task has been started.
rx_dc_tracking_action_start in line 593 TRX_CHN1 task has been started.
rx_dc_tracking_action_start in line 593 TRX_CHN1 task has been started.
rx_dc_tracking_action_start in line 593 TRX_CHN1 task has been started.

here is a log of failing initialisation:

in detect_chip
detect_chip in line 1535 Success to detect transceiver device in spi bus
phy version: V2.8.25-2023_12_06
Val = 0x22.
chipInfo->low_freq = 200 MHz.
chipInfo->high_freq = 5000 MHz.
chipInfo->low_bandwidth = 12 KHz.
chipInfo->high_bandwidth = 100000 KHz.
chipInfo->tx_num = 2.
chipInfo->rx_num = 2.
chipInfo->chip_ver = 1.
rcal in line 1176 phy->r_cal result is 0x27
auxadc_cal in line 1240, auxadccal_slope is -9, and auxadccal_ordinate is -31
Val = 0x22.
chipInfo->low_freq = 200 MHz.
chipInfo->high_freq = 5000 MHz.
chipInfo->low_bandwidth = 12 KHz.
chipInfo->high_bandwidth = 100000 KHz.
chipInfo->tx_num = 2.
chipInfo->rx_num = 2.
chipInfo->chip_ver = 1.
[0x23 0x09 0x15] [0x02 0x09]
Enable Filter used Fir.
voltage[3]=851
voltage[3]=902
Dir=0 lock failed ! flo=3751000000 voltage=902
syspll lock failed ! flo=3751000000 voltage=91
voltage[3]=518
voltage[3]=519
syspll lock failed ! flo=3750000000 voltage=91
voltage[3]=509
voltage[3]=509
syspll lock failed ! flo=3750040000 voltage=91
voltage[3]=509
voltage[3]=509
syspll lock failed ! flo=3750040000 voltage=91
 band_dep_calibr_phase_of_switch_bandwidth in line 173, Cur Bandwidth is 3
Rx dc offst cal version=2 
voltage[3]=818
voltage[3]=920
Dir=0 lock failed ! flo=3751000000 voltage=920
[fn_tx_qec_lol_cal_rflp,152] sample_rate=15360000
voltage[3]=854
voltage[3]=819
voltage[3]=917
voltage[3]=975
Dir=0 lock failed ! flo=3749040000 voltage=975
voltage[3]=923
voltage[3]=948
Dir=0 lock failed ! flo=3749040000 voltage=948
voltage[3]=510
voltage[3]=511
Failed to fn_tx_qec_lol_cal_rflp in chn :0
tx qec lol cal fail!
run band_dep_calibr_phase_of_switch_bandwidth fail!

Note that the function main_init can finish for all frequencies if we put the flag "tx_qec_flag" to 0.

 

Outputting a simple signal (1 tone)

We can output a signal with only one frequency in it after initializing the chip (for example, at 3740MHz). But we see the frequency of this tone inverted compared to what we expected. For example, we expected to see the tone at 3745MHz, but we see it at 3735MHz: we see -5MHz instead of +5MHz.

Note1: if we invert I and Q samples, the simple signal is working.
Note2: the signal has been generated with the following C code:

    omega = 2 * M_PI * freq / sample_rate;

    phi = 0;
    for(i = 0; i < n_samples; i++) {
        a.re = cos(phi) * amp;
        a.im = sin(phi) * amp;
        fwrite(&a, 1, sizeof(a), f);
        phi += omega;
        if (phi >= M_PI)
            phi -= 2 * M_PI;
    }

 

Outputting a 4G signal in 20 MHz

We can play a 20MHz bandwidth 4G signal in loop. We see the power on all the 20MHz bandwidth. BUT for now we never could decode the signal with our 4G analyzer.

 

LVDS calibration

We tried to do the LVDS calibration by doing the writes below and using our PRBS checker in FPGA but for now, we couldn't make the calibration work (The PRBS checker never sees a valid signal).

// code to test the LVDS
reset_chip();
main_init();
spi_write(0x070, 1 << 2);
// Start loop of LVDS read check : the PRBS checker never see a good value.

 

Is this how we should do ? For info, the init seed of the PRBS checker in our FPGA is 0x0a54