diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml deleted file mode 120000 index aaba6791d55676b61a3f3eb97ee5cbe8422f0e7e..0000000000000000000000000000000000000000 --- a/config/RECVTR.yaml +++ /dev/null @@ -1 +0,0 @@ -RECVTR_HB.yaml \ No newline at end of file diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5774e35900d785f7ae2ba8fdfe107f36150b6706 --- /dev/null +++ b/config/RECVTR.yaml @@ -0,0 +1,1065 @@ +version: "1.0" +description: "1234" + +drivers: + - name: I2C1 #TCA9548 + type: i2c_switch + devreg: [0x70,0x71,0x72,0x73] + parameters: [1] #I2C port number + - name: I2C_RCU + type: i2c_array #An array of similar devices connected to an I2C switch + parent: I2C1 + parameters: [20,22,0,2,4,6,10,12,14,16,18,24,26,28,30,8,7,5,3,1,23,21,19,13,11,9,15,17,31,29,27,25] #RCU lookup table +# parameters: [22,0,2,4,6,10,22,0,2,4,6,10,22,0,2,4,6,10,22,0,2,4,6,10,22,0,2,4,6,10,22,0]#repeat 1..7 for RCUH BF test +# 12,14,16,18,24,26,28,30,8,7,5,3,1,23,21,19,13,11,9,15,17,31,29,27,25] #RCU lookup table + I2Ccut: 5 #error count to disable I2C (14 for LTS?) + status: RECVTR_I2C_error + - name: I2C_HBAT + type: hba1 #Special driver to manage HBAT1s. + parent: I2C_RCU + devreg: [0x40.0xFF] #I2C broadcast register + parameters: [24] #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: 4 + description: [IO-Expander for filter selection,IO-Expander for ON/OFF, Band, BUFx2,IO-Expander for ADC control] + address: [0x75,0x76,0x20,0x77] + device: [TCA9539,TCA9539,TCA6416,TCA9539] + 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: DIR1 + address: 4 + - name: DIR2 + address: 5 + + - 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: Serial + address: 0x20 + + - 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: "waitPPS", address: 12, description: "1=wait for PPS"} + - { name: "VREF", address: 13, description: "0..15/16 ratio of Vref"} + - { name: "firmware", address: 0x10, description: "software version"} + +# - 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: "w" #only store on write + - 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: testmode + address: 0x0D + - name: dither + address: 0x0C + - name: JESDscramble + address: 0x6E + - name: PDWNmodes + address: 0x08 + - name: DCcorrect + address: 0x40 + + - name: DTH + dim: 3 + description: CW dither source + device: SI4012 + driver: [I2Cbb1,I2Cbb2,I2Cbb3] + 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: RECVTR_monitor_rate + description: Rate at which monitored points are polled (seconds) + driver: I2C_RCU + rw: variable + dtype: uint8 + + - name: ANT_mask + description: Only RF chains with a true mask is set + driver: I2C_RCU + rw: variable #server RW variable, not linked to IO + dtype: boolean + dim: 96 + dim2: [3,32] + + - name: RCU_mask + description: Only RCUs with a true mask is set + driver: I2C_RCU + rw: variable #server RW variable, not linked to IO + dtype: boolean + dim: 32 + + - name: RECVTR_I2C_error + 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_translator_busy + description: True when I2C line is busy + rw: ro #server variable, not linked to IO + dtype: boolean + dim: 1 + + - name: RCU_attenuator_dB + 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 + dim2: [3,32] + mask: ANT_mask + + - name: RCU_band_select + 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 + dim2: [3,32] + mask: ANT_mask + + - name: RCU_hband_select + description: Band select for highband 2,1,4 for 110-190,170-230,210-240 + driver: I2C_RCU + devreg: [IO2.GPIO2,IO2.GPIO2,IO4.GPIO2] + bitoffset: [0,3,0] + width: 3 + rw: rw + dtype: uint8 + dim: 96 + dim2: [3,32] + mask: ANT_mask + + - name: RCU_DAB_select + description: Band select ... + driver: I2C_RCU + devreg: [IO4.GPIO1,IO4.GPIO1,IO4.GPIO1] + bitoffset: [0,2,4] + width: 2 + rw: rw + dtype: uint8 + dim: 96 + dim2: [3,32] + mask: ANT_mask + + - name: [RCU_IO1_GPIO1,RCU_IO1_GPIO2,RCU_IO2_GPIO1,RCU_IO2_GPIO2,RCU_IO3_GPIO1,RCU_IO3_GPIO2,RCU_IO4_GPIO1,RCU_IO4_GPIO2] + driver: I2C_RCU + devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1,IO2.GPIO2,IO3.GPIO1,IO3.GPIO2,IO4.GPIO1,IO4.GPIO2] + width: 8 + rw: ro + dtype: uint8 + dim: 32 + mask: RCU_mask + debug: True + + - name: RCU_LED_red_on + driver: I2C_RCU + description: Red LED on front panel + devreg: IO2.GPIO2 + bitoffset: 6 + width: 1 + rw: rw + dtype: boolean + convert_unit: bool_invert + dim: 32 + mask: RCU_mask + + - name: RCU_LED_green_on + driver: I2C_RCU + description: Green LED on front panel + devreg: IO2.GPIO2 + bitoffset: 7 + width: 1 + rw: rw + dtype: boolean + convert_unit: bool_invert + dim: 32 + mask: RCU_mask + + - name: RCU_TEMP + description: RCU PCB Temperature (Celsius) + driver: I2C_RCU + devreg: AN.Temp + width: 23 + scale: 3.827e-3 #T=DATAOUT * Vref/12.25/32. Vreg=1.5 V + convert_unit: Kelvin2Celsius + rw: ro + dtype: double + dim: 32 + monitor: true + read_parallel: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_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 + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_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 + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_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 + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_ANT_VOUT + description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON. + 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 + dim2: [3,32] + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_ANT_VIN + description: RCU antenna voltage before switch (V) + 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 + dim2: [3,32] + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_ANT_IOUT + description: Current drawn on antenna output of RCU (A). 15mA offset due to LED on RCU + 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 + dim2: [3,32] + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_ANT2_VOUT + description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON. + driver: I2C_RCU + devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2] + width: 23 + scale: 1.43051e-5 #LB: 2.7895e-6 + rw: ro + dtype: double + dim: 96 + dim2: [3,32] + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + - name: RCU_PWR_ANT2_VIN + description: RCU antenna voltage before switch (V) + driver: I2C_RCU + devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2] + width: 23 + scale: 1.43051e-5 #LB: 2.7895e-6 + rw: ro + dtype: double + dim: 96 + dim2: [3,32] + read_parallel: true + monitor: true + mask: RECVTR_I2C_error + + + - 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 #rw for testing + 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: RECVTR_I2C_error + + - 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: rw #rw for testing + 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: rw + dtype: boolean + dim: 96 + dim2: [3,32] + mask: ANT_mask + debug: True + + - name: RCU_PWR_ANT_on + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO2] + width: 1 + bitoffset: [6,7,6] + rw: rw + dtype: boolean + dim: 96 + dim2: [3,32] + mask: ANT_mask + + - name: HBAT_BF_delay_steps + 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 + dim2: [32,96] + mask: ANT_mask + wait: PPS +# wait: 1000 #ms + + - name: HBAT_LED_on + description: HBA frontend control + driver: I2C_HBAT + devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + bitoffset: 0 + width: 1 + rw: rw + dtype: boolean + dim: 3072 + dim2: [32,96] + mask: ANT_mask + wait: 100 #ms + - name: HBAT_PWR_LNA_on + description: HBA frontend control + driver: I2C_HBAT + devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + bitoffset: 7 + width: 1 + rw: rw + dtype: boolean + dim: 3072 + dim2: [32,96] + mask: ANT_mask + wait: 100 #ms + - name: HBAT_PWR_on + description: HBA frontend control + driver: I2C_HBAT + devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + bitoffset: 1 + width: 1 + rw: rw + dtype: boolean + convert_unit: bool_invert + dim: 3072 + dim2: [32,96] + mask: ANT_mask + wait: 100 #ms + + - name: RCU_PCB_ID + description: Unique PCB ID + driver: I2C_RCU + devreg: ROM.ID + width: 32 + rw: ro + dtype: uint32 + dim: 32 + mask: RCU_mask + + - name: RCU_PCB_version + description: RCU version number + driver: I2C_RCU + devreg: ROM.Version + width: 0x80 #16 characters + rw: ro + dtype: string + dim: 32 + mask: RCU_mask + + - name: RCU_PCB_number + description: PCB number (astron.nl/webforms/IenS-Boarden/view.php?id=xxx) + driver: I2C_RCU + devreg: ROM.Serial + width: 0x80 #16 characters + rw: ro + dtype: string + dim: 32 + mask: RCU_mask + + - name: RCU_firmware_version + description: git firmware version + driver: I2C_RCU + devreg: HB_UC.firmware + width: 32 + rw: ro + dtype: uint32 + endian: "<" + dim: 32 + mask: RCU_mask + + - name: RCU_ADC_locked + description: RCU ADC lock status. May generated noise and polling disabled in future + driver: I2C_RCU + devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat] + width: 1 + rw: ro + dtype: boolean + dim: 96 + dim2: [3,32] +# 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 + dim2: [3,32] + 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 + dim2: [3,32] + 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 + dim2: [3,32] + debug: true + + - name: RCU_DTH_freq + description: RCU Dither source frequency (Hz). Should be around 102MHz. + driver: I2C_RCU + devreg: [DTH1.Freq,DTH2.Freq,DTH3.Freq] + width: 32 + rw: rw + dtype: uint32 + dim: 96 + dim2: [3,32] + mask: ANT_mask + + - name: RCU_DTH_tune + driver: I2C_RCU + devreg: [DTH1.Tune,DTH2.Tune,DTH3.Tune] + width: 16 + rw: rw + dtype: uint32 + dim: 96 + dim2: [3,32] + mask: 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 + dim2: [3,32] + mask: 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 + dim2: [3,32] + mask: ANT_mask + + - name: RCU_DTH_Rev + driver: I2C_RCU + devreg: [DTH1.Rev,DTH2.Rev,DTH3.Rev] + width: 88 + rw: rw + dtype: uint32 + dim: 96 + dim2: [3,32] + mask: ANT_mask + debug: true + +methods: + - name: RECVTR_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 + - RCU_IO4_GPIO1: Update #should be last, as it will fail for low-band + - RCU_IO4_GPIO2: Update + + - name: RCU_on + description: Initialize RCU and it in the ON state + driver: I2C_RCU + mask: RCU_mask + instructions: + - RECVTR_I2C_error: 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) #LED green=on=low + - IO3.GPIO1: 0xD5 #ADC_SDIO=high, clk=low, DTH_EN=high + - IO3.GPIO2: 0xC7 #ADC SC=high, DTH_SDA=high, DTH_EN=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 +#name="RCU_DTH_shutdown" + - IO3.GPIO1: 0x55 #enable ADC 0 (DTH_EN=low) + - IO3.GPIO1: 0x15 #enable ADC 1 + - IO3.GPIO2: 0x47 #enable ADC 2 + - WAIT: 500 #ms to wait + - ADC1_on: 0 #call another opc-ua method + - WAIT: 1000 #ms to wait + - ADC2_on: 0 + - WAIT: 1000 #ms to wait + - ADC3_on: 0 + - WAIT: 500 #ms to wait + - RCU_update: 0 + + - name: RCU_on2 + description: Initialize RCU and it in the ON state + driver: I2C_RCU + mask: RCU_mask + instructions: + - RECVTR_I2C_error: 0 + - IO2.CONF1: 0x80 #Pgood on 0x80 + - IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att + - IO2.GPIO2: 0x52 #0x09 #Band0 (or 0x12 or 0x24) #LED green=on=low 0x40 +# - IO3.GPIO1: 0xD5 #ADC_SDIO=high, clk=low, DTH_EN=high +# - IO3.GPIO2: 0xC7 #ADC SC=high, DTH_SDA=high + - 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 + - IO3.DIR1: 0 + - IO3.DIR2: 0 + - IO1.CONF1: 0 + - IO1.CONF2: 0 + - IO4.CONF1: 0xC0 #pin 0x40, 0x80 not used + - IO4.CONF2: 0xF8 + - IO4.GPIO1: 0x2A #DAB switch states: 0x2A or 0x51 + - IO4.GPIO2: 0x02 #Band select + - HB_UC.waitPPS: 1 #wait for PPS + - HB_UC.VREF: 0x0C + + +# - 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 +# - IO3.GPIO1: 0xD5 #DTH_EN=high -> ADCs disables +# - IO3.GPIO2: 0xC7 # + - RCU_DTH_shutdown : [1,1,1] + - WAIT: 500 #ms to wait + - RCU_DTH_shutdown : [0,0,0] +# - IO3.GPIO1: 0x15 #DTH_EN=low -> ADC enabled +# - IO3.GPIO2: 0x47 + - 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 + - RCU_PWR_ANT_on: Update + - RCU_PCB_ID: Update + - RCU_PCB_version: Update + - RCU_PCB_number: Update + - RCU_LED_red_on: Update + - RCU_LED_green_on: Update + - RCU_attenuator_dB: Update + - RCU_band_select: Update + - RCU_ADC_locked: Update + - RCU_ADC_sync: Update + - RCU_DTH_shutdown: Update +# - RCU_DTH_freq: Update + - RCU_DTH_on: Update + - RCU_hband_select: Update + - RCU_DAB_select: Update + - RCU_firmware_version: Update + - RCU_IO1_GPIO1: Update #needed for debug/testing + - RCU_IO1_GPIO2: Update + - RCU_IO2_GPIO1: Update + - RCU_IO2_GPIO2: Update + - RCU_IO3_GPIO1: Update + - RCU_IO3_GPIO2: Update + - RCU_IO4_GPIO1: Update + - RCU_IO4_GPIO2: 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: + - RECVTR_I2C_error: 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_config : [0,0,0] + - RCU_DTH_config: Update #debug + - DTH1.Tune : [0,0] #no tuning + - DTH2.Tune : [0,0] #no tuning + - DTH3.Tune : [0,0] #no tuning + - RCU_DTH_tune: Update #debug + - DTH1.Start : [0,1,0,0,1] + - DTH2.Start : [0,1,0,0,1] + - DTH3.Start : [0,1,0,0,1] + - RCU_DTH_on : Update + + - 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 + + - name: RCU_DTH_shutdown + description: shutdown dither source + driver: I2C_RCU + debug: True + 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.State : [1,0] + - DTH2.State : [1,0] + - DTH3.State : [1,0] + + - name: ADC0_test + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: +# - ADC1.testmode : 0x05 #output long PSN + - ADC1.testmode : 0x30 #long&short PSN hold in reset + - ADC1.Update: 1 #Needed to update ADC registers + + - name: ADC1_test + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: +# - ADC2.testmode : 0x05 + - ADC2.testmode : 0x30 #long&short PSN hold in reset + - ADC2.Update: 1 #Needed to update ADC registers + + - name: ADC2_test + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: +# - ADC3.testmode : 0x05 + - ADC3.testmode : 0x30 #long&short PSN hold in reset + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_test_off + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: + - ADC1.testmode : 0x00 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.testmode : 0x00 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.testmode : 0x00 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_scramble_off + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: + - ADC1.JESDscramble : 0x00 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.JESDscramble : 0x00 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.JESDscramble : 0x00 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_scramble_on + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: + - ADC1.JESDscramble : 0x80 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.JESDscramble : 0x80 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.JESDscramble : 0x80 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_dither_off + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: + - ADC1.dither : 0x00 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.dither : 0x00 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.dither : 0x00 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_dither_on + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: + - ADC1.dither : 0x01 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.dither : 0x01 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.dither : 0x01 + - ADC3.Update: 1 #Needed to update ADC registers + + - name: ADC_DCcorrect_on + driver: I2C_RCU + debug: True + mask: RCU_mask + instructions: +# - ADC1.DCcorrect : 0x36 #0011 0110 #DC correct 0.29Hz + - ADC1.DCcorrect : 0x02 #0000 0010 #DC correct 2.4kHz + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.DCcorrect : 0x02 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.DCcorrect : 0x02 + - ADC3.Update: 1 #Needed to update ADC registers diff --git a/i2cserv/hba1.py b/i2cserv/hba1.py index bd99fcdd2a7e1547f04ebeb6ef93a39ec42a567c..152c6a5850eed4581f4d846317edb05eaa7b8ee5 100644 --- a/i2cserv/hba1.py +++ b/i2cserv/hba1.py @@ -26,11 +26,14 @@ class hba1(hwdev): logging.warn("RPi GPIO module not found, PPS input disable!") def OPCUASetVariable(self,varid,var1,data,mask): - logging.info(str(("HBA set Var",var1['name'],data[:32*3],mask[:12]))) + logging.info(str(("HBA set Var",var1['name'],len(data),len(mask),data[:32*3],mask[:12]))) self.conf['parentcls'].SetGetVarValueMask(var1,data,mask,getalso=False) + RCUmask=[(mask[i*3] | mask[i*3+1] | mask[i*3+2]) for i in range(32)] +# print(RCUmask) #Wait for PPS if required else wait a bit if var1.get('wait')=="PPS": -# logging.info("HBA wait PPS") + logging.info("HBA wait PPS") + self.conf['parentcls'].SetSwitchMask(RCUmask) channel=GPIO.wait_for_edge(self.pin,GPIO.RISING,timeout=1500) self.conf['parentcls'].i2csetget(self.addr,[self.reg]) if channel is None: @@ -54,12 +57,12 @@ class hba1(hwdev): logging.debug("SetHba addr=0x%x reg=0x%x",addr,reg) I2Ccallback=self.conf['parentcls'].i2csetget I2Ccallback(0x40,[0],read=1)#wakeup, do nothing - sleep(0.01) + #sleep(0.01) I2Ccallback(addr,data[:16],reg=reg) if len(data)>16: - sleep(0.01) + #sleep(0.01) I2Ccallback(addr,data[16:],reg=reg+16) - sleep(0.01) + #sleep(0.01) return True def gethba(self,addr,reg,data): diff --git a/i2cserv/i2c_array.py b/i2cserv/i2c_array.py index 7d2d8ce3163fe4f0e67be8e5f4dc601975f048ea..de8f24ee7449537be59dbd666225d24b5b318235 100644 --- a/i2cserv/i2c_array.py +++ b/i2cserv/i2c_array.py @@ -37,6 +37,7 @@ class i2c_array(i2c_dev): for RCUi in range(self.N): if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut): self.conf['parentcls'].AddNewChannel(self.RCU_Switch1[RCUi]); + self.RCUi=RCUi self.conf['parentcls'].UpdateNewChannel(); def SetGetVarValueMask(self,var1,data,mask,getalso=True): @@ -180,7 +181,7 @@ class i2c_array(i2c_dev): if self.disableI2ConError: self.I2Cmask[RCUi]+=1; self.I2Cmask[RCUi]=0; value1[RCUi]=value2[0] - if devreg.get('store'): + if devreg.get('store')==True: if mask[RCUi] and not(value2[0] is None): storearray[RCUi]=value2[0] logging.debug(str(("Stored values:",self.getstorearray(devreg)))) @@ -234,7 +235,7 @@ class i2c_array(i2c_dev): if not(callback(devreg['addr'],value2,reg=reg,read=rd)): return False; if value2[0] is None: return False value[:]=value2[:]; - if devreg.get('store'): + if devreg.get('store')==True: storearray=self.getstorearray(devreg,len(value)); storearray[self.RCUi]=(value[0] if len(value)==1 else value[:]) logging.debug(str(("Store buffer",self.RCUi,storearray[self.RCUi]))) diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py index 35e98331b0e9db1ba16af538bf1ffc13dedb724a..094e48be8f3600c661eb16cedbf9cca0787033f1 100644 --- a/opcuaserv/yamlreader.py +++ b/opcuaserv/yamlreader.py @@ -252,7 +252,7 @@ class yamlreader(yamlconfig): data3=data2; # print("OPCset",v['name'],data3[:64],mask) logging.info(str(("OPCset",v['name'],data3[:64]))) - if v['name']=='UNB2_FPGA_POL_ERAM_IOUT': logging.warn(str((data3,data2,mask,var1.get_value(),[hex(d) for d in data]))); +# if v['name']=='UNB2_FPGA_POL_ERAM_IOUT': logging.warn(str((data3,data2,mask,var1.get_value(),[hex(d) for d in data]))); if len(data3)==1: data3=data3[0]; var1.set_value(data3); diff --git a/pypcc2.py b/pypcc2.py index eb3b690301276774f7123c70a379186f232f1bda..624abf9328af54324f51d5551c5132f60e94683e 100644 --- a/pypcc2.py +++ b/pypcc2.py @@ -14,7 +14,7 @@ parser = argparse.ArgumentParser() parser.add_argument("-s", "--simulator", help="Do not connect to I2c, but simulate behaviour.", action="store_true") parser.add_argument("-t", "--test", help="Do not start OPC-UA server.", action="store_true") parser.add_argument("-p", "--port", help="Port number to listen on [%(default)s].", type=int, default=4842) -parser.add_argument("-l", "--loglevel", help="Log level [%(default)s].", type=str, choices=["DEBUG","INFO","WARNING","ERROR"], default="INFO") +parser.add_argument("-l", "--loglevel", help="Log level [%(default)s].", type=str, choices=["DEBUG","INFO","WARNING","ERROR"], default="WARNING") parser.add_argument("--loghost", help="Logstash host to which to forward logs [%(default)s]",type=str, default='') parser.add_argument("-c", "--config", help="YAML config files, comma seperated [%(default)s]",type=str, default='RCU') args = parser.parse_args() diff --git a/scripts/ADC_testmode.py b/scripts/ADC_testmode.py index 26b7693e4f1591391c219b2d40a949d21b50d793..d7baa41e24a9f17ffebedcb21b300ec4c41c75bd 100644 --- a/scripts/ADC_testmode.py +++ b/scripts/ADC_testmode.py @@ -20,8 +20,14 @@ setRCUmask(RCUs) # time.sleep(0.1) # print("Time=",x*0.1,"s") -#call_debug_method("ADC1_test") +#call_debug_method("ADC0_test") +#call_debug_method("ADC1_test") +#call_debug_method("ADC2_test") #call_debug_method("ADC_scramble_off") -call_debug_method("ADC_scramble_on") +call_debug_method("ADC_dither_off") +#call_debug_method("ADC_dither_on") +#call_debug_method("ADC_scramble_on") #call_debug_method("ADC_test_off") +#call_debug_method("ADC_DCcorrect_on") +#call_debug_method("RCU_DTH_shutdown") disconnect(); diff --git a/scripts/ADCreset.py b/scripts/ADCreset.py index fb2858900675d2f8409c500f85d141a65c6b3fdf..9e2205370db8635cd8ba2556b74904bee7fc2640 100644 --- a/scripts/ADCreset.py +++ b/scripts/ADCreset.py @@ -3,10 +3,11 @@ from test_common import * #RCUs=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; #RCUs=[4,5]; #RCUs=[3,5,7,8,11]; -RCUs=[2]; -#RCUs=[0,2]; +#RCUs=[0]; +#RCUs=[0,1,2,3,4,5]; +#RCUs=[4]; -#RCUs=[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; +RCUs=[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; connect() #8,12 @@ -20,11 +21,12 @@ setRCUmask(RCUs) # time.sleep(0.1) # print("Time=",x*0.1,"s") -callmethod("RCU_off") +#callmethod("RCU_off") #wait() #exit() -time.sleep(5) +#time.sleep(5) callmethod("RCU_on") +#callmethod("RCU_on2") #highband #wait() #callmethod("RCU_on") #time.sleep(1) diff --git a/scripts/AnalogPwr.py b/scripts/AnalogPwr.py index 16591d3de43395176a969c1f9a2d5a3042533abd..c2d1f596f5d7672e3fc89b5594c557fde689936b 100644 --- a/scripts/AnalogPwr.py +++ b/scripts/AnalogPwr.py @@ -9,6 +9,7 @@ RCU=[0,1,2,3]; #RCU=[2] LEDvalue=False; +LEDvalue=True; connect() setRCUmask(RCU) diff --git a/scripts/Ant_Pwr.py b/scripts/Ant_Pwr.py index 3b3b0e948497156c8d19c78c719905408fafc7f8..f1b9d03683c5ec963aebb29a222e1d0cbacd60d1 100644 --- a/scripts/Ant_Pwr.py +++ b/scripts/Ant_Pwr.py @@ -1,8 +1,8 @@ from test_common import * name="RCU_PWR_ANT_on" -RCU=[2]; -On=[True,True,True] +RCU=[0]; +On=[False,True,False] #On=[False,False,False] #Att=[10,10,10] #RCU=[1,2,3]; diff --git a/scripts/Att.py b/scripts/Att.py index 652ed849a9177ea6adefcd691e0b3c0d940255ba..a2df6d4612b3a30cf0ba9b5e6f47407796c2b111 100644 --- a/scripts/Att.py +++ b/scripts/Att.py @@ -2,11 +2,12 @@ from test_common import * connect() name="RCU_attenuator_dB" -RCU=[0]; -#RCU=[4]; +#RCU=[0]; +RCU=[0,1,2,3]; #Att=[15,15,15] #RCU=[0,1,2,3,16,17,18,19]; -Att=[0,0,0] +#Att=[4,4,4] +Att=[4,4,4] setAntmask(RCU) diff --git a/scripts/Band.py b/scripts/Band.py index f294284a6d96adbe25aaedbf6bd33ce78053c8bd..13e7f65e24c3e4a7cdd5ee2cf9d8e2cff9b3a6ab 100644 --- a/scripts/Band.py +++ b/scripts/Band.py @@ -1,12 +1,12 @@ from test_common import * -name="RCU_band_select" +#name="RCU_band_select" +name="RCU_hband_select" #RCU=[0,1,2,3,4,5,8,12]; #RCU=[0,1,2,3,4]; -RCU=[0]; -#Att=[2,2,2] -Att=[2,2,2] -#Att=[4,4,4] +RCU=[0,1,2,3]; +Att=[2,2,2] #30MHz +#Att=[1,1,1] #10 #Att=[4,4,4] #Att=[1+4,2,1] #Att=[2,1+4,1] diff --git a/scripts/DABselect.py b/scripts/DABselect.py index 9bd214466c7ba58fe6c30edd52f357afe10c6167..5c79ac04a5021b11c83bbcb45db9d266d03cbd83 100644 --- a/scripts/DABselect.py +++ b/scripts/DABselect.py @@ -2,7 +2,7 @@ from test_common import * name="RCU_DAB_select" #RCU=[0,1,2,3,4,5,8,12]; -RCU=[0]; +RCU=[0,1,2,3]; Att=[2,2,2] #2=DAB off #Att=[1,1,1] #1=DAB on diff --git a/scripts/DTH_shdn.py b/scripts/DTH_shdn.py index 49f501224de0100905f74b729fe2e835eb96b185..89eded66c16bfbb20316b096c66aab68b02b91c0 100644 --- a/scripts/DTH_shdn.py +++ b/scripts/DTH_shdn.py @@ -18,7 +18,7 @@ for r in RCU: print("Att set:",att[:12]) set_debug_value(name+"_RW",att) -time.sleep(0.5) +time.sleep(1.0) att=get_debug_value(name+"_R") print("Att new:",att[:12]) diff --git a/scripts/DTH_test.py b/scripts/DTH_test.py index 0dff341d3e3e8be3ea71fb9cdb96d8d157607142..0b6fdb44892e76e00f3fe24917a2639e97a184e9 100644 --- a/scripts/DTH_test.py +++ b/scripts/DTH_test.py @@ -8,10 +8,11 @@ setRCUmask(RCU) #call_debug_method("DTH_off") FRCU=0.05; FCH=0.425; -F0=101.0 +#F0=101.0 +F0=97.0 name="RCU_DTH_freq" -if False: +if True: att=get_value(name+"_R") print("freq old:",att[3*RCU[0]:3*RCU[-1]+3]) @@ -27,6 +28,6 @@ if False: print("freq new :",att[3*RCU[0]:3*RCU[-1]+3]) #callmethod("RCU_DTH_on") -callmethod("RCU_DTH_off") +#callmethod("RCU_DTH_off") disconnect() \ No newline at end of file diff --git a/scripts/SetHBAT_BF.py b/scripts/SetHBAT_BF.py index 341dc09bd9b7541cbc88be95f3283a4d90406529..4b2330e5bc19641ccb91d328bd75243594838c91 100644 --- a/scripts/SetHBAT_BF.py +++ b/scripts/SetHBAT_BF.py @@ -1,4 +1,4 @@ -RCU=0 +RCU=1 HBAT=0 #HBAT on RCU 0..2 #HBA=5; #HBA Element in HBAT #BFX=11 #delay in 0.5ns @@ -17,7 +17,7 @@ i=(RCU*3+HBAT)*32 val,tp=get_value_type(name+"_R") print("old:",val[i:i+32]) -val[i:i+32]=np.array(range(32))[::] +val[i:i+32]=np.array(range(32))[::]*0 print("set:",val[i:i+32]) set_value(name+"_RW",val,tp) diff --git a/scripts/SetHBA_BF.py b/scripts/SetHBA_BF.py index 697a9a2a6c32ae88cbb330ed49b79ee10c26c928..0c20805535ac3136cc9650ed41ad122bd341f7ca 100644 --- a/scripts/SetHBA_BF.py +++ b/scripts/SetHBA_BF.py @@ -13,13 +13,13 @@ setAntmask([RCU],AntMask) i=(RCU*3+HBAT)*32+HBA*2 -val=get_value(name+"_R") -print("old:",val[i:i+2]) +val,tp=get_value_type(name+"_R") +print("old:",tp,val[i:i+2]) val[i]=BFX val[i+1]=BFY -set_value(name+"_RW",val) +set_value(name+"_RW",val,tp) time.sleep(1) val=get_value(name+"_R") print("new:",val[i:i+2]) diff --git a/scripts/SetMonitor.py b/scripts/SetMonitor.py index b9bc725836b55d98d56cbfea0425773f84065ddf..8129c81f55a37cf444c8f22d0b69da9d21d6da3e 100644 --- a/scripts/SetMonitor.py +++ b/scripts/SetMonitor.py @@ -1,6 +1,6 @@ from test_common import * connect() -rate= 1 #seconds +rate= 0 #seconds name="RECVTR_monitor_rate_RW" print("old:",get_value(name))