From c13349a514b6ab08584a7dfa59766ef7d0229c50 Mon Sep 17 00:00:00 2001 From: Paulus <kruger@astron.nl> Date: Tue, 23 Feb 2021 11:40:03 +0000 Subject: [PATCH] Clock board added --- clk/HWconf.py | 2 +- clk/Vars.py | 26 ++++++++++++++++---------- clk/spibitbang2.py | 19 ++++++++++++------- i2c/I2C.py | 12 ++++++++---- i2c/I2C_dummy.py | 4 ++-- i2c/setswitch.py | 34 ++++++++++++++++++++++++++++++++++ pcctypes.py | 1 + pypcc2.py | 6 +++--- rcu/HWconf.py | 11 +++++++---- rcu/RCU.py | 21 +++++++++++++++++---- rcu/Vars.py | 30 +++++++++++++++++++----------- rcu/spibitbang1.py | 10 ++++++---- scripts/ADCreset.py | 9 +++++---- scripts/CLK.py | 16 ++++++++++++++++ scripts/RCUupdate.py | 4 +++- scripts/SetHBAT_BF.py | 26 ++++++++++++++++++++++++++ scripts/SetHBAT_LED.py | 28 ++++++++++++++++++++++++++++ scripts/SetHBA_BF.py | 4 ++-- scripts/SetHBA_LED.py | 6 +++--- scripts/test_common.py | 7 ++++--- 20 files changed, 213 insertions(+), 63 deletions(-) create mode 100644 i2c/setswitch.py create mode 100644 scripts/CLK.py create mode 100644 scripts/SetHBAT_BF.py create mode 100644 scripts/SetHBAT_LED.py diff --git a/clk/HWconf.py b/clk/HWconf.py index 36f1437..b975665 100644 --- a/clk/HWconf.py +++ b/clk/HWconf.py @@ -14,6 +14,6 @@ RCU_storeReg=4; #Number of stored registers -SPIBB_PLL=BBdev(4,[CLK_IO3_OUT1,CLK_IO3_OUT1,CLK_IO3_OUT1,CLK_IO3_OUT2],[4,7,5,6],0) #CLK,SDI,SDO,CS +SPIBB_PLL=BBdev(4,[CLK_IO3_OUT1,CLK_IO3_OUT1,CLK_IO3_OUT1,CLK_IO3_OUT1],[4,7,5,6],0) #CLK,SDI,SDO,CS CLK_PLL_lock =DevReg(SPIBB_PLL,0X00,0X00,0) # PLL locked status diff --git a/clk/Vars.py b/clk/Vars.py index 20c67ab..7e49e3a 100644 --- a/clk/Vars.py +++ b/clk/Vars.py @@ -3,33 +3,38 @@ from .HWconf import * CLKmod=I2Cmodules.CLK -CLK_IGNORE_PPS= VarArray("CLK_Ignore_PPS",1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT1,1 ,6,1)],RW.ReadOnly,datatype.dInt,1,None,None) -CLK_Enable_PWR= VarArray("CLK_Enable_PWR",1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT1,1 ,7,1)],RW.ReadOnly,datatype.dInt,1,None,None) -CLK_Stat1 = VarArray("CLK_Stat" ,1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT1,1 ,4,1)],RW.ReadOnly,datatype.dInt,1,None,None) +CLK_IGNORE_PPS= VarArray("CLK_Ignore_PPS",1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT2,1 ,2,1)],RW.ReadOnly,datatype.dInt,1,None,None) +CLK_Enable_PWR= VarArray("CLK_Enable_PWR",1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT1,1 ,1,1)],RW.ReadOnly,datatype.dInt,1,None,None) +CLK_Stat1 = VarArray("CLK_Stat" ,1,[Var2dev("",CLKmod,DevType.I2C,CLK_IO3_OUT1,1 ,2,1)],RW.ReadOnly,datatype.dInt,1,None,None) CLK_lock1 = VarArray("CLK_Lock" ,1,[Var2dev("",CLKmod,DevType.SPIbb,CLK_PLL_lock,8 ,0,1)],RW.ReadOnly,datatype.dInt,1,None,None) -OPC_devvars=[CLK_IGNORE_PPS,CLK_Enable_PWR,CLK_Stat1,CLK_lock1] +OPC_devvars=[CLK_Enable_PWR,CLK_lock1] RCU_init=Instrs("ReadRegisters",2,[ Instr(DevType.VarUpdate,CLK_IGNORE_PPS,1,[0]), Instr(DevType.VarUpdate,CLK_Enable_PWR,1,[0]) ]) -CLK_on=Instrs("CLK_on",2,[ +CLK_on=Instrs("CLK_on",3,[ Instr(DevType.I2C,CLK_IO3_CONF1,1,[0x2C]), Instr(DevType.I2C,CLK_IO3_OUT1 ,1,[0x42]), + Instr(DevType.VarUpdate,CLK_lock1,1,[0]), + Instr(DevType.VarUpdate,CLK_Enable_PWR,1,[0]) ]) -CLK_off=Instrs("CLK_off",2,[ +CLK_off=Instrs("CLK_off",3,[ Instr(DevType.I2C,CLK_IO3_CONF1,1,[0x2C]), Instr(DevType.I2C,CLK_IO3_OUT1 ,1,[0x40]), + Instr(DevType.VarUpdate,CLK_Enable_PWR,1,[0]) ]) def SPIinst(reg,value): - return Instr(DevType.SPIbb,DevReg(SPIBB_PLL,0,reg,0),1,[value]), -CLK_PLL_setup=Instrs("CLK_PLL_setup",2,[ - SPIinst(0x03,0x08), + return Instr(DevType.SPIbb,DevReg(SPIBB_PLL,0,reg,0),1,[value]) + +CLK_PLL_setup=Instrs("CLK_PLL_setup",15,[ +# SPIinst(0x03,0x08), +# Instr(DevType.I2C,CLK_IO3_CONF1,1,[0x2C]), SPIinst(0x05,0x97), SPIinst(0x06,0x10), SPIinst(0x07,0x04), @@ -41,7 +46,8 @@ CLK_PLL_setup=Instrs("CLK_PLL_setup",2,[ SPIinst(0x0D,0x01),#was 2 SPIinst(0x0F,0x01), SPIinst(0x11,0x01), - SPIinst(0x13,0x01) + SPIinst(0x13,0x01), + Instr(DevType.VarUpdate,CLK_lock1,1,[0]) ]) OPC_methods=[CLK_on,CLK_off,CLK_PLL_setup] diff --git a/clk/spibitbang2.py b/clk/spibitbang2.py index d7d6be0..f51d9a2 100644 --- a/clk/spibitbang2.py +++ b/clk/spibitbang2.py @@ -19,19 +19,22 @@ def SetSPIbb(SetI2C,RCUi,dev,value): CLKdev=dev.Addr.devs[SPIBB_pins.CLK.value] CLKpin=dev.Addr.pins[SPIBB_pins.CLK.value] - logging.info(str(("SPIbb set",ADC_address,value))) - + logging.warn(str(("SPIbb set",ADC_address,value))) + # dev_rw = 0x00 # 0 for write, 1 for read # data2 = ( reg_address << 9 ) + ( dev_rw << 8 ) + value[0] data2 = ( ADC_address << 9 ) + value[0] bit_array = "{0:{fill}16b}".format(data2, fill='0') # print(bit_array) + SetI2C(RCUi,CSdev,1,CSpin,[1]) #disable SetI2C(RCUi,CSdev,1,CSpin,[0]) #enable for bit in bit_array: + SetI2C(RCUi,CLKdev,1,CLKpin,[0]) SetI2C(RCUi,SDIdev,1,SDIpin,[int(bit)]) SetI2C(RCUi,CLKdev,1,CLKpin,[1]) - SetI2C(RCUi,CLKdev,1,CLKpin,[0]) + SetI2C(RCUi,CLKdev,1,CLKpin,[0])#Why? + SetI2C(RCUi,CLKdev,1,CLKpin,[1]) SetI2C(RCUi,CSdev,1,CSpin,[1]) #disable # SetI2C(RCUi,SDIdev,1,SDIpin,[1]) #high when finished return True; @@ -47,19 +50,20 @@ def GetSPIbb(SetI2C,GetI2C,RCUi,dev,value): CLKdev=dev.Addr.devs[SPIBB_pins.CLK.value] CLKpin=dev.Addr.pins[SPIBB_pins.CLK.value] - logging.info(str(("SPIbb get",ADC_reg_address))) + logging.warn(str(("SPIbb get",ADC_reg_address))) ADC_bytes = 0x00 # ADC_rw = 0x01 # 0 for write, 1 for read data = (ADC_reg_address << 1) + 1 #was 7?? + SetI2C(RCUi,CSdev,1,CSpin,[1]) #disable SetI2C(RCUi,CSdev,1,CSpin,[0]) #enable bit_array = "{0:{fill}8b}".format(data, fill='0') for bit in bit_array: SetI2C(RCUi,SDIdev,1,SDIpin,[int(bit)]) - SetI2C(RCUi,CLKdev,1,CLKpin,[1]) SetI2C(RCUi,CLKdev,1,CLKpin,[0]) + SetI2C(RCUi,CLKdev,1,CLKpin,[1]) # SetI2C(RCUi,SDIdev,1,SDIpin,[1]) #high when finished @@ -69,10 +73,11 @@ def GetSPIbb(SetI2C,GetI2C,RCUi,dev,value): ret_value=[0] for i in range(N): value[i]=0 for cnt in range(8*(ADC_bytes+1)): + SetI2C(RCUi,CLKdev,1,CLKpin,[0]) + SetI2C(RCUi,CLKdev,1,CLKpin,[1]) #read after rising GetI2C(RCUi,SDOdev,1,SDOpin,ret_value) for i in range(N): value[i]=(value[i]<<1)+ ret_value[i] - SetI2C(RCUi,CLKdev,1,CLKpin,[1]) - SetI2C(RCUi,CLKdev,1,CLKpin,[0]) #read after falling edge + SetI2C(RCUi,CLKdev,1,CLKpin,[0]) SetI2C(RCUi,CSdev,1,CSpin,[1]) #disable return True; diff --git a/i2c/I2C.py b/i2c/I2C.py index 7d5b619..1982b43 100644 --- a/i2c/I2C.py +++ b/i2c/I2C.py @@ -9,21 +9,22 @@ import logging I2Ccounter=0; def I2C1server(addr,data,reg=None,read=0): +# print("I2C",addr,reg,data,read) try: if read==3: time.sleep(data[0]/1000.) return True logging.debug(str(("I2C",addr,reg,data,read))) -# print("I2C",addr,reg,data,read) # return True; - bus=pylibi2c.I2CDevice('/dev/i2c-2',addr) + bus=pylibi2c.I2CDevice('/dev/i2c-1',addr) if read==1: length=len(data) bus.iaddr_bytes=0 if not(reg is None): bus.ioctl_write(0,str(bytearray([reg]))) data[:]=[int(x) for x in bus.ioctl_read(0,length)] +# print("I2C read",addr,reg,data,read) else: if reg is None: bus.iaddr_bytes=0 @@ -36,7 +37,8 @@ def I2C1server(addr,data,reg=None,read=0): # data[0]=0xff return False; -def I2C2server(addr,data,reg=None,read=0): +def I2C4server(addr,data,reg=None,read=0): +# print("I2C4",addr,reg,data,read) try: if read==3: time.sleep(data[0]/1000.) @@ -45,13 +47,14 @@ def I2C2server(addr,data,reg=None,read=0): # print("I2C",addr,reg,data,read) # return True; - bus=pylibi2c.I2CDevice('/dev/i2c-1',addr) + bus=pylibi2c.I2CDevice('/dev/i2c-4',addr) if read==1: length=len(data) bus.iaddr_bytes=0 if not(reg is None): bus.ioctl_write(0,str(bytearray([reg]))) data[:]=[int(x) for x in bus.ioctl_read(0,length)] +# print(data) else: if reg is None: bus.iaddr_bytes=0 @@ -61,6 +64,7 @@ def I2C2server(addr,data,reg=None,read=0): return True; except: if bus: bus.close() + print("I2C4 error") # data[0]=0xff return False; diff --git a/i2c/I2C_dummy.py b/i2c/I2C_dummy.py index d6351b0..ba39c1a 100644 --- a/i2c/I2C_dummy.py +++ b/i2c/I2C_dummy.py @@ -20,9 +20,9 @@ def I2C1server(addr,data,reg=None,read=0): # logging.debug(str(("I2C",addr,reg,data,read))) return True -def I2C2server(addr,data,reg=None,read=0): +def I2C4server(addr,data,reg=None,read=0): global I2Ccounter; - logging.debug(str(("I2C2",addr,reg,data,read))) + logging.debug(str(("I2C4",addr,reg,data,read))) if read==3: time.sleep(data[0]/1000.) return True diff --git a/i2c/setswitch.py b/i2c/setswitch.py new file mode 100644 index 0000000..8871663 --- /dev/null +++ b/i2c/setswitch.py @@ -0,0 +1,34 @@ +from I2C import * +import time +RCU=2 +Ver="RCU2H v0.2" +R1=0 +ROM=0x50 + +#Set switch +print("Set switch") +if not(I2C1server(0x70,[1<<RCU],reg=None,read=0)): exit() #select RCU +exit() +#Get ID +print("Get ID") +ID=[0]*4 +if not(I2C1server(ROM,ID,reg=0xFC,read=1)): exit() #select RCU +print(ID) +exit() + +#Upload version +Ver2=[(c.encode('utf-8')[0]) for c in Ver] +print(len(Ver),Ver,Ver2) +V2=[0] +for i,v in enumerate(Ver2): + time.sleep(0.1) + I2C1server(ROM,[v],reg=R1+i,read=0) #select RCU +# I2C1server(ROM,[v],reg=None,read=0) #select RCU + time.sleep(0.1) + I2C1server(ROM,V2,reg=R1+i,read=1) #select RCU + print(i,v,V2) + +#Download version +Ver2=[0]*10 +I2C1server(ROM,Ver2,reg=R1,read=1) #select RCU +print(Ver2) diff --git a/pcctypes.py b/pcctypes.py index e25c0b7..56c4bc7 100644 --- a/pcctypes.py +++ b/pcctypes.py @@ -35,6 +35,7 @@ class DevType(Enum): Internal = 6 HBA1 = 7 HBA2 = 8 + Wait = 9 class RW(Enum): Hidden = 0 #Not an OPC_UA variable diff --git a/pypcc2.py b/pypcc2.py index 6ba9f38..79dd46a 100644 --- a/pypcc2.py +++ b/pypcc2.py @@ -43,14 +43,14 @@ opcuaserv.InitServer(port=args.port) logging.info("OPC-UA Server started") SW1=I2Cswitch1.I2Cswitch1(I2C.I2C1server) -SW0=I2Cswitch1.I2Cswitch0(I2C.I2C2server) #Dummy switch as their is no switch on LTS +SW0=I2Cswitch1.I2Cswitch0(None) #Dummy switch as their is no switch on LTS RCU=RCU.RCU1(NRCU,I2C.I2C1server,SW1.SetChannel) RCU.AddVars(Q1,opcuaserv.AddVarR,opcuaserv.AddVarW) RCU.AddMethod(Q1,opcuaserv.Addmethod) RCU.load() #Load current register values from HW -CLK=CLK.RCU1(1,I2C.I2C2server,SW0.SetChannel) +CLK=CLK.RCU1(1,I2C.I2C4server,SW0.SetChannel) CLK.AddVars(Q2,opcuaserv.AddVarR,opcuaserv.AddVarW) CLK.AddMethod(Q2,opcuaserv.Addmethod) CLK.load() #Load current register values from HW @@ -106,5 +106,5 @@ finally: logging.info("Stop OPC-UA server") opcuaserv.server.stop() RCUthread1.join() -# CLKthread1.join() + CLKthread1.join() Timerthread1.join() diff --git a/rcu/HWconf.py b/rcu/HWconf.py index 38fa659..44b75df 100644 --- a/rcu/HWconf.py +++ b/rcu/HWconf.py @@ -27,10 +27,10 @@ RCU_IO2_OUT2=DevReg(0x76,1,3,6) RCU_IO2_CONF1=DevReg(0x76,6,6,7) RCU_IO2_CONF2=DevReg(0x76,7,7,8) #Device: TCA6416 -RCU_IO3_OUT1=DevReg(0x2F,0,2,9) -RCU_IO3_OUT2=DevReg(0x2F,1,3,10) -RCU_IO3_CONF1=DevReg(0x2F,6,6,11) -RCU_IO3_CONF2=DevReg(0x2F,7,7,12) +RCU_IO3_OUT1=DevReg(0x20,0,2,9) +RCU_IO3_OUT2=DevReg(0x20,1,3,10) +RCU_IO3_CONF1=DevReg(0x20,6,6,11) +RCU_IO3_CONF2=DevReg(0x20,7,7,12) RCU_storeReg=13; #Number of stored registers @@ -63,18 +63,21 @@ SPIBB_ADC3=BBdev(4,[RCU_IO3_OUT1,RCU_IO3_OUT1,RCU_IO3_CONF1,RCU_IO3_OUT2],[5,4,4 #SPI ADC #Dev: AD9683 RCU_ADC1_PLL_stat =DevReg(SPIBB_ADC1,0X0A,0X0A,0) # PLL locked status +RCU_ADC1_PLL_enc =DevReg(SPIBB_ADC1,0X21,0X21,0) # PLL low encode RCU_ADC1_JESD_ctr =DevReg(SPIBB_ADC1,0X5F,0X5F,0) #JESD link control, ILAS mode RCU_ADC1_CML_level=DevReg(SPIBB_ADC1,0X15,0X15,0) #CML output adjust RCU_ADC1_SYNC_ctr =DevReg(SPIBB_ADC1,0X3A,0X3A,0) #SYNC / SYSREF control RCU_ADC1_update =DevReg(SPIBB_ADC1,0XFF,0xFF,0) # Global device update RCU_ADC2_PLL_stat =DevReg(SPIBB_ADC2,0X0A,0X0A,0) # PLL locked status +RCU_ADC2_PLL_enc =DevReg(SPIBB_ADC2,0X21,0X21,0) # PLL low encode RCU_ADC2_JESD_ctr =DevReg(SPIBB_ADC2,0X5F,0X5F,0) #JESD link control, ILAS mode RCU_ADC2_CML_level=DevReg(SPIBB_ADC2,0X15,0X15,0) #CML output adjust RCU_ADC2_SYNC_ctr =DevReg(SPIBB_ADC2,0X3A,0X3A,0) #SYNC / SYSREF control RCU_ADC2_update =DevReg(SPIBB_ADC2,0XFF,0xFF,0) # Global device update RCU_ADC3_PLL_stat =DevReg(SPIBB_ADC3,0X0A,0X0A,0) # PLL locked status +RCU_ADC3_PLL_enc =DevReg(SPIBB_ADC3,0X21,0X21,0) # PLL low encode RCU_ADC3_JESD_ctr =DevReg(SPIBB_ADC3,0X5F,0X5F,0) #JESD link control, ILAS mode RCU_ADC3_CML_level=DevReg(SPIBB_ADC3,0X15,0X15,0) #CML output adjust RCU_ADC3_SYNC_ctr =DevReg(SPIBB_ADC3,0X3A,0X3A,0) #SYNC / SYSREF control diff --git a/rcu/RCU.py b/rcu/RCU.py index 6f9fc17..9b8d41c 100644 --- a/rcu/RCU.py +++ b/rcu/RCU.py @@ -3,6 +3,7 @@ import numpy as np import logging from .spibitbang1 import * import threading +import time def ApplyMask(value,width=8,bitoffset=0,previous=0): @@ -77,6 +78,10 @@ class RCU1(): def SetVar(self,Instr,Mask=[]): # Instr.value=strs2bytes(Instr.value) #Alwast be an array of bytes + if Instr.type==Vars.DevType.Wait: +# time.sleep(Instr.value[0]/1000.) + print("Sleep",Instr.value[0]/1000.,"s") + return; if Instr.type==Vars.DevType.Instr: #Execute instructions Iset=Instr.dev; @@ -108,6 +113,7 @@ class RCU1(): # self.SetI2C(RCUi,Instr.dev,8,0,strs2bytes(Instr.value)) return; V1=Instr.dev +# print(Instr.nvalue,V1.nVars,V1.size) if not((Instr.nvalue==V1.nVars) and (Instr.type==Vars.DevType.VarUpdate)) and not(Instr.nvalue==V1.size*self.N): logging.error("Wrong size of value") return False @@ -187,6 +193,8 @@ class RCU1(): elif V1.Vars[0].type==Vars.DevType.HBA1: for Vari in range(Step): var=V1.Vars[Vari] +# self.SWcallback(mask) +# self.SetI2CAddr(self,DevReg) for RCUi in range(self.N): self.SWcallback(1<<Vars.RCU_MPaddr.Switch[RCUi]) # print(Step,Step2,len(value1),V1.size) @@ -263,9 +271,14 @@ class RCU1(): value[i]=ApplyMask(value[i],width,bitoffset,previous[i]); self.previousHBA[RCUi,dev.store-1]=value # if buffer: return True; + XX=[0] + self.I2Ccallback(0x40,XX,reg=0,read=1)#wakeup, do nothing + self.I2Ccallback(dev.Addr,[10],read=3) self.I2Ccallback(dev.Addr,value[:16],reg=dev.Register_W) - if L>16: self.I2Ccallback(dev.Addr,value[16:],reg=dev.Register_W+16) - self.I2Ccallback(dev.Addr,[500],reg=dev.Register_W,read=3) #Wait 500ms + if L>16: + self.I2Ccallback(dev.Addr,[10],read=3) + self.I2Ccallback(dev.Addr,value[16:],reg=dev.Register_W+16) + self.I2Ccallback(dev.Addr,[600],reg=dev.Register_W,read=3) #Wait 500ms return True # return self.I2Ccallback(dev.Addr,value,reg=dev.Register_W) @@ -370,8 +383,8 @@ class RCU1(): def Queue_Monitor(self,Q1,NRCU): Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_temp,NRCU,[0]*NRCU) Q1.put(Inst1) -# Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_ADC_lock,96,[0]*96) -# Q1.put(Inst1) + Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_ADC_lock,96,[0]*96) + Q1.put(Inst1) return def AddVars(self,Q1,AddVarR,AddVarW): for v in Vars.OPC_devvars: diff --git a/rcu/Vars.py b/rcu/Vars.py index 5617ec0..8857161 100644 --- a/rcu/Vars.py +++ b/rcu/Vars.py @@ -103,7 +103,9 @@ RCU_OUT2=VarArray("RCU_OUT2",3,[RCU_IO1_2,RCU_IO2_2,RCU_IO3_2],RW.ReadOnly,datat #RCU_CNF1=VarArray("RCU_CONF1",3,[RCU_IO1_3,RCU_IO2_3,RCU_IO3_3],RW.ReadOnly,datatype.dInt,None,None) #RCU_CNF2=VarArray("RCU_CONF2",3,[RCU_IO1_4,RCU_IO2_4,RCU_IO3_4],RW.ReadOnly,datatype.dInt,None,None) -OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ADC_lock,RCU_ADC_SYNC,RCU_ADC_JESD,RCU_ADC_CML,RCU_OUT1,RCU_OUT2,RCU_ID,RCU_VER,HBA_Delay,HBA_led] +#OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ID,RCU_VER,HBA_Delay,HBA_led] +#OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ID,RCU_VER,HBA_Delay,HBA_led,RCU_uCV_ID] +OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ADC_lock,RCU_ADC_SYNC,RCU_ADC_JESD,RCU_ADC_CML,RCU_OUT1,RCU_OUT2,RCU_ID,RCU_VER,HBA_Delay,HBA_led,RCU_uCV_ID] #OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_uCV_ID,RCU_uCV_spd0,RCU_uCV_RXspd1,RCU_uCV_RXspd2,RCU_uCV_TXspd1,RCU_uCV_debug ]#,HBA1_Pwr]#,RCU_CNF1,RCU_CNF2] #Instr=namedtuple("DevInstr","type dev nvalue value") #Instrs=namedtuple("Instr","name ninstr instr") @@ -115,46 +117,52 @@ RCU_init=Instrs("ReadRegisters",2,[ Instr(DevType.VarUpdate,RCU_OUT2,3,[0,0,0]) ]) -ADC_on=Instrs("ADC_on",16,[ +ADC_on=Instrs("ADC_on",17,[ Instr(DevType.SPIbb,RCU_ADC1_JESD_ctr,1,[0x14]), Instr(DevType.SPIbb,RCU_ADC1_CML_level,1,[0x7]), Instr(DevType.SPIbb,RCU_ADC1_SYNC_ctr,1,[1]), + Instr(DevType.SPIbb,RCU_ADC1_PLL_enc,1,[0x8]), Instr(DevType.SPIbb,RCU_ADC1_update,1,[1]), + Instr(DevType.Wait,0,0,[100]), Instr(DevType.SPIbb,RCU_ADC2_JESD_ctr,1,[0x14]), Instr(DevType.SPIbb,RCU_ADC2_CML_level,1,[0x7]), Instr(DevType.SPIbb,RCU_ADC2_SYNC_ctr,1,[1]), + Instr(DevType.SPIbb,RCU_ADC2_PLL_enc,1,[0x8]), Instr(DevType.SPIbb,RCU_ADC2_update,1,[1]), + Instr(DevType.Wait,0,0,[100]), Instr(DevType.SPIbb,RCU_ADC3_JESD_ctr,1,[0x14]), Instr(DevType.SPIbb,RCU_ADC3_CML_level,1,[0x7]), Instr(DevType.SPIbb,RCU_ADC3_SYNC_ctr,1,[1]), + Instr(DevType.SPIbb,RCU_ADC3_PLL_enc,1,[0x8]), Instr(DevType.SPIbb,RCU_ADC3_update,1,[1]), + Instr(DevType.Wait,0,0,[500]), Instr(DevType.VarUpdate,RCU_ADC_SYNC,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_ADC_JESD,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_ADC_CML,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_ADC_lock,3,[0,0,0]) ]) -RCU_on=Instrs("RCU_on",12,[ +RCU_on=Instrs("RCU_on",20,[ Instr(DevType.I2C,RCU_IO2_CONF1,1,[0]), Instr(DevType.I2C,RCU_IO2_CONF2,1,[0]), + Instr(DevType.I2C,RCU_IO2_OUT1,1,[0x4A]), + Instr(DevType.I2C,RCU_IO2_OUT2,1,[0x55]), + Instr(DevType.Wait,0,0,[300]), Instr(DevType.I2C,RCU_IO3_CONF1,1,[0]), Instr(DevType.I2C,RCU_IO3_CONF2,1,[0]), Instr(DevType.I2C,RCU_IO1_CONF1,1,[0]), Instr(DevType.I2C,RCU_IO1_CONF2,1,[0]), - Instr(DevType.I2C,RCU_IO2_OUT1,1,[0x4A]), - Instr(DevType.I2C,RCU_IO2_OUT2,1,[0x55]), Instr(DevType.I2C,RCU_IO3_OUT1,1,[0x15]), Instr(DevType.I2C,RCU_IO3_OUT2,1,[0x47]), Instr(DevType.I2C,RCU_IO1_OUT1,1,[0xCA]), Instr(DevType.I2C,RCU_IO1_OUT2,1,[0xCA]), -# Instr(DevType.VarUpdate,RCU_att,3,[0,0,0]), + Instr(DevType.Wait,0,0,[200]), + Instr(DevType.VarUpdate,RCU_att,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_pwrd,1,[0]), Instr(DevType.VarUpdate,RCU_OUT1,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_OUT2,3,[0,0,0]), -# Instr(DevType.Instr,ADC1_on,0,[]), -# Instr(DevType.Instr,ADC2_on,0,[]), -# Instr(DevType.Instr,ADC3_on,0,[]) -# Instr(DevType.VarUpdate,RCU_ADC_lock,3,[0,0,0]) +# Instr(DevType.Wait,0,0,[300]), + Instr(DevType.Instr,ADC_on,0,[]) ]) RCU_off=Instrs("RCU_off",1,[ @@ -171,7 +179,7 @@ RCU_update=Instrs("RCU_update",11,[ # Instr(DevType.VarUpdate,RCU_VER,1,[0]*10), Instr(DevType.VarUpdate,RCU_att,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_band,3,[0,0,0]), - Instr(DevType.VarUpdate,RCU_LED,3,[0,0,0]), + Instr(DevType.VarUpdate,RCU_LED,1,[0]), Instr(DevType.VarUpdate,RCU_ADC_SYNC,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_ADC_JESD,3,[0,0,0]), Instr(DevType.VarUpdate,RCU_ADC_CML,3,[0,0,0]), diff --git a/rcu/spibitbang1.py b/rcu/spibitbang1.py index 14541d7..ca8fd30 100644 --- a/rcu/spibitbang1.py +++ b/rcu/spibitbang1.py @@ -109,21 +109,23 @@ def GetSPIbb2(SetI2C,GetI2C,RCUi,devs,value): ADC_rw = 0x01 # 0 for write, 1 for read data = ( ADC_rw << 15) + ( ADC_bytes << 13 ) + ADC_reg_address + Setbit(CLK,0) Setbit(CS,0) #enable bit_array = "{0:{fill}16b}".format(data, fill='0') logging.debug(str(("SPI TX",bit_array))) for bit in bit_array: + Setbit(CLK,0) Setbit(SDIO,int(bit)) Setbit(CLK,1) - Setbit(CLK,0) - Setbit(CS,1) #disable +# Setbit(CS,1) #disable + Setbit(SDIOdir,1) #input + Setbit(CLK,0) # print("read byte") - Setbit(SDIOdir,1) #input - Setbit(CS,0) #enable +# Setbit(CS,0) #enable a=[0] N=len(value) for i in range(N): value[i]=0 diff --git a/scripts/ADCreset.py b/scripts/ADCreset.py index b0f208a..1fe427c 100644 --- a/scripts/ADCreset.py +++ b/scripts/ADCreset.py @@ -1,13 +1,14 @@ from test_common import * -RCUs=[0]; +RCUs=[2,3]; setRCUmask(RCUs) callmethod("RCU_off") +#exit() time.sleep(1) callmethod("RCU_on") -callmethod("RCU_on") -time.sleep(1) -callmethod("ADC_on") +#callmethod("RCU_on") +#time.sleep(1) +#callmethod("ADC_on") disconnect(); diff --git a/scripts/CLK.py b/scripts/CLK.py new file mode 100644 index 0000000..4dbf2b4 --- /dev/null +++ b/scripts/CLK.py @@ -0,0 +1,16 @@ +from test_common import * + +#callmethod("CLK_off") +#time.sleep(1) + +callmethod("CLK_on") +time.sleep(1) +callmethod("CLK_PLL_setup") +#exit() +#time.sleep(1) +#callmethod("RCU_on") +#callmethod("RCU_on") +#time.sleep(1) +#callmethod("ADC_on") + +disconnect(); diff --git a/scripts/RCUupdate.py b/scripts/RCUupdate.py index 42dde84..bf9b5ef 100644 --- a/scripts/RCUupdate.py +++ b/scripts/RCUupdate.py @@ -1,7 +1,9 @@ from test_common import * -RCUs=[0]; +RCUs=[0,1,2,3]; setRCUmask(RCUs) +#for RCU in RCUs: +setAntmask(RCUs,[True,True,True]) callmethod("RCU_update") diff --git a/scripts/SetHBAT_BF.py b/scripts/SetHBAT_BF.py new file mode 100644 index 0000000..ada75d2 --- /dev/null +++ b/scripts/SetHBAT_BF.py @@ -0,0 +1,26 @@ +RCU=3 +HBAT=1 #HBAT on RCU 0..2 +#HBA=5; #HBA Element in HBAT +#BFX=11 #delay in 0.5ns +#BFY=BFX+1 +name="HBA_element_beamformer_delays" + +from test_common import * +import numpy as np + +AntMask=[(x==HBAT) for x in range(3)] +setAntmask([RCU],AntMask) + +i=(RCU*3+HBAT)*32 + +val=get_value(name+"_R") +print("old:",val[i:i+32]) + +val[i:i+32]=np.array(range(32))[::] + +set_value(name+"_RW",val) +time.sleep(1) +val=get_value(name+"_R") +print("new:",val[i:i+32]) + +disconnect() diff --git a/scripts/SetHBAT_LED.py b/scripts/SetHBAT_LED.py new file mode 100644 index 0000000..8a7c090 --- /dev/null +++ b/scripts/SetHBAT_LED.py @@ -0,0 +1,28 @@ +RCU=3 +HBAT=1 #HBAT on RCU 0..2 +LED=1 #on +name="HBA_element_led" + +from test_common import * +import numpy as np + +AntMask=[(x==HBAT) for x in range(3)] +setAntmask([RCU],AntMask) + +i=(RCU*3+HBAT)*32 + +val=get_value(name+"_R") +#print("old:",val) +print("old:",val[i:i+32]) +for x in range(32): + val[i+x]=LED +#val[i]=LED #Not needed for LED +#val[i+1]=LED + +set_value(name+"_RW",val) +time.sleep(1) +val=get_value(name+"_R") +#print("new:",val) +print("new:",val[i:i+32]) + +disconnect() diff --git a/scripts/SetHBA_BF.py b/scripts/SetHBA_BF.py index 263e91c..697a9a2 100644 --- a/scripts/SetHBA_BF.py +++ b/scripts/SetHBA_BF.py @@ -1,5 +1,5 @@ -RCU=0 -HBAT=1 #HBAT on RCU 0..2 +RCU=1 +HBAT=0 #HBAT on RCU 0..2 HBA=5; #HBA Element in HBAT BFX=11 #delay in 0.5ns BFY=BFX+1 diff --git a/scripts/SetHBA_LED.py b/scripts/SetHBA_LED.py index 5cfc1b1..7869dac 100644 --- a/scripts/SetHBA_LED.py +++ b/scripts/SetHBA_LED.py @@ -1,7 +1,7 @@ -RCU=0 +RCU=1 HBAT=1 #HBAT on RCU 0..2 -HBA=5; #HBA Element in HBAT -LED=1 #on +HBA=14; #HBA Element in HBAT +LED=0 #on name="HBA_element_led" from test_common import * diff --git a/scripts/test_common.py b/scripts/test_common.py index 40d6ba1..6df8d70 100644 --- a/scripts/test_common.py +++ b/scripts/test_common.py @@ -1,4 +1,5 @@ -Address="opc.tcp://odroidRCU2:4842/" +#Address="opc.tcp://odroidRCU2:4842/" +Address="opc.tcp://LTSpi:4842/" import sys sys.path.insert(0, "..") import logging @@ -36,9 +37,9 @@ def setRCUmask(rcu=[]): name="RCU_mask_RW" M=get_value(name) print(name," old:",M) - M=[0 for m in M] + M=[False for m in M] for r in rcu: - M[r]=1 + M[r]=True set_value(name,M) print(name," new:",get_value(name)) -- GitLab