Skip to content
Snippets Groups Projects
Commit 9289f91e authored by Paulus Kruger's avatar Paulus Kruger
Browse files

DTS-lab-lite, conf changed, PCC object removed

parent 5d41b3da
No related branches found
No related tags found
No related merge requests found
import yamlconfig as yc import yamlconfig as yc
import sys
RW={'ro':'_R','rw':'_R/_RW','variable':'_RW'} RW={'ro':'_R','rw':'_R/_RW','variable':'_RW'}
Y=yc.yamlconfig('RECVTR') Y=yc.yamlconfig(sys.argv[1])
sep='\t' sep='\t'
#Sort alphabetically #Sort alphabetically
names=[(v['name']).upper() for v in Y.getvars()] names=[(v['name']).upper() for v in Y.getvars()]
...@@ -12,8 +12,9 @@ for i0 in SI: ...@@ -12,8 +12,9 @@ for i0 in SI:
v=Y.getvar1(i0) v=Y.getvar1(i0)
#for v in Y.getvars(): #for v in Y.getvars():
if v.get("debug",False): continue; if v.get("debug",False): continue;
if v.get("rw",False)=='hidden': continue;
S=v['name']+sep S=v['name']+sep
S+=str(v['dim'])+sep S+=str(v.get('dim',1))+sep
S+=str(v['dtype'])+sep S+=str(v['dtype'])+sep
S+=RW[v['rw']]+sep S+=RW[v['rw']]+sep
S+=v.get('mask','')+sep S+=v.get('mask','')+sep
......
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: CLK_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]
#This is the I2C devices in the RCU
device_registers:
- name: IO1
description: IO-Expander
address: 0x20
driver: I2C_CLK
registers:
- name: CONF1
description: Direction of port1
address: 6
store: True
- name: GPIO1
description: Input/Ouput port 1
address: [0,2] #Read / Write address different
store: True
- name: PLL
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: ROM
address: 0x50
driver: I2C_PU
registers:
- name: ID
description: Random
address: 0xfc
- name: Version
description: Set in production
address: 0
variables:
- name: APSCT_I2C_error
description: When >0 indicates an I2C error
driver: I2C_CLK
rw: ro #server RW variable, not linked to IO
dtype: uint8
- name: APSCTTR_translator_busy
description: False when idle
rw: ro #server variable, not linked to IO
dtype: boolean
dim: 1
- name: APSCT_ID
description: Unique PCB ID
driver: I2C_CLK
devreg: ROM.ID
width: 32
rw: ro
dtype: uint32
- name: APSCT_version
description: Version number
driver: I2C_CLK
devreg: ROM.Version
width: 80 #10 characters
rw: ro
dtype: string
- name: CLK_PWR_on
description: CLK power status. True=ON. Controlled by CLK_ON and CLK_OFF
rw: ro
dtype: boolean
driver: I2C_CLK
devreg: IO1.GPIO1
bitoffset: 1
width: 1
- name: CLK_PLL_locked
description: First status pin give lock status
rw: ro
dtype: boolean
monitor: true
driver: I2C_CLK
devreg: IO1.GPIO1
bitoffset: 2
width: 1
- name: CLK_PLL_error
description: Second status pin give error
rw: ro
dtype: boolean
monitor: true
driver: I2C_CLK
devreg: IO1.GPIO1
bitoffset: 3
width: 1
- name: CLK_PLL_locked_SPI
description: 0x81=locked
driver: I2C_CLK
devreg: PLL.PLL_stat
width: 8
rw: ro
dtype: uint8
debug: True
- name: [CLK_PLL_r3,CLK_PLL_r5,CLK_PLL_r6]
driver: I2C_CLK
devreg: [PLL.r3,PLL.r5,PLL.r6]
width: 8
rw: ro
dtype: uint8
debug: True
- name: RCU_IO1_GPIO1
driver: I2C_CLK
devreg: IO1.GPIO1
width: 8
rw: ro
dtype: uint8
mask: RCU_mask
debug: True
methods:
- name: APSCTTR_Init #Called after startup to load. Should have all stored registers
driver: I2C_CLK
debug: True
instructions:
- APSCT_I2C_error : 0
- RCU_IO1_GPIO1 : Update
- IO1.CONF1: Update
- CLK_PWR_on: Update
- CLK_PLL_locked: Update
- CLK_PLL_error: Update
- APSCT_ID : Update
- APSCT_version : Update
- name: CLK_on
driver: I2C_CLK
description: Configure clock. Monitored using CLK_PWR_on, CLK_PLL_error and CLK_PLL_locked
instructions:
- APSCT_I2C_error : 0
- IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI
- IO1.GPIO1: 0x42 #0100 0010 high:PWR enable, CS
- CLK_PWR_on: Update
- WAIT: 200 #ms to wait before checking lock
- CLK_PLL_setup: 0
- WAIT: 100 #ms to wait before checking lock
- CLK_PLL_locked: Update
- name: CLK_off
driver: I2C_CLK
description: Switch clock off. Monitored using CLK_PWR_on
instructions:
- APSCT_I2C_error : 0
- IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI
- IO1.GPIO1: 0x00 #all low
- CLK_PWR_on: Update
- CLK_PLL_locked: Update
- name: CLK_PLL_setup
driver: I2C_CLK
debug: true
instructions:
# - PLL.0x03: 0x08 #Set power, this is default
- PLL.0x05: 0x17 #was 97, set lock time
- PLL.0x06: 0x10
- PLL.0x07: 0x04 #Stop R divider
- PLL.0x08: 0x01 #Set R divider
- PLL.0x07: 0x00 #Start R divider
- PLL.0x09: 0x10 #Stop N divider
- PLL.0x0A: 0x14 #Set N divider=20, 200MHz/20=10MHz = input clock
- PLL.0x09: 0x00 #Start N divider
- PLL.0x0D: 0x01 #Divider output 1=1
- PLL.0x0F: 0x01 #Divider output 2=1
- PLL.0x11: 0x01 #Divider output 3=1
- PLL.0x13: 0x01 #Divider output 4=1
1version: "1.0"
description: "1234"
drivers:
- name: I2C
type: i2c_smbus
parameters: [4] #I2C port number
- name: I2C_PU
type: i2c_dev #I2C devices
parent: I2C
status: APSPU_I2C_error
#This is the I2C devices in the RCU
device_registers:
- name: ROM
address: 0x50
driver: I2C_PU
registers:
- name: ID
description: Random
address: 0xfc
- name: Version
description: Set in production
address: 0
- name: MAX
description: MAX6620 fan speed controller
address: 0x29
driver: I2C_PU
registers:
- name: GLOBAL
address: 0x00
- name: TACH1
address: 0x10
- name: TACH2
address: 0x12
- name: TACH3
address: 0x14
variables:
- name: APSPU_I2C_error
driver: I2C_PU
rw: ro #server RW variable, not linked to IO
dtype: uint8
- name: APSPUTR_translator_busy
description: False when idle
rw: ro #server variable, not linked to IO
dtype: boolean
- name: APSPU_ID
description: Unique PCB ID
driver: I2C_PU
devreg: ROM.ID
width: 32
rw: ro
dtype: uint32
- name: APSPU_version
description: Version number
driver: I2C_PU
devreg: ROM.Version
width: 80 #10 characters
rw: ro
dtype: string
- name: [APSPU_LBA_VOUT,APSPU_RCU2A_VOUT,APSPU_RCU2D_VOUT]
driver: I2C_PU
devreg: [0x3C.0x8B,0x3D.0x8B,0x3E.0x8B]
width: 16
rw: ro
dtype: double
endian: "<"
scale: 4.8828e-4 #2^-11
monitor: true
- name: [APSPU_LBA_IOUT,APSPU_RCU2A_IOUT,APSPU_RCU2D_IOUT]
driver: I2C_PU
devreg: [0x3C.0x8C,0x3D.0x8C,0x3E.0x8C]
width: 16
rw: ro
dtype: double
scale: smbus_2bytes_to_float
monitor: true
- name: [APSPU_LBA_TEMP,APSPU_RCU2A_TEMP,APSPU_RCU2D_TEMP]
driver: I2C_PU
devreg: [0x3C.0x8D,0x3D.0x8D,0x3E.0x8D]
width: 16
rw: ro
dtype: double
scale: smbus_2bytes_to_float
monitor: true
- name: [APSPU_FAN_period1,APSPU_FAN_period2,APSPU_FAN_period3]
driver: I2C_PU
devreg: [MAX.TACH1,MAX.TACH2,MAX.TACH3]
bitoffset: 5
width: 11
rw: ro
dtype: double
scale: 1.52588e-5 #FAN_TACHS/TACH_COUNT_FREQ/TACH_PERIODS = 1/8192/16 *2
# monitor: true
methods:
- name: APSPUTR_Init #Called after startup to load. Should have all stored registers
driver: I2C_PU
debug: True
instructions:
- APSPU_ID : Update
- APSPU_version : Update
- name: APSPU_FanOn
driver: I2C_PU
instructions:
- MAX.GLOBAL : 0x02; #Run monitor
- MAX.0x02 : 0x88;
- MAX.0x06 : 0x80; # int((math.log(TACH_PERIODS{16}) / math.log(2))) << 5,
- MAX.0x03 : 0x88;
- MAX.0x07 : 0x80;
- MAX.0x04 : 0x88;
- MAX.0x08 : 0x80;
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,10]
status: UNB2_I2C_bus_error
- name: switch_PS
type: i2c_array2
parent: I2C1
parameters: [0,1, 4,4]
status: UNB2_I2C_bus_PS_error
- name: switch_FP
type: i2c_array2
parent: I2C1
parameters: [0,1, 5,5]
status: UNB2_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: UNB2_I2C_bus_QSFP_error
- name: switch_DDR4
type: i2c_array2
parent: I2C1
parameters: [0,1, 0,3, 4,4]
status: UNB2_I2C_bus_DDR4_error
- name: switch_FPGA_PS
type: i2c_array2
parent: I2C1
parameters: [0,1, 0,3, 5,5]
status: UNB2_I2C_bus_FPGA_PS_error
- name: GPIO
type: gpio
#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: d_front_panel
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
variables:
#When I2C bus timeout, bus_error set to False. Can we set to True again to retry.
- name: UNB2_I2C_bus_error
driver: switch_UNB2
rw: ro
dtype: uint8
dim: 2
- name: UNB2_I2C_bus_FP_error
driver: switch_UNB2
rw: hidden
dtype: uint8
dim: 2
- name: UNB2_I2C_bus_QSFP_error
driver: switch_QSFP
rw: ro
dtype: uint8
dim: 48
- name: UNB2_I2C_bus_DDR4_error
driver: switch_QSFP
rw: ro
dtype: uint8
dim: 8
- name: UNB2_I2C_bus_FPGA_PS_error
driver: switch_FPGA_PS
rw: ro
dtype: uint8
dim: 8
- name: UNB2_I2C_bus_PS_error
driver: switch_PS
rw: ro
dtype: uint8
dim: 2
- name: UNB2TR_translator_busy
description: False when idle
rw: ro #server variable, not linked to IO
dtype: boolean
dim: 1
##Central MP for whole Uniboard2
- name: UNB2_mask
rw: variable #translator variable
dtype: boolean
dim: 2
- name: UNB2_Power_ON_OFF
driver: GPIO
mask: UNB2_mask
width: 1
rw: hidden #ro
dtype: boolean
dim: 2
- name: UNB2_Front_Panel_LED
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_EEPROM_Serial_Number
driver: switch_UNB2
devreg: 0x50.0
width: 80 #10 characters
rw: ro
dtype: string
dim: 2
- name: UNB2_EEPROM_Unique_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: [0x2C.0x88,0x2C.0x8B]
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]
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]
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: [0x2C.0x8C,0x2.0x8C,0x1.0x8C,0xF.0x8C,0xE.0x8C,0xD.0x8C]
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: [0x2C.0x8D,0x2.0x8D,0x1.0x8D,0xF.0x8D,0xE.0x8D,0xD.0x8D]
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
description: Signed I2C!
driver: switch_DDR4
devreg: [0x18.0x5,0x19.0x5]
width: 13
rw: ro
dtype: double
scale: 0.0625
dim: 16
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
# 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]
width: 16
rw: ro
dtype: double
scale: smbus_2bytes_to_float
dim: 8
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]
width: 16
rw: ro
dtype: double
scale: smbus_2bytes_to_float
dim: 8
monitor: true
- name: [UNB2_FPGA_POL_CORE_VOUT]
driver: switch_FPGA_PS
devreg: [0x1.0x8B]
width: 16
rw: ro
dtype: double
endian: "<"
scale: 1.220703125e-4 #2^-13
dim: 8
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: [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
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
debug: true
monitor: true
##Local MP per FPGA node, QSFP cage
- name: UNB2_FPGA_QSFP_CAGE_TEMP
description: Signed I2C!
driver: switch_QSFP
devreg: 0x50.0x16
width: 16
rw: ro
dtype: double
scale: 3.90625e-3 #1/256
dim: 48
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
monitor: true
methods:
- name: UNB2TR_Init #Called after startup to load.
driver: switch_UNB2
debug: True
instructions:
- UNB2_EEPROM_Unique_ID: Update
- name: UNB2_on
mask: UNB2_mask
instructions:
- FP_IO.CONF: 0xff #TODO: setup correctly
- UNB2_Front_Panel_LED: 1
- name: UNB2_off
mask: UNB2_mask
instructions:
- UNB2_Front_Panel_LED: 2
...@@ -27,6 +27,7 @@ class i2c_array2(i2c_array): ...@@ -27,6 +27,7 @@ class i2c_array2(i2c_array):
self.sw2=[x for x in sw2 for i in range(self.N//len(sw1)//len(sw2))]*len(sw1) self.sw2=[x for x in sw2 for i in range(self.N//len(sw1)//len(sw2))]*len(sw1)
self.sw3=[x for x in sw3]*len(sw1)*len(sw2) self.sw3=[x for x in sw3]*len(sw1)*len(sw2)
logging.debug(str(("Init",config['name'],' len=',self.N,'Nswitch=',self.Nswitch,self.sw1,self.sw2,self.sw3))) logging.debug(str(("Init",config['name'],' len=',self.N,'Nswitch=',self.Nswitch,self.sw1,self.sw2,self.sw3)))
self.I2Ccut=3;
def SetSwitch(self,RCUi): def SetSwitch(self,RCUi):
#print("Set switch element",RCUi,'=',self.sw1[RCUi],self.sw2[RCUi],(self.sw3[RCUi] if len(self.sw3)<0 else 'x')) #print("Set switch element",RCUi,'=',self.sw1[RCUi],self.sw2[RCUi],(self.sw3[RCUi] if len(self.sw3)<0 else 'x'))
......
...@@ -83,7 +83,7 @@ def InitServer(port=4840): ...@@ -83,7 +83,7 @@ def InitServer(port=4840):
# setup our server # setup our server
global server,running,PCCobj,DEBUGobj,idx,sub; global server,running,PCCobj,DEBUGobj,idx,sub;
server = Server() server = Server()
server.set_endpoint("opc.tcp://0.0.0.0:{}/PCC/".format(port)) server.set_endpoint("opc.tcp://0.0.0.0:{}/".format(port))
idx = server.register_namespace("http://lofar.eu") idx = server.register_namespace("http://lofar.eu")
# uri = "http://examples.freeopcua.github.io" # uri = "http://examples.freeopcua.github.io"
...@@ -92,7 +92,7 @@ def InitServer(port=4840): ...@@ -92,7 +92,7 @@ def InitServer(port=4840):
objects = server.get_objects_node() objects = server.get_objects_node()
# populating our address space # populating our address space
PCCobj = objects.add_object(idx, "PCC") PCCobj = objects #.add_object(idx, "PCC")
DEBUGobj = PCCobj.add_object(idx, "DEBUG") DEBUGobj = PCCobj.add_object(idx, "DEBUG")
# self.PCCobj=PCCobj # self.PCCobj=PCCobj
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment