diff --git a/pypcc/config/RECVTR_HBQM_TEST.yaml b/pypcc/config/RECVTR_HBQM_TEST.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0c4ed159efa66121f9de0b1792da3c1d95a08ab3 --- /dev/null +++ b/pypcc/config/RECVTR_HBQM_TEST.yaml @@ -0,0 +1,654 @@ +version: "1.0" +description: "1234" +name: "RECVTR" + +drivers: + - name: I2C1 #TCA9548 + type: i2c_iss + parameters: [4] #COM port + - name: I2C_RCU + type: i2c_dev #I2C devices + parent: I2C1 + status: CLK_I2C_STATUS + - 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 + +#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: I2C_RCU + 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] + - name: PA_CONFIG + address: [0x1260,0x1160] + store: True + +variables: + - name: RCU_I2C_STATUS + driver: I2C_RCU + rw: ro #server RW variable, not linked to IO + dtype: uint8 + + - name: [CH1_attenuator_dB,CH2_attenuator_dB,CH3_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: 3 + + - name: [CH1_band_select,CH2_band_select,CH3_band_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 + + + - 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 + + - 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 + + - 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 + + - name: RCU_TEMP + description: RCU PCB Temperature (Celsius) + driver: I2C_RCU + devreg: AN.Temp + width: 23 + scale: 4.210e-3 #Scaled 1.1 for 3.3V ref. 3.827e-3 for 3.0V #T=DATAOUT * Vref/12.25/32. Vref=1.5 V + convert_unit: Kelvin2Celsius + rw: ro + dtype: double + + - name: RCU_PWR_3V3 + description: RCU 3.3V voltage (V) + driver: I2C_RCU + devreg: AN.V_3v3 + width: 23 + scale: 1.609e-6 #Scaled 1.1: 1.463e-6 #3.0V + rw: ro + dtype: double + + - name: RCU_PWR_1V8 + description: RCU 1.8V voltage (V) + driver: I2C_RCU + devreg: AN.V_1v8 + width: 23 + scale: 7.8679e-7 #Scaled 1.1: 7.1526e-7 #3.0V ref + rw: ro + dtype: double + + - name: RCU_PWR_2V5 + description: RCU 2.5V voltage (V) + driver: I2C_RCU + devreg: AN.V_2v5 + width: 23 + scale: 7.8679e-7 #Scaled 1.1: 7.1526e-7 #3.0V ref + rw: ro + dtype: double + + - name: [CH1_PWR_ANT_VOUT,CH2_PWR_ANT_VOUT,CH3_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: 1.57356e-5 #Scaled 1.1: 1.43051e-5 #3V ref + rw: ro + dtype: double + + - name: [CH1_PWR_ANT_VIN,CH2_PWR_ANT_VIN,CH3_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: 1.57356e-5 #Scaled 1.1: 1.43051e-5 #3V ref + rw: ro + dtype: double + + - name: [CH1_PWR_ANT_IOUT,CH2_PWR_ANT_IOUT,CH3_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: 2.62262e-7 #4.5K res + rw: ro + dtype: double + + - 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 + + - 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 + + - 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 + + - name: [CH1_DTH_shutdown,CH2_DTH_shutdown,CH3_DTH_shutdown] + description: False means dither source & ADC powered on. + driver: I2C_RCU + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.GPIO2] + width: 1 + bitoffset: [7,6,7] + rw: ro + dtype: boolean + + - name: CH1_PWR_ANT_on + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: IO1.GPIO1 + width: 1 + bitoffset: 6 + rw: rw + dtype: boolean + + - name: CH2_PWR_ANT_on + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: IO1.GPIO1 + width: 1 + bitoffset: 7 + rw: rw + dtype: boolean + + - name: [CH3_PWR_ANT_on] + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: IO1.GPIO2 + width: 1 + bitoffset: 6 + rw: rw + dtype: boolean + +# - name: [CH1_PWR_ANT_on,CH2_PWR_ANT_on,CH3_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 + + + - name: RCU_PCB_ID + description: Unique PCB ID + driver: I2C_RCU + devreg: ROM.ID + width: 32 + rw: ro + dtype: uint32 + + - name: RCU_PCB_version + description: RCU version number + driver: I2C_RCU + devreg: ROM.Version + width: 0x100 #32 characters + rw: ro + dtype: string + + - name: RCU_PCB_number + description: PCB number (astron.nl/webforms/IenS-Boarden/view.php?id=xxx) + driver: I2C_RCU + devreg: ROM.Serial + width: 0x100 #32 characters + rw: ro + dtype: string + + + - name: [CH1_ADC_locked,CH2_ADC_locked,CH3_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 + + - name: [CH1_ADC_sync,CH2_ADC_sync,CH3_ADC_sync] + driver: I2C_RCU + devreg: [ADC1.SYNC_control,ADC2.SYNC_control,ADC3.SYNC_control] + width: 8 + rw: ro + dtype: uint8 + + - name: [CH1_ADC_JESD,CH2_ADC_JESD,CH3_ADC_JESD] + driver: I2C_RCU + devreg: [ADC1.JESD_control1,ADC2.JESD_control1,ADC3.JESD_control1] + width: 8 + rw: ro + dtype: uint8 + + - name: [CH1_ADC_CML_level,CH2_ADC_CML_level,CH3_ADC_CML_level] + driver: I2C_RCU + devreg: [ADC1.CML_level,ADC2.CML_level,ADC3.CML_level] + width: 8 + rw: ro + dtype: uint8 + + - name: [CH1_DTH_freq,CH2_DTH_freq,CH3_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 + + - name: [CH1_DTH_PWR,CH2_DTH_PWR,CH3_DTH_PWR] + description: RCU Dither source power (dBm). Range -25 to -4. + driver: I2C_RCU + devreg: [DTH1.PA_CONFIG,DTH2.PA_CONFIG,DTH3.PA_CONFIG] + width: 48 + rw: rw + dtype: double + scale: si4012_6bytes_to_pwr + + - name: [CH1_DTH_on,CH2_DTH_on,CH3_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 + + +#RCU2H points + - name: [CH1_RCU_DAB_filter_on,CH2_RCU_DAB_filter_on,CH3_RCU_DAB_filter_on] + description: DAB filter enable + driver: I2C_RCU + devreg: [IO4.GPIO1,IO4.GPIO1,IO4.GPIO1] + bitoffset: [0,2,4] + width: 2 + rw: rw + dtype: boolean + convert_unit: int12_to_bool + + - name: RCU_firmware_version + description: git firmware version + driver: I2C_RCU + devreg: HB_UC.firmware + width: 32 + rw: ro + dtype: uint32 + endian: "<" + +#HBAT points + - name: CH1_HBAT_BF_byte + driver: I2C_HBAT + devreg: HBAT1.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + - name: CH2_HBAT_BF_byte + driver: I2C_HBAT + devreg: HBAT2.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + - name: CH3_HBAT_BF_byte + driver: I2C_HBAT + devreg: HBAT3.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + + - name: CH1_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT1.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + - name: CH2_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT2.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + - name: CH3_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT3.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 + dim: 32 + wait: 1000 #ms + + - name: [RCU_IO4_GPIO1,RCU_IO4_GPIO2] + driver: I2C_RCU + devreg: [IO4.GPIO1,IO4.GPIO2] + width: 8 + rw: ro + dtype: uint8 + + +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 + - RCU_IO4_GPIO1: Update + - 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: 0x52 #0x09 #Band0 (or 0x12 or 0x24) #LED green=on=low 0x40 + - IO3.DIR1: 0 + - IO3.DIR2: 0 + - 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 + - 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 + + + - name: RCU_off + driver: I2C_RCU + mask: RCU_mask + instructions: + - IO1.GPIO1: 0 + - IO1.GPIO2: 0 + - IO2.GPIO1: 0 + - IO2.GPIO2: 0 + - IO3.GPIO1: 0 + - IO3.GPIO2: 0 + - IO4.GPIO1: 0 + - IO4.GPIO2: 0 + - IO2.CONF1: 0x80 #Pgood on 0x80 + - IO2.CONF2: 0 + - IO1.CONF1: 0 + - IO1.CONF2: 0 + - IO4.CONF1: 0xC0 #pin 0x40, 0x80 not used + - IO4.CONF2: 0xF8 + + - name: ADC_on + driver: I2C_RCU + debug: True + instructions: + - ADC1.JESD_control1 : 0x14 + - ADC1.SYNC_control: 1 #Setup ADCs + - ADC1.CML_level: 0x7 + - ADC1.dither : 0x00 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.JESD_control1 : 0x14 + - ADC2.SYNC_control: 1 #Setup ADCs + - ADC2.CML_level: 0x7 + - ADC2.dither : 0x00 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.JESD_control1 : 0x14 + - ADC3.SYNC_control: 1 #Setup ADCs + - ADC3.CML_level: 0x7 + - ADC3.dither : 0x00 + - ADC3.Update: 1 #Needed to update ADC registers \ No newline at end of file diff --git a/pypcc/config/RECVTR_HB_TEST.yaml b/pypcc/config/RECVTR_HB_TEST.yaml index 73a37c38569b812be5f15ecce713f8240ed0d14f..7b84b2b9285daeee5ba11f78dee2031d8aebab15 100644 --- a/pypcc/config/RECVTR_HB_TEST.yaml +++ b/pypcc/config/RECVTR_HB_TEST.yaml @@ -38,12 +38,12 @@ drivers: - name: SPIbb2 type: spibitbang1 devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2] - parameters: [3,2,2,1] + parameters: [1,2,2,1] parent: I2C_RCU - name: SPIbb3 type: spibitbang1 devreg: [IO3.GPIO1,IO3.GPIO1,IO3.CONF1,IO3.GPIO2] - parameters: [5,4,4,2] + parameters: [1,4,4,2] parent: I2C_RCU #This is the I2C devices in the RCU @@ -362,24 +362,61 @@ variables: rw: rw #rw for testing dtype: boolean - - name: [CH1_DTH_shutdown,CH2_DTH_shutdown,CH3_DTH_shutdown] - description: False means dither source & ADC powered on. + - name: RCU_DTH_shutdown + description: False means dither source powered on. driver: I2C_RCU - devreg: [IO3.GPIO1,IO3.GPIO1,IO3.GPIO2] + devreg: IO3.GPIO2 width: 1 - bitoffset: [7,6,7] - rw: ro + bitoffset: 7 + rw: rw + dtype: boolean + + - name: [CH1_ADC_shutdown,CH2_ADC_shutdown,CH3_ADC_shutdown] + description: False means ADC powered on. + driver: I2C_RCU + devreg: [IO3.GPIO1,IO3.GPIO1,IO3.GPIO1] + width: 1 + bitoffset: [6,3,5] + rw: rw dtype: boolean - - name: [CH1_PWR_ANT_on,CH2_PWR_ANT_on,CH3_PWR_ANT_on] + + - name: CH1_PWR_ANT_on description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. driver: I2C_RCU - devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO2] + devreg: IO1.GPIO1 width: 1 - bitoffset: [6,7,6] + bitoffset: 6 rw: rw dtype: boolean + - name: CH2_PWR_ANT_on + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: IO1.GPIO1 + width: 1 + bitoffset: 7 + rw: rw + dtype: boolean + + - name: [CH3_PWR_ANT_on] + description: Antenna power output ON/OFF control. Monitored by Ant_VOUT. + driver: I2C_RCU + devreg: IO1.GPIO2 + width: 1 + bitoffset: 6 + rw: rw + dtype: boolean + +# - name: [CH1_PWR_ANT_on,CH2_PWR_ANT_on,CH3_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 + - name: RCU_PCB_ID description: Unique PCB ID @@ -483,58 +520,69 @@ variables: endian: "<" #HBAT points - - name: [CH1_HBAT_BF_delay_steps,CH2_HBAT_BF_delay_steps,CH3_HBAT_BF_delay_steps] - description: HBAT1 frontend delays (0.5ns steps) + - name: CH1_HBAT_BF_byte driver: I2C_HBAT - devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] - bitoffset: [2,2,2] - width: 5 + devreg: HBAT1.XY + bitoffset: 0 + width: 8 rw: rw dtype: uint8 dim: 32 - wait: PPS -# wait: 1000 #ms - - - name: [RCU_IO4_GPIO1,RCU_IO4_GPIO2] - driver: I2C_RCU - devreg: [IO4.GPIO1,IO4.GPIO2] + wait: 1000 #ms + - name: CH2_HBAT_BF_byte + driver: I2C_HBAT + devreg: HBAT2.XY + bitoffset: 0 width: 8 - rw: ro + rw: rw dtype: uint8 - - - - name: [CH1_HBAT_LED_on,CH2_HBAT_LED_on,CH3_HBAT_LED_on] - description: HBA frontend control + dim: 32 + wait: 1000 #ms + - name: CH3_HBAT_BF_byte driver: I2C_HBAT - devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] + devreg: HBAT3.XY bitoffset: 0 - width: 1 + width: 8 rw: rw - dtype: boolean + dtype: uint8 dim: 32 + wait: 1000 #ms - - name: [CH1_HBAT_PWR_LNA_on,CH2_HBAT_PWR_LNA_on,CH3_HBAT_PWR_LNA_on] - description: HBA frontend control - driver: I2C_HBAT - devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] - bitoffset: 7 - width: 1 + - name: CH1_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT1.XY + bitoffset: 0 + width: 8 rw: rw - dtype: boolean + dtype: uint8 dim: 32 - wait: 1000 - - - name: [CH1_HBAT_PWR_on,CH2_HBAT_PWR_on,CH3_HBAT_PWR_on] - description: HBA frontend control - driver: I2C_HBAT - devreg: [HBAT1.XY,HBAT2.XY,HBAT3.XY] - bitoffset: 1 - width: 1 + wait: 1000 #ms + - name: CH2_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT2.XY + bitoffset: 0 + width: 8 rw: rw - dtype: boolean - convert_unit: bool_invert + dtype: uint8 + dim: 32 + wait: 1000 #ms + - name: CH3_HBAT_BF2_byte + driver: I2C_RCU + devreg: HBAT3.XY + bitoffset: 0 + width: 8 + rw: rw + dtype: uint8 dim: 32 - wait: 1000 + wait: 1000 #ms + + - name: [RCU_IO4_GPIO1,RCU_IO4_GPIO2] + driver: I2C_RCU + devreg: [IO4.GPIO1,IO4.GPIO2] + width: 8 + rw: ro + dtype: uint8 + methods: - name: RECVTR_Init #Called after startup to load. Should have all stored registers @@ -594,3 +642,30 @@ methods: - IO1.CONF2: 0 - IO4.CONF1: 0xC0 #pin 0x40, 0x80 not used - IO4.CONF2: 0xF8 + + - name: ADC_on + driver: I2C_RCU + debug: True + instructions: + - ADC1.JESD_control1 : 0x14 + - ADC1.SYNC_control: 1 #Setup ADCs + - ADC1.CML_level: 0x7 + - ADC1.dither : 0x00 + - ADC1.Update: 1 #Needed to update ADC registers + - ADC2.JESD_control1 : 0x14 + - ADC2.SYNC_control: 1 #Setup ADCs + - ADC2.CML_level: 0x7 + - ADC2.dither : 0x00 + - ADC2.Update: 1 #Needed to update ADC registers + - ADC3.JESD_control1 : 0x14 + - ADC3.SYNC_control: 1 #Setup ADCs + - ADC3.CML_level: 0x7 + - ADC3.dither : 0x00 + - ADC3.Update: 1 #Needed to update ADC registers + - CH1_ADC_shutdown : 1 + - CH2_ADC_shutdown : 1 + - CH3_ADC_shutdown : 1 + - WAIT: 100 #ms to wait + - CH1_ADC_shutdown : 0 + - CH2_ADC_shutdown : 0 + - CH3_ADC_shutdown : 0 \ No newline at end of file diff --git a/pypcc/i2cdirect.py b/pypcc/i2cdirect.py index 2c1ff4e4cbf2ea6ba192191e556d19afa6e5a953..cbbe0f779b786a8561fb1a5e3dba97c3b9ff75af 100644 --- a/pypcc/i2cdirect.py +++ b/pypcc/i2cdirect.py @@ -36,6 +36,16 @@ class i2cdirect(): data=data[0].data return byte2var(var1,data),var1 + def GetRaw(self,name): + varid=self.conf.getvarid(name); + if varid is None: + logging.error("Variable "+name+" not found") + return None,None + var1=self.conf.getvars()[varid] + drv=var1.get('drivercls'); + data=drv.OPCUAReadVariable(varid,var1,[]) + return data,var1 + def SetVal(self,name,data): varid=self.conf.getvarid(name); diff --git a/pypcc/i2cserv/hba1.py b/pypcc/i2cserv/hba1.py index 65d1fe56815757ed261fb9164c2dca1145f949c7..cf8a353accfb4f53e4578919db5cc0a03a323d45 100644 --- a/pypcc/i2cserv/hba1.py +++ b/pypcc/i2cserv/hba1.py @@ -28,10 +28,11 @@ class hba1(hwdev): def OPCUASetVariable(self,varid,var1,data,mask): 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)] + if len(mask)>0: + 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 - self.conf['parentcls'].SetSwitchMask(RCUmask) + self.conf['parentcls'].SetSwitchMask(RCUmask) if var1.get('wait')=="PPS": logging.info("HBA wait PPS") channel=GPIO.wait_for_edge(self.pin,GPIO.RISING,timeout=1500) @@ -82,4 +83,4 @@ class hba1(hwdev): logging.debug("getHba addr=0x%x reg=0x%x data=%s",addr,reg,str((data))) if data is None: return False # data[:]=[255]*len(data) - return True; \ No newline at end of file + return True; diff --git a/pypcc/i2cserv/i2c_dev.py b/pypcc/i2cserv/i2c_dev.py index 2e9900af3645b1f578b56d0d1210ed9feac93d65..12cfffac1ada88507493f0b523556fa4fa1ac707 100644 --- a/pypcc/i2cserv/i2c_dev.py +++ b/pypcc/i2cserv/i2c_dev.py @@ -149,7 +149,7 @@ class i2c_dev(hwdev): def i2csetget(self,*args,**kwargs): return self.conf['parentcls'].i2csetget(*args,**kwargs) - def SetGetVarValueMask(self,var1,data,mask): + def SetGetVarValueMask(self,var1,data,mask,getalso=False): Step,Step2=GetSteps(var1); value1=[0]*Step*Step2; # Step=(len(var1['devreg']) if isinstance(var1['devreg'],list) else 1) diff --git a/python_scripts/RCU_test1.py b/python_scripts/RCU_test1.py index 5ba14022d39e8eee6b02a79bee75001b0a980ec1..3ae209ee0b91b68e4ae8ec44cb5fc6f64a3dcbba 100644 --- a/python_scripts/RCU_test1.py +++ b/python_scripts/RCU_test1.py @@ -5,7 +5,7 @@ import logging logging.basicConfig(level="ERROR",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s') #logging.basicConfig(level="DEBUG",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s') -d1=i2cdirect('RECVTR_LB_TEST.yaml') +d1=i2cdirect('RECVTR_LB_TEST') def RCU_off(d1): logging.warning("Switch RCU Power off");