diff --git a/VarTable.py b/VarTable.py new file mode 100644 index 0000000000000000000000000000000000000000..3f3ff2fd8ecb0cf46b65668517316844da3b1711 --- /dev/null +++ b/VarTable.py @@ -0,0 +1,34 @@ +import yamlconfig as yc + +RW={'ro':'_R','rw':'_R/_RW','variable':'_RW'} + +Y=yc.yamlconfig('RECVTR') +sep='\t' +#Sort alphabetically +names=[(v['name']).upper() for v in Y.getvars()] +SI=sorted(range(len(names)), key=lambda k: names[k]) +print("Name"+sep+"Dimension"+sep+"Type"+sep+"R/W"+sep+"Mask"+sep+"Monitored"+sep+"Description") +for i0 in SI: + v=Y.getvar1(i0) +#for v in Y.getvars(): + if v.get("debug",False): continue; + S=v['name']+sep + S+=str(v['dim'])+sep + S+=str(v['dtype'])+sep + S+=RW[v['rw']]+sep + S+=v.get('mask','')+sep + S+=str(v.get('monitor',''))+sep + S+=str(v.get('description',''))+sep + print(S) +print() +print("Name"+sep+"Mask"+sep+"Description") +for v in Y.conf['methods']: + if v.get("debug",False): continue; + S=v['name']+sep +# S+=str(v['dim'])+sep +# S+=str(v['dtype'])+sep +# S+=RW[v['rw']]+sep + S+=v.get('mask','')+sep +# S+=str(v.get('monitor',''))+sep + S+=str(v.get('description',''))+sep + print(S) diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aadfa01476486a62afe442dfa8d757b944e1eb6f --- /dev/null +++ b/config/RECVTR.yaml @@ -0,0 +1,739 @@ +version: "1.0" +description: "1234" + +drivers: + - name: I2C1 #TCA9548 + type: i2c_switch + devreg: [0x70] + parameters: [1] #I2C port number + - name: I2C_RCU + type: i2c_array #An array of similar devices connected to an I2C switch + parent: I2C1 + parameters: [0,31,14] #start,number of RCUs, error count to disable I2C + status: RCU_I2C_STATUS + - name: I2C_HBAT + type: hba1 #Special driver to manage HBAT1s. + parent: I2C_RCU + devreg: [0x40.0x10] #I2C broadcast register + parameters: [15] #PPS GPIO pin + - name: I2Cbb1 + type: i2cbitbang1 #I2C bitbang via GPIO expander + devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2] + parameters: [5,6,6] #pins + parent: I2C_RCU + - name: I2Cbb2 + type: i2cbitbang1 + devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2] + parameters: [4,6,6] + parent: I2C_RCU + - name: I2Cbb3 + type: i2cbitbang1 + devreg: [IO3.GPIO2,IO3.GPIO2,IO3.CONF2] + parameters: [3,6,6] + parent: I2C_RCU + - name: SPIbb1 + type: spibitbang1 #SPI bitbang via GPIO expander: CLK, SDIO, SDIOdir,CS + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2] + parameters: [1,0,0,0] + parent: I2C_RCU + - name: SPIbb2 + type: spibitbang1 + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2] + parameters: [3,2,2,1] + parent: I2C_RCU + - name: SPIbb3 + type: spibitbang1 + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2] + parameters: [5,4,4,2] + parent: I2C_RCU +# - name: HBA_trigger +# type: gpio_hba_trigger +# parameters: [15] #PPS GPIO pin +# devreg: [0x40.0x10] #I2C broadcast register +# parent: I2C_RCU + +#This is the I2C devices in the RCU +device_registers: + - name: IO + dim: 3 + description: [IO-Expander for filter selection,IO-Expander for ON/OFF, Band, BUFx2,IO-Expander for ADC control] + address: [0x75,0x76,0x20] + device: [TCA9539,TCA9539,TCA6416] + driver: I2C1 + registers: + - name: CONF1 + description: Direction of port1 + address: 6 + store: True + - name: CONF2 + description: Direction of port2 + address: 7 + store: True + - name: GPIO1 + description: Input/Ouput port 1 + address: [0,2] #Read / Write address different + store: True + - name: GPIO2 + description: Input/Ouput port 2 + address: [1,3] + store: True + + - name: ROM + description: IO-Expander for filter selection + address: 0x50 + driver: I2C1 + registers: + - name: ID + description: Random + address: 0xfc + - name: Version + description: Set in production + address: 0 + + - name: AN + description: Monitor ADC on RCU + address: 0x74 #was 0x14 on RCU2-DIG PCBs + device: LTC2495 + driver: I2C1 + registers: + - name: V_1v8 + address: 0xB080 + - name: V_2v5 + address: 0xB880 + - name: V_3v3 + address: 0xB180 + - name: I_Ant0 + address: 0xB980 + - name: I_Ant1 + address: 0xB280 + - name: I_Ant2 + address: 0xBA80 + - name: V_Ant_I0 + address: 0xB380 + - name: V_Ant_O0 + address: 0xBB80 + - name: V_Ant_I1 + address: 0xB480 + - name: V_Ant_O1 + address: 0xBC80 + - name: V_Ant_I2 + address: 0xB580 + - name: V_Ant_O2 + address: 0xBD80 + - name: Temp + address: 0xA0C0 + +#This 'special' devices that uses I2C + + - name: HB_UC + description: RCU microcontroller + address: 0x40 + driver: I2C1 + registers: + - name: ID + description: Device ID + address: 0 + + - name: HB_UC_update + description: RCU microcontroller + address: 0x40 + driver: HBA_trigger + registers: + - name: wait_pps + address: 10 + + - name: HBAT + dim: 3 + address: [0x41,0x42,0x43] + description: Virtual HBAT0 interface + driver: I2C_HBAT + registers: + - name: XY + address: 0x10 + description: XY delay register + store: True + - name: Version + address: 127 + description: HBAT server version + + - name: ADC + dim: 3 + description: ADC SPI control + device: AD9683 + driver: [SPIbb1,SPIbb2,SPIbb3] + registers: + - name: PLL_stat + description: PLL locked status + address: 0x0A + - name: JESD_control1 + description: JESD link control + address: 0x5F + - name: SYNC_control + address: 0x3A + - name: CML_level + description: CML output adjust + address: 0x15 + - name: Update + description: Global device uptate + address: 0xFF + + - name: DTH + dim: 3 + description: CW dither source + device: SI4012 + driver: [I2Cbb1,I2Cbb1,I2Cbb1] + address: 0x70 + registers: + - name: Freq + description: Frequency + address: [0x1240,0x1140] + - name: Property + description: Properties + address: [0x12,0x11] + - name: State + address: [0x61,0x60] + - name: Start + description: Start CW + address: [0x62,0x62] + - name: Stop + description: Stop CW + address: [0x67,0x67] + - name: Rev + address: 0x10 + - name: Tune + address: [0x1221,0x1121] + - name: CONF + address: [0x1210,0x1110] + +variables: + - name: RCU_ANT_mask + description: Only masked RF chains are updated + driver: I2C_RCU + rw: variable #server RW variable, not linked to IO + dtype: boolean + dim: 96 + + - name: RCU_mask + description: Only masked RCUs are updated + driver: I2C_RCU + rw: variable #server RW variable, not linked to IO + dtype: boolean + dim: 32 + + - name: RCU_I2C_STATUS + description: 0=Good, >0 communication error + driver: I2C_RCU + rw: ro #server RW variable, not linked to IO + dtype: uint8 + mask: RCU_mask + dim: 32 + +# - name: RCU_state +# description: State of RCUs 0=unknown, 1=ready, 2=busy, 3= wait PPS, 4=error +# driver: I2C_RCU +# rw: ro #server variable, not linked to IO +# dtype: uint8 +# dim: 1 + + - name: RECVTR_busy + description: True when I2C line is busy + rw: ro #server variable, not linked to IO + dtype: boolean + dim: 1 + + - name: RCU_attenuator + description: RCU Attenuation (dB) + driver: I2C_RCU + devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1] + bitoffset: [0,0,0] + width: 6 + rw: rw + dtype: uint8 + dim: 96 + mask: RCU_ANT_mask + + - name: RCU_band + description: Band select 1=10MHz,2=30MHz + driver: I2C_RCU + devreg: [IO2.GPIO2,IO2.GPIO2,IO2.GPIO2] + bitoffset: [0,2,4] + width: 2 + rw: rw + dtype: uint8 + dim: 96 + mask: RCU_ANT_mask + + - name: [RCU_IO1_GPIO1,RCU_IO1_GPIO2,RCU_IO2_GPIO1,RCU_IO2_GPIO2,RCU_IO3_GPIO1,RCU_IO3_GPIO2] + driver: I2C_RCU + devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1,IO2.GPIO2,IO3.GPIO1,IO3.GPIO2] + width: 8 + rw: ro + dtype: uint8 + dim: 32 + mask: RCU_mask + debug: True + + - name: RCU_LED0 + driver: I2C_RCU + description: LED 1 + devreg: IO2.GPIO2 + bitoffset: 6 + width: 1 + rw: rw + dtype: boolean + dim: 32 + mask: RCU_mask + + - name: RCU_LED1 + driver: I2C_RCU + description: LED 2 + devreg: IO2.GPIO2 + bitoffset: 7 + width: 1 + rw: rw + dtype: boolean + dim: 32 + mask: RCU_mask + + - name: RCU_temperature + description: RCU Temperature (Kelvin) + driver: I2C_RCU + devreg: AN.Temp + width: 23 + scale: 4.21e-3 + rw: ro + dtype: double + dim: 32 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_3V3 + description: RCU 3.3V voltage (V) + driver: I2C_RCU + devreg: AN.V_3v3 + width: 23 + scale: 1.463e-6 + rw: ro + dtype: double + dim: 32 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_1V8 + description: RCU 1.8V voltage (V) + driver: I2C_RCU + devreg: AN.V_1v8 + width: 23 + scale: 7.1526e-7 + rw: ro + dtype: double + dim: 32 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_2V5 + description: RCU 2.5V voltage (V) + driver: I2C_RCU + devreg: AN.V_2v5 + width: 23 + scale: 7.1526e-7 + rw: ro + dtype: double + dim: 32 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_V_ANT + description: RCU antenna voltage (V) + driver: I2C_RCU + devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2] + width: 23 + scale: 2.7895e-6 + rw: ro + dtype: double + dim: 96 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_ANT_V + description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON. + driver: I2C_RCU + devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2] + width: 23 + scale: 2.7895e-6 + rw: ro + dtype: double + dim: 96 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_ANT_I + description: Current drawn on antenna output of RCU (A) + driver: I2C_RCU + devreg: [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2] + width: 23 + scale: 7.1526e-8 + rw: ro + dtype: double + dim: 96 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_PWR_DIGITAL_ON + description: RCU digital power enable. Controlled by calling RCU_on/RCU_off + driver: I2C_RCU + devreg: IO2.GPIO1 + width: 1 + bitoffset: 6 + rw: ro + dtype: boolean + dim: 32 + mask: RCU_mask + + - name: RCU_PWR_GOOD + description: Status of RCU power given by LDOs. + driver: I2C_RCU + devreg: IO2.GPIO1 + width: 1 + bitoffset: 7 + rw: ro + dtype: boolean + dim: 32 + monitor: true + mask: RCU_I2C_STATUS + + - name: RCU_PWR_ANALOG_ON + description: RCU analog power enable. Controlled by RCU_on/off + driver: I2C_RCU + devreg: IO1.GPIO2 + width: 1 + bitoffset: 7 + rw: ro + dtype: boolean + dim: 32 + mask: RCU_mask + + - name: RCU_DTH_SHUTDOWN + description: False means dither source powered on. Controlled by TBD + driver: I2C_RCU + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.GPIO2] + width: 1 + bitoffset: [7,6,7] + rw: ro + dtype: boolean + dim: 96 + mask: RCU_ANT_mask + + - name: RCU_ANT_PWR_ON + description: Antenna power output ON/OFF control. Monitored by Ant_V. + driver: I2C_RCU + devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO2] + width: 1 + bitoffset: [6,7,6] + rw: rw + dtype: boolean + dim: 96 + mask: RCU_ANT_mask + + - name: HBAT_beamformer_delays + description: HBAT1 frontend delays (0.5ns steps) + driver: I2C_HBAT + devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + bitoffset: [2,2,2] + width: 5 + rw: rw + dtype: uint8 + dim: 3072 + mask: RCU_ANT_mask + wait: 100 #ms + + - name: [HBAT_LED_on,HBAT_PWR_on,HBAT_PWR_LNA_on] + description: HBA frontend control + driver: I2C_HBAT + devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + bitoffset: [0,7,1] + width: 1 + rw: rw + dtype: boolean + dim: 3072 + mask: RCU_ANT_mask + wait: 100 #ms + + - name: RCU_ID + description: Unique PCB ID + driver: I2C_RCU + devreg: ROM.ID + width: 32 + rw: ro + dtype: uint32 + dim: 32 + mask: RCU_mask + + - name: RCU_version + description: RCU version number + driver: I2C_RCU + devreg: ROM.Version + width: 80 #10 characters + rw: ro + dtype: string + dim: 32 + mask: RCU_mask + + - name: RCU_ADC_lock + description: RCU ADC lock status, 0x81=locked + driver: I2C_RCU + devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + monitor: true + + - name: RCU_ADC_sync + driver: I2C_RCU + devreg: [ADC1.SYNC_control,ADC2.SYNC_control,ADC3.SYNC_control] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + debug: true + + - name: RCU_ADC_JESD + driver: I2C_RCU + devreg: [ADC1.JESD_control1,ADC2.JESD_control1,ADC3.JESD_control1] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + debug: true + + - name: RCU_ADC_CML_level + driver: I2C_RCU + devreg: [ADC1.CML_level,ADC2.CML_level,ADC3.CML_level] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + debug: true + + - name: RCU_DTH_freq + description: RCU Dither source frequency (Hz) + driver: I2C_RCU + devreg: [DTH1.Freq,DTH2.Freq,DTH3.Freq] + width: 32 + rw: rw + dtype: uint32 + dim: 96 + mask: RCU_ANT_mask + + - name: RCU_DTH_tune + driver: I2C_RCU + devreg: [DTH1.Tune,DTH2.Tune,DTH3.Tune] + width: 16 + rw: rw + dtype: uint32 + dim: 96 + mask: RCU_ANT_mask + debug: true + + - name: RCU_DTH_config + driver: I2C_RCU + devreg: [DTH1.CONF,DTH2.CONF,DTH3.CONF] + width: 8 + rw: rw + dtype: uint32 + dim: 96 + mask: RCU_ANT_mask + debug: true + + - name: RCU_DTH_ON + description: RCU Dither on. Controlled by RCU_DTH_on/off + driver: I2C_RCU + devreg: [DTH1.State,DTH2.State,DTH3.State] + width: 1 #read only first of 2 bytes + bitoffset: [1,1,1] + rw: ro + dtype: boolean + dim: 96 + mask: RCU_ANT_mask + + - name: RCU_DTH_Rev + driver: I2C_RCU + devreg: [DTH1.Rev,DTH2.Rev,DTH3.Rev] + width: 88 + rw: rw + dtype: uint32 + dim: 96 + mask: RCU_ANT_mask + debug: true + +methods: + - name: RCU_Init #Called after startup to load. Should have all stored registers + driver: I2C_RCU + debug: True + instructions: + - RCU_IO1_GPIO1: Update + - RCU_IO1_GPIO2: Update + - RCU_IO2_GPIO1: Update + - RCU_IO2_GPIO2: Update + - RCU_IO3_GPIO1: Update + - RCU_IO3_GPIO2: Update +# - IO1.GPIO2: Update +# - IO2.GPIO1: Update +# - IO2.GPIO2: Update +# - IO3.GPIO1: Update +# - IO3.GPIO2: Update + - IO3.CONF1: Update + - RCU_update: 0 + + - name: RCU_on + description: Initialize RCU and it in the ON state + driver: I2C_RCU + mask: RCU_mask + instructions: + - RCU_I2C_STATUS: 0 + - IO2.CONF1: 0x80 #Pgood on 0x80 + - IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att + - IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1) #LEDS=on=low + - IO3.GPIO1: 0x15 #ADC_SDIO=high, clk=low, DTH_EN=low + - IO3.GPIO2: 0x47 #ADC SC=high, DTH_SDA=high + - IO1.GPIO1: 0x0A #0x0a = 10dB att + - IO1.GPIO2: 0x8A #0x80 Analog on, 0x0a=10dB att + - IO2.CONF2: 0 + - IO3.CONF1: 0 + - IO3.CONF2: 0 + - IO1.CONF1: 0 + - IO1.CONF2: 0 +# - RCU_GPIO1: Update +# - RCU_GPIO2: Update +# - RCU_attenuator: [10,10,10] #Set OPC-UA variable + - WAIT: 500 #ms to wait + - ADC1_on: 0 #call another opc-ua method + - ADC2_on: 0 + - ADC3_on: 0 + - WAIT: 500 #ms to wait + - RCU_update: 0 + + - name: RCU_update + driver: I2C_RCU + mask: RCU_mask + debug: True + instructions: + - RCU_PWR_DIGITAL_ON: Update #Read value and update the OPC-UA variable + - RCU_PWR_ANALOG_ON: Update + - ANT_PWR_ON: Update + - RCU_ID: Update + - RCU_version: Update + - RCU_LED0: Update + - RCU_LED1: Update + - RCU_attenuator: Update + - RCU_band: Update + - RCU_ADC_lock: Update + - RCU_ADC_sync: Update + - RCU_DTH_SHUTDOWN: Update + - RCU_DTH_freq: Update + - RCU_DTH_ON: Update + + - name: ADC1_on + driver: I2C_RCU + debug: True +# rw: hidden + instructions: + - ADC1.JESD_control1 : 0x14 + - ADC1.SYNC_control: 1 #Setup ADCs + - ADC1.CML_level: 0x7 + - ADC1.Update: 1 #Needed to update ADC registers + + - name: ADC2_on + driver: I2C_RCU + debug: True +# rw: hidden + instructions: + - ADC2.JESD_control1 : 0x14 + - ADC2.SYNC_control: 1 #Setup ADCs + - ADC2.CML_level: 0x7 + - ADC2.Update: 1 #Needed to update ADC registers + + - name: ADC3_on + driver: I2C_RCU + debug: True +# rw: hidden + instructions: + - ADC3.JESD_control1 : 0x14 + - ADC3.SYNC_control: 1 #Setup ADCs + - ADC3.CML_level: 0x7 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: RCU_off + description: Put RCU in low-power state + driver: I2C_RCU + mask: RCU_mask + instructions: + - RCU_I2C_STATUS: 0 + - RCU_PWR_ANALOG_ON: 0 #Switch power off + - RCU_PWR_DIGITAL_ON: 0 #Switch power off + - IO2.GPIO1: 0 + - IO2.GPIO2: 0 + - IO3.GPIO1: 0 + - IO3.GPIO2: 0 + - IO1.GPIO1: 0 + - IO1.GPIO2: 0 + - RCU_update: 0 + #todo, also make all GPIO pins (except power enables) inputs to remove all power from devices. + + - name: RCU_HBAT_WAIT_PPS + driver: I2C_RCU + mask: RCU_mask + debug: True + instructions: + - RCU_state: 3 + - HB_UC_update.wait_pps : 1 + - RCU_state: 1 + + + - name: RCU_DTH_on + description: Switch dither source on + driver: I2C_RCU + mask: RCU_mask +# rw: hidden + instructions: +# - RCU_DTH_SHUTDOWN : 0 + - RCU_DTH_config : [0,0,0] +# - RCU_DTH_tune : [0,0,0,0,0,0] +# - DTH1.CONF : 0 +# - DTH1.Tune : [0,0] #no tuning +# - WAIT: 10 +# - DTH1.Start : [1,0,0,0,1,0x55] + - DTH1.Start : [0,1,0,0,1] +# - DTH1.0x60: #PA_config... +# - DTH2.CONF : 0 +# - WAIT: 10 +# - DTH2.Tune : [0,0] #no tuning +# - WAIT: 10 + - DTH2.Start : [0,1,0,0,1] +# - DTH3.CONF : 0 +# - WAIT: 10 +# - DTH3.Tune : [0,0] #no tuning +# - WAIT: 10 + - DTH3.Start : [0,1,0,0,1] + - RCU_DTH_ON : Update + - RCU_DTH_config: Update #debug + - RCU_DTH_tune: Update #debug + + - name: RCU_DTH_off + description: Switch dither source off + driver: I2C_RCU + mask: RCU_mask +# rw: hidden + instructions: +# - RCU_DTH_SHUTDOWN : [1,1,1] +# - WAIT: 100 +# - RCU_DTH_SHUTDOWN : [0,0,0] +# - RCU_DTH_SHUTDOWN : 1 + - DTH1.Stop : [0,0] + - DTH2.Stop : [0,0] + - DTH3.Stop : [0,0] +# - DTH1.State : [0,0] +# - DTH2.State : [0,0] +# - DTH3.State : [0,0] + - RCU_DTH_ON: Update