diff --git a/pypcc/config/APSCTTR_L2TS1.yaml b/pypcc/config/APSCTTR_L2TS1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..512d1caad9b7a5271f29e9f298ff2df848c8bff1 --- /dev/null +++ b/pypcc/config/APSCTTR_L2TS1.yaml @@ -0,0 +1,402 @@ +version: "1.0" +description: "1234" + +drivers: + - name: I2C + type: i2c + parameters: [5] #I2C port number + - name: I2C_CLK + type: i2c_dev #I2C devices + parent: I2C + status: APSCTTR_I2C_error + - name: SPIbb1 + type: spibitbang2 #SPI bitbang via GPIO expander: CLK, SDI,SDO,CS + parent: I2C_CLK + devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO1,IO1.GPIO1] + parameters: [4,7,5,6] + - name: SPIbb2 + type: spibitbang2 #SPI bitbang via GPIO expander: CLK, SDI,SDO,CS + parent: I2C_CLK + devreg: [IO2.GPIO1,IO2.GPIO1,IO2.GPIO1,IO2.GPIO1] + parameters: [4,7,5,6] + +#This is the I2C devices in the RCU +device_registers: + - name: IO + dim: 2 + description: IO-Expander (TCA6416APWR) + address: [0x20,0x21] + driver: I2C_CLK + 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] #Read / Write address different + store: True + + - name: PLL2 + driver: SPIbb1 + registers: + - name: PLL_stat + description: PLL locked status + address: 0x0 + - {name: r3, address: 0x03} + - {name: r5, address: 0x05} + - {name: r6, address: 0x06} + + - name: PLL1 + driver: SPIbb2 + registers: + - name: PLL_stat + description: PLL locked status + address: 0x0 + - {name: r3, address: 0x03} + - {name: r5, address: 0x05} + - {name: r6, address: 0x06} + + - name: ROM + description: 24AA02UIDT + address: 0x50 + driver: I2C_CLK + registers: + - name: ID + description: Random + address: 0xfc + - name: Version + description: Set in production + address: 0 + - name: Serial + address: 0x20 + + - name: VSENSE + description: Monitor ADC + address: 0x74 + device: LTC2495 + driver: I2C_CLK + registers: + - name: V_0 + address: 0xB080 + wait: 250 + - name: V_1 + address: 0xB880 + wait: 250 + - name: V_2 + address: 0xB180 + wait: 250 + - name: V_3 + address: 0xB980 + wait: 250 + - name: V_4 + address: 0xB280 + wait: 250 + - name: V_5 + address: 0xBA80 + wait: 250 + - name: V_6 + address: 0xB380 + wait: 250 + - name: Temp + address: 0xA0C0 + wait: 250 + + +variables: + - name: APSCTTR_I2C_error + description: 0=good, >0 indicates an I2C communication error + driver: I2C_CLK + rw: ro #server RW variable, not linked to IO + dtype: uint8 + + - name: APSCTTR_monitor_rate + description: Monitor rate in seconds + rw: variable + dtype: uint8 + + - name: APSCTTR_translator_busy + description: True when I2C line busy + rw: ro #server variable, not linked to IO + dtype: boolean + dim: 1 + + - name: APSCT_PCB_ID + description: Unique PCB ID + driver: I2C_CLK + devreg: ROM.ID + width: 32 + rw: ro + dtype: uint32 + + - name: APSCT_PCB_version + description: Version number + driver: I2C_CLK + devreg: ROM.Version + width: 0x80 #16 characters + rw: ro + dtype: string + + - name: APSCT_PCB_number + description: PCB number (astron.nl/webforms/IenS-Boarden/view.php?id=xxx) + driver: I2C_CLK + devreg: ROM.Serial + width: 0x80 #16 characters + rw: ro + dtype: string + + + - name: [APSCT_PWR_PLL_200MHz_on,APSCT_PWR_PLL_160MHz_on] + description: CLK power status. Controlled by APSCT_xxxMHz_ON and APSCT_OFF + rw: ro + dtype: boolean + driver: I2C_CLK + devreg: [IO1.GPIO1,IO2.GPIO1] + bitoffset: 1 + width: 1 + + - name: APSCT_PWR_on + description: CLK power status. Controlled by APSCT_xxxMHz_ON and APSCT_OFF + rw: ro + dtype: boolean + driver: I2C_CLK + devreg: IO1.GPIO2 + bitoffset: 3 + width: 1 + + - name: APSCT_PPS_ignore + rw: rw + dtype: boolean + driver: I2C_CLK + devreg: IO1.GPIO2 + bitoffset: 2 + width: 1 + + - name: [APSCT_INPUT_10MHz_good,APSCT_INPUT_PPS_good] + rw: ro + dtype: boolean + driver: I2C_CLK + devreg: IO2.GPIO2 + bitoffset: [0,1] + width: 1 + monitor: true + + + - name: [APSCT_PLL_200MHz_locked,APSCT_PLL_160MHz_locked] +# description: First status pin give lock status + rw: ro + dtype: boolean + monitor: true + driver: I2C_CLK + devreg: [IO1.GPIO1,IO2.GPIO1] + bitoffset: 2 + width: 1 + + - name: [APSCT_PLL_200MHz_error,APSCT_PLL_160MHz_error] +# description: Second status pin give error + rw: ro + dtype: boolean + monitor: true + driver: I2C_CLK + devreg: [IO1.GPIO1,IO2.GPIO1] + bitoffset: 3 + width: 1 + + - name: APSCT_PLL_200MHz_locked_SPI + description: 0x81=locked + driver: I2C_CLK + devreg: PLL2.PLL_stat + width: 8 + rw: ro + dtype: uint8 + debug: True + + - name: APSCT_PLL_160MHz_locked_SPI + description: 0x81=locked + driver: I2C_CLK + devreg: PLL1.PLL_stat + width: 8 + rw: ro + dtype: uint8 + debug: True + +# - name: [APSCT_PLL_r3,APSCT_PLL_r5,APSCT_PLL_r6] +# driver: I2C_CLK +# devreg: [PLL.r3,PLL.r5,PLL.r6] +# width: 8 +# rw: ro +# dtype: uint8 +# debug: True + + - name: [APSCT_IO1_GPIO1,APSCT_IO1_GPIO2,APSCT_IO2_GPIO1,APSCT_IO2_GPIO2] + driver: I2C_CLK + devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1,IO2.GPIO2] + width: 8 + rw: ro + dtype: uint8 + debug: True + + - name: APSCT_IO2_GPIO1 + driver: I2C_CLK + devreg: IO2.GPIO1 + width: 8 + rw: ro + dtype: uint8 + debug: True + + - name: APSCT_TEMP + description: Temperature sensor on PCB + driver: I2C_CLK + devreg: VSENSE.Temp + width: 23 + scale: 3.8265e-3 + convert_unit: Kelvin2Celsius + rw: ro + dtype: double + monitor: true + + - name: [APSCT_PWR_INPUT_3V3,APSCT_PWR_PLL_160MHz_3V3,APSCT_PWR_PLL_200MHz_3V3,APSCT_PWR_CLKDIST1_3V3,APSCT_PWR_CLKDIST2_3V3,APSCT_PWR_PPSDIST_3V3,APSCT_PWR_CTRL_3V3] + driver: I2C_CLK + devreg: [VSENSE.V_0,VSENSE.V_1,VSENSE.V_2,VSENSE.V_3,VSENSE.V_4,VSENSE.V_5,VSENSE.V_6] + width: 23 + scale: 1.12165e-6 + rw: ro + dtype: double + monitor: true + + +methods: + - name: APSCTTR_Init #Called after startup to load. Should have all stored registers + driver: I2C_CLK + debug: True + instructions: + - APSCTTR_I2C_error : 0 + - APSCT_IO1_GPIO1 : Update + - APSCT_IO1_GPIO2 : Update + - APSCT_IO2_GPIO1 : Update + - APSCT_IO2_GPIO2 : Update + - IO1.CONF1: Update + - IO1.CONF2: Update + - IO2.CONF1: Update + - IO2.CONF2: Update + - APSCTTR_Update: 0 + + - name: APSCTTR_Update + driver: I2C_CLK + debug: True + instructions: + - APSCT_PCB_ID : Update + - APSCT_PCB_version : Update + - APSCT_PCB_number : Update + - APSCT_PWR_on: Update + - APSCT_PWR_PLL_200MHz_on: Update + - APSCT_PLL_200MHz_locked: Update + - APSCT_PLL_200MHz_error: Update + - APSCT_PWR_PLL_160MHz_on: Update + - APSCT_PLL_160MHz_locked: Update + - APSCT_PLL_160MHz_error: Update + - APSCT_PPS_ignore : Update + + - name: APSCT_200MHz_on + driver: I2C_CLK + description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked + instructions: + - APSCTTR_I2C_error : 0 + - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO1.CONF2: 0x00 + - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO2.CONF2: 0x03 # + - IO1.GPIO1: 0x42 #0100 0010 high:200MHz PLL enable, CS high + - IO1.GPIO2: 0xF8 #PWR enable ##Check if not 4?? + - IO2.GPIO1: 0x00 #All low + - IO2.GPIO2: 0x00 #All low (just inputs) + + - WAIT: 200 + - APSCT_PLL200_setup: 0 + - WAIT: 200 #ms to wait before checking lock + - APSCTTR_Update: 0 #refresh all settings + + - name: APSCT_160MHz_on + driver: I2C_CLK + description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked + instructions: + - APSCTTR_I2C_error : 0 + - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO1.CONF2: 0x00 + - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO2.CONF2: 0x03 # + - IO1.GPIO1: 0x00 + - IO1.GPIO2: 0x08 #PWR enable ##Check if not 4?? + - IO2.GPIO1: 0x42 #0100 0010 high:160MHz PLL enable, CS high + - IO2.GPIO2: 0x00 #All low (just inputs) + + - WAIT: 200 + - APSCT_PLL160_setup: 0 + - WAIT: 200 #ms to wait before checking lock + - APSCTTR_Update: 0 #refresh all settings + + - name: APSCT_off + driver: I2C_CLK + description: Switch clock off. Monitored using APSCT_PWR_on + instructions: + - APSCTTR_I2C_error : 0 + - IO1.GPIO1: 0x00 + - IO1.GPIO2: 0x00 + - IO2.GPIO1: 0x00 + - IO2.GPIO2: 0x00 + - APSCTTR_Update: 0 #refresh all settings + + - name: APSCT_PLL200_setup + driver: I2C_CLK + debug: true + instructions: +# - PLL2.0x03: 0x08 #Set power, this is default + - PLL2.0x04: 0xCF # + - PLL2.0x05: 0x97 #was 97, set lock time = =x17? + - PLL2.0x06: 0x10 + + - PLL2.0x07: 0x04 #Stop R divider + - PLL2.0x08: 0x01 #Set R divider + - PLL2.0x07: 0x00 #Start R divider + + - PLL2.0x09: 0x10 #Stop N divider + - PLL2.0x0A: 0x14 #Set N divider=20, 200MHz/20=10MHz = input clock + - PLL2.0x09: 0x00 #Start N divider + + - PLL2.0x0D: 0x01 #Divider output 1=1 + - PLL2.0x0F: 0x01 #Divider output 2=1 + - PLL2.0x11: 0x01 #Divider output 3=1 + - PLL2.0x13: 0x01 #Divider output 4=1 + + - name: APSCT_PLL160_setup + driver: I2C_CLK + debug: true + instructions: +# - PLL1.0x03: 0x08 #Set power, this is default + - PLL1.0x04: 0xCF # + - PLL1.0x05: 0x97 #was 97, set lock time = =x17? + - PLL1.0x06: 0x10 + + - PLL1.0x07: 0x04 #Stop R divider + - PLL1.0x08: 0x01 #Set R divider + - PLL1.0x07: 0x00 #Start R divider + + - PLL1.0x09: 0x10 #Stop N divider + - PLL1.0x0A: 0x10 #Set N divider=16, 160MHz/16=10MHz = input clock + - PLL1.0x09: 0x00 #Start N divider + + - PLL1.0x0D: 0x01 #Divider output 1=1 + - PLL1.0x0F: 0x01 #Divider output 2=1 + - PLL1.0x11: 0x01 #Divider output 3=1 + - PLL1.0x13: 0x01 #Divider output 4=1 + + + diff --git a/pypcc/config/UNB2TR_L2TS1.yaml b/pypcc/config/UNB2TR_L2TS1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a804f92b67ee2bd98dc848de9517ba41e2b300f5 --- /dev/null +++ b/pypcc/config/UNB2TR_L2TS1.yaml @@ -0,0 +1,511 @@ +version: "0.0" +description: "UNB2 DTS first draft" + +drivers: + - name: I2C1 + type: i2c_switch2 + devreg: [APSCT_SWITCH.MASK,UB2_SWITCH1.MASK,UB2_SWITCH2.MASK] + parameters: [3,0,0,0] #I2C port number, 3x switch reset pins + + - name: switch_UNB2 + type: i2c_array + parent: I2C1 + parameters: [0,1] #lookup table + I2Ccut: 10 + status: UNB2TR_I2C_bus_error + + - name: switch_PS + type: i2c_array2 + parent: I2C1 + parameters: [0,1, 4,4] + status: UNB2TR_I2C_bus_PS_error + + - name: switch_FP + type: i2c_array2 + parent: I2C1 + parameters: [0,1, 5,5] + status: UNB2TR_I2C_bus_FP_error + + - name: switch_QSFP + type: i2c_array2 #An array of similar devices connected to an I2C switch + parent: I2C1 + parameters: [0,1, 0,3, 0,3, 6,7] #Parameters: APSCT_Switch, main switch, 2nd switch, 2nd switch + status: UNB2TR_I2C_bus_QSFP_error + + - name: switch_DDR4 + type: i2c_array2 + parent: I2C1 + parameters: [0,1, 0,3, 4,4] + status: UNB2TR_I2C_bus_DDR4_error + + - name: switch_FPGA_PS + type: i2c_array2 + parent: I2C1 + parameters: [0,1, 0,3, 5,5] + status: UNB2TR_I2C_bus_FPGA_PS_error + + - name: GPIO + type: gpio + parameters: [19,26] + + - name: I2C_GPIO + type: gpio + parameters: [11,13] + + +#This is the I2C devices in the RCU +device_registers: +- name: APSCT_SWITCH #not in LTS + description: Uniboard select switch on APSCT + address: 0x70 + device: TCA9548 + driver: I2C1 + registers: + - name: MASK +- name: UB2_SWITCH1 + description: UNB2 primary switch + address: 0x71 + device: TCA9548 + driver: I2C1 + registers: + - name: MASK +- name: UB2_SWITCH2 + description: UNB2 secondary switch + address: 0x72 + device: TCA9548 + driver: I2C1 + registers: + - name: MASK + +- name: FP_IO + description: IO-Expander for front panel + address: 0x41 + device: PCA9536 + driver: switch_FP + registers: + - name: CONF #default 0xff = all input + description: Direction of GPIO + address: 3 + - name: GPIO + description: Input/Ouput port + address: [0,1] #Read / Write address different + store: True + + +- name: DC_DC + address: 0x2C + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_CORE + address: 0x1 + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_ERAM + address: 0xD + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_RXGXB + address: 0xE + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_TXGXB + address: 0xF + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_HGXB + address: 0x10 + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_PGM + address: 0x11 + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +- name: POL_QSFP0 + address: 0x2 + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} +- name: POL_QSFP1 + address: 0x1 + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} +- name: POL_SW1V2 + address: 0xF + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} +- name: POL_SWPHY + address: 0xE + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} +- name: POL_CLOCK + address: 0xD + driver: I2C_switch2 + registers: + - { name: "TEMP", address: 0x8D, crc: True} + - { name: "VIN" , address: 0x88, crc: True} + - { name: "VOUT", address: 0x8B, crc: True} + - { name: "IOUT", address: 0x8C, crc: True} + +variables: + +#When I2C bus timeout, bus_error set to False. Can we set to True again to retry. + - name: UNB2TR_I2C_bus_error + driver: switch_UNB2 + rw: ro + dtype: uint8 + dim: 2 + - name: UNB2TR_I2C_bus_FP_error + driver: switch_UNB2 + rw: hidden + dtype: uint8 + dim: 2 + - name: UNB2TR_I2C_bus_QSFP_error + driver: switch_QSFP + rw: ro + dtype: uint8 + dim: 48 + dim2: [24,2] + - name: UNB2TR_I2C_bus_DDR4_error + driver: switch_QSFP + rw: ro + dtype: uint8 + dim: 8 + dim2: [4,2] + - name: UNB2TR_I2C_bus_FPGA_PS_error + driver: switch_FPGA_PS + rw: ro + dtype: uint8 + dim: 8 + dim2: [4,2] + - name: UNB2TR_I2C_bus_PS_error + driver: switch_PS + rw: ro + dtype: uint8 + dim: 2 + + - name: UNB2TR_monitor_rate + description: Monitor rate in seconds + rw: variable + dtype: uint8 + + - name: UNB2TR_translator_busy + description: False when idle + rw: ro #server variable, not linked to IO + dtype: boolean + +##Central MP for whole Uniboard2 + - name: UNB2_mask + rw: variable #translator variable + dtype: boolean + dim: 2 + + - name: UNB2_PWR_on + driver: GPIO + mask: UNB2_mask + width: 1 + rw: ro + dtype: boolean + convert_unit: bool_invert + dim: 2 + + - name: UNB2_I2C_enabled + driver: I2C_GPIO + mask: UNB2_mask + width: 1 + rw: ro + dtype: boolean + dim: 2 + + - name: UNB2_Front_Panel_LED_colour + description: bit 0=Red, 1=Blue, 2=Green + mask: UNB2_mask + driver: switch_FP + devreg: FP_IO.GPIO +# bitoffset: 4 + width: 3 + rw: rw + dtype: uint8 + dim: 2 + + - name: UNB2_PCB_version + driver: switch_UNB2 + devreg: 0x50.0 + width: 0x80 #16 char + rw: ro + dtype: string + dim: 2 + + - name: UNB2_PCB_number + description: PCB number (astron.nl/webforms/IenS-Boarden/view.php?id=xxx) + driver: switch_UNB2 + devreg: 0x50.0x20 + width: 0x80 #16 characters + rw: ro + dtype: string + dim: 2 + + - name: UNB2_PCB_ID + driver: switch_UNB2 + devreg: 0x50.0xFC + width: 32 + rw: ro + dtype: uint32 + dim: 2 + + + - name: [UNB2_DC_DC_48V_12V_VIN,UNB2_DC_DC_48V_12V_VOUT] + driver: switch_PS + devreg: [DC_DC.VIN,DC_DC.VOUT] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 4.8828125e-4 #2^-11 + dim: 2 + monitor: true + + - name: [UNB2_DC_DC_48V_12V_VOUT_MODE,UNB2_POL_QSFP_N01_VOUT_MODE,UNB2_POL_QSFP_N23_VOUT_MODE,UNB2_POL_SWITCH_1V2_VOUT_MODE,UNB2_POL_SWITCH_PHY_VOUT_MODE,UNB2_POL_CLOCK_VOUT_MODE] + driver: switch_PS + devreg: [0x2C.0x20,0x2.0x20,0x1.0x20,0xF.0x20,0xE.0x20,0xD.0x20] + width: 8 + rw: ro + dtype: uint8 + dim: 2 + debug: true + monitor: true + + - name: [UNB2_POL_QSFP_N01_VOUT,UNB2_POL_QSFP_N23_VOUT] + driver: switch_PS +# devreg: [0x2.0x8B,0x1.0x8B] + devreg: [POL_QSFP0.VOUT,POL_QSFP1.VOUT] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 1.220703125e-4 #2^-13 + dim: 2 + monitor: true + + - name: [UNB2_POL_SWITCH_1V2_VOUT,UNB2_POL_SWITCH_PHY_VOUT,UNB2_POL_CLOCK_VOUT] + driver: switch_PS +# devreg: [0xF.0x8B,0xE.0x8B,0xD.0x8B] + devreg: [POL_SW1V2.VOUT,POL_SWPHY.VOUT,POL_CLOCK.VOUT] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 2.44140625e-4 #2^-12 + dim: 2 + monitor: true + + - name: [UNB2_DC_DC_48V_12V_IOUT,UNB2_POL_QSFP_N01_IOUT,UNB2_POL_QSFP_N23_IOUT,UNB2_POL_SWITCH_1V2_IOUT,UNB2_POL_SWITCH_PHY_IOUT,UNB2_POL_CLOCK_IOUT] + driver: switch_PS +# devreg: [DC_DC.IOUT,0x2.0x8C,0x1.0x8C,0xF.0x8C,0xE.0x8C,0xD.0x8C] + devreg: [DC_DC.IOUT,POL_QSFP0.IOUT,POL_QSFP1.IOUT,POL_SW1V2.IOUT,POL_SWPHY.IOUT,POL_CLOCK.IOUT] + width: 16 + rw: ro + dtype: double + scale: smbus_2bytes_to_float + dim: 2 + monitor: true + + - name: [UNB2_DC_DC_48V_12V_TEMP,UNB2_POL_QSFP_N01_TEMP,UNB2_POL_QSFP_N23_TEMP,UNB2_POL_SWITCH_1V2_TEMP,UNB2_POL_SWITCH_PHY_TEMP,UNB2_POL_CLOCK_TEMP] + driver: switch_PS +# devreg: [DC_DC.TEMP,0x2.0x8D,0x1.0x8D,0xF.0x8D,0xE.0x8D,0xD.0x8D] + devreg: [DC_DC.TEMP,POL_QSFP0.TEMP,POL_QSFP1.TEMP,POL_SW1V2.TEMP,POL_SWPHY.TEMP,POL_CLOCK.TEMP] + width: 16 + rw: ro + dtype: double + scale: smbus_2bytes_to_float + dim: 2 + monitor: true + +##Local MP per FPGA node + - name: UNB2_FPGA_DDR4_SLOT_TEMP + driver: switch_DDR4 + devreg: [0x18.0x5,0x19.0x5] + width: 13 + rw: ro + dtype: double + scale: 0.0625 + dim: 16 + dim2: [8,2] + monitor: true + + - name: UNB2_FPGA_DDR4_SLOT_PART_NUMBER + driver: switch_DDR4 + devreg: [0x18.0x149,0x19.0x149] + width: 160 + rw: hidden #ro + dtype: string + dim: 16 + dim2: [8,2] +# monitor: true + + - name: [UNB2_FPGA_POL_CORE_IOUT,UNB2_FPGA_POL_ERAM_IOUT,UNB2_FPGA_POL_RXGXB_IOUT,UNB2_FPGA_POL_TXGXB_IOUT,UNB2_FPGA_POL_HGXB_IOUT,UNB2_FPGA_POL_PGM_IOUT] + driver: switch_FPGA_PS +# devreg: [0x1.0x8C,0xD.0x8C,0xE.0x8C,0xF.0x8C,0x10.0x8C,0x11.0x8C] + devreg: [POL_CORE.IOUT,POL_ERAM.IOUT,POL_RXGXB.IOUT,POL_TXGXB.IOUT,POL_HGXB.IOUT,POL_PGM.IOUT] + width: 16 + rw: ro + dtype: double + scale: smbus_2bytes_to_float + dim: 8 + dim2: [4,2] + monitor: true + + - name: [UNB2_FPGA_POL_CORE_TEMP,UNB2_FPGA_POL_ERAM_TEMP,UNB2_FPGA_POL_RXGXB_TEMP,UNB2_FPGA_POL_TXGXB_TEMP,UNB2_FPGA_POL_HGXB_TEMP,UNB2_FPGA_POL_PGM_TEMP] + driver: switch_FPGA_PS +# devreg: [0x1.0x8D,0xD.0x8D,0xE.0x8D,0xF.0x8D,0x10.0x8D,0x11.0x8D] + devreg: [POL_CORE.TEMP,POL_ERAM.TEMP,POL_RXGXB.TEMP,POL_TXGXB.TEMP,POL_HGXB.TEMP,POL_PGM.TEMP] + width: 16 + rw: ro + dtype: double + scale: smbus_2bytes_to_float + dim: 8 + dim2: [4,2] + monitor: true + + - name: [UNB2_FPGA_POL_CORE_VOUT] + driver: switch_FPGA_PS + devreg: [POL_CORE.VOUT] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 1.220703125e-4 #2^-13 + dim: 8 + dim2: [4,2] + monitor: true + + - name: [UNB2_FPGA_POL_ERAM_VOUT,UNB2_FPGA_POL_RXGXB_VOUT,UNB2_FPGA_POL_TXGXB_VOUT,UNB2_FPGA_POL_HGXB_VOUT,UNB2_FPGA_POL_PGM_VOUT] + driver: switch_FPGA_PS + devreg: [POL_ERAM.VOUT,POL_RXGXB.VOUT,POL_TXGXB.VOUT,POL_HGXB.VOUT,POL_PGM.VOUT] +# devreg: [0xD.0x8B,0xE.0x8B,0xF.0x8B,0x10.0x8B,0x11.0x8B] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 2.44140625e-4 #2^-12 + dim: 8 + dim2: [4,2] + monitor: true + + - name: [UNB2_FPGA_POL_CORE_VOUT_MODE,UNB2_FPGA_POL_ERAM_VOUT_MODE,UNB2_FPGA_POL_RXGXB_VOUT_MODE,UNB2_FPGA_POL_TXGXB_VOUT_MODE,UNB2_FPGA_POL_HGXB_VOUT_MODE,UNB2_FPGA_POL_PGM_VOUT_MODE] + driver: switch_FPGA_PS + devreg: [0x1.0x20,0xD.0x20,0xE.0x20,0xF.0x20,0x10.0x20,0x11.0x20] + width: 8 + rw: ro + dtype: uint8 + dim: 8 + dim2: [4,2] + debug: true +# monitor: true + + +##Local MP per FPGA node, QSFP cage + - name: UNB2_FPGA_QSFP_CAGE_TEMP + driver: switch_QSFP + devreg: 0x50.0x16 + width: 16 + rw: ro + dtype: double + scale: 3.90625e-3 #1/256 + convert_unit: temp_check + dim: 48 + dim2: [24,2] + monitor: true + + - name: UNB2_FPGA_QSFP_CAGE_LOS + description: Bits for 4 TX, 4 RX channels + driver: switch_QSFP + devreg: 0x50.0x03 + width: 8 + rw: ro + dtype: uint8 + dim: 48 + dim2: [24,2] + monitor: true + +methods: + - name: UNB2TR_Init #Called after startup to load. + driver: switch_UNB2 + debug: True + instructions: + - UNB2TR_I2C_error: 0 + - UNB2_I2C_enabled: 1 #Make sure I2C switches are enabled + - UNB2_PCB_ID: Update + - UNB2_PCB_version: Update + - UNB2_PCB_number: Update +# - FP_IO.CONF: 0xf8 #bit 0-2 output for LED + - UNB2_Front_Panel_LED_colour: Update + - UNB2_PWR_on: Update + + - name: UNB2_on + mask: UNB2_mask + driver: switch_FP + instructions: + - UNB2_I2C_enabled: 1 #Make sure I2C switches are enabled + - FP_IO.CONF: 0xf8 #bit 0-2 output for LED + - UNB2_PWR_on: 0 #already inverted + - UNB2_Front_Panel_LED_colour: 3 #green + - UNB2_PCB_ID: Update + - UNB2_PCB_version: Update + - WAIT: 5000 + + - name: UNB2_off + mask: UNB2_mask + instructions: + - UNB2_PWR_on: 1 #inverted + - WAIT: 5000 +# - UNB2_Front_Panel_LED_colour: 2