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

RCU2L test script logging

parent 2ea1cd46
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,7 @@ drivers: ...@@ -10,7 +10,7 @@ drivers:
type: i2c_array #An array of similar devices connected to an I2C switch type: i2c_array #An array of similar devices connected to an I2C switch
parent: I2C1 parent: I2C1
parameters: [0,31,14] #start,number of RCUs, error count to disable I2C parameters: [0,31,14] #start,number of RCUs, error count to disable I2C
status: RCU_I2C_STATUS status: RCU_I2C_error
- name: I2C_HBAT - name: I2C_HBAT
type: hba1 #Special driver to manage HBAT1s. type: hba1 #Special driver to manage HBAT1s.
parent: I2C_RCU parent: I2C_RCU
...@@ -220,7 +220,7 @@ variables: ...@@ -220,7 +220,7 @@ variables:
dtype: boolean dtype: boolean
dim: 32 dim: 32
- name: RCU_I2C_STATUS - name: RCU_I2C_error
description: 0=Good, >0 communication error description: 0=Good, >0 communication error
driver: I2C_RCU driver: I2C_RCU
rw: ro #server RW variable, not linked to IO rw: ro #server RW variable, not linked to IO
...@@ -235,7 +235,7 @@ variables: ...@@ -235,7 +235,7 @@ variables:
# dtype: uint8 # dtype: uint8
# dim: 1 # dim: 1
- name: RECVTR_busy - name: RECVTR_translator_busy
description: True when I2C line is busy description: True when I2C line is busy
rw: ro #server variable, not linked to IO rw: ro #server variable, not linked to IO
dtype: boolean dtype: boolean
...@@ -305,7 +305,7 @@ variables: ...@@ -305,7 +305,7 @@ variables:
dtype: double dtype: double
dim: 32 dim: 32
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_3V3 - name: RCU_3V3
description: RCU 3.3V voltage (V) description: RCU 3.3V voltage (V)
...@@ -317,7 +317,7 @@ variables: ...@@ -317,7 +317,7 @@ variables:
dtype: double dtype: double
dim: 32 dim: 32
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_1V8 - name: RCU_1V8
description: RCU 1.8V voltage (V) description: RCU 1.8V voltage (V)
...@@ -329,7 +329,7 @@ variables: ...@@ -329,7 +329,7 @@ variables:
dtype: double dtype: double
dim: 32 dim: 32
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_2V5 - name: RCU_2V5
description: RCU 2.5V voltage (V) description: RCU 2.5V voltage (V)
...@@ -341,9 +341,9 @@ variables: ...@@ -341,9 +341,9 @@ variables:
dtype: double dtype: double
dim: 32 dim: 32
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_V_ANT - name: RCU_ANT_VOUT
description: RCU antenna voltage (V) description: RCU antenna voltage (V)
driver: I2C_RCU driver: I2C_RCU
devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2] devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2]
...@@ -353,9 +353,9 @@ variables: ...@@ -353,9 +353,9 @@ variables:
dtype: double dtype: double
dim: 96 dim: 96
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_ANT_V - name: RCU_ANT_VIN
description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON. description: Voltage on antenna output of RCU (V). Controlled by ANT_PWR_ON.
driver: I2C_RCU driver: I2C_RCU
devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2] devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2]
...@@ -365,9 +365,9 @@ variables: ...@@ -365,9 +365,9 @@ variables:
dtype: double dtype: double
dim: 96 dim: 96
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_ANT_I - name: RCU_ANT_IOUT
description: Current drawn on antenna output of RCU (A) description: Current drawn on antenna output of RCU (A)
driver: I2C_RCU driver: I2C_RCU
devreg: [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2] devreg: [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2]
...@@ -377,7 +377,7 @@ variables: ...@@ -377,7 +377,7 @@ variables:
dtype: double dtype: double
dim: 96 dim: 96
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_PWR_DIGITAL_ON - name: RCU_PWR_DIGITAL_ON
description: RCU digital power enable. Controlled by calling RCU_on/RCU_off description: RCU digital power enable. Controlled by calling RCU_on/RCU_off
...@@ -400,7 +400,7 @@ variables: ...@@ -400,7 +400,7 @@ variables:
dtype: boolean dtype: boolean
dim: 32 dim: 32
monitor: true monitor: true
mask: RCU_I2C_STATUS mask: RCU_I2C_error
- name: RCU_PWR_ANALOG_ON - name: RCU_PWR_ANALOG_ON
description: RCU analog power enable. Controlled by RCU_on/off description: RCU analog power enable. Controlled by RCU_on/off
...@@ -479,7 +479,7 @@ variables: ...@@ -479,7 +479,7 @@ variables:
dim: 32 dim: 32
mask: RCU_mask mask: RCU_mask
- name: RCU_ADC_lock - name: RCU_ADC_locked
description: RCU ADC lock status, 0x81=locked description: RCU ADC lock status, 0x81=locked
driver: I2C_RCU driver: I2C_RCU
devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat] devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat]
...@@ -568,7 +568,7 @@ variables: ...@@ -568,7 +568,7 @@ variables:
debug: true debug: true
methods: methods:
- name: RCU_Init #Called after startup to load. Should have all stored registers - name: RECVTR_Init #Called after startup to load. Should have all stored registers
driver: I2C_RCU driver: I2C_RCU
debug: True debug: True
instructions: instructions:
...@@ -591,7 +591,7 @@ methods: ...@@ -591,7 +591,7 @@ methods:
driver: I2C_RCU driver: I2C_RCU
mask: RCU_mask mask: RCU_mask
instructions: instructions:
- RCU_I2C_STATUS: 0 - RCU_I2C_error: 0
- IO2.CONF1: 0x80 #Pgood on 0x80 - IO2.CONF1: 0x80 #Pgood on 0x80
- IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att - IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att
- IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1) #LEDS=on=low - IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1) #LEDS=on=low
...@@ -669,7 +669,7 @@ methods: ...@@ -669,7 +669,7 @@ methods:
driver: I2C_RCU driver: I2C_RCU
mask: RCU_mask mask: RCU_mask
instructions: instructions:
- RCU_I2C_STATUS: 0 - RCU_I2C_error: 0
- RCU_PWR_ANALOG_ON: 0 #Switch power off - RCU_PWR_ANALOG_ON: 0 #Switch power off
- RCU_PWR_DIGITAL_ON: 0 #Switch power off - RCU_PWR_DIGITAL_ON: 0 #Switch power off
- IO2.GPIO1: 0 - IO2.GPIO1: 0
......
...@@ -13,6 +13,7 @@ from yamlconfig import Find; ...@@ -13,6 +13,7 @@ from yamlconfig import Find;
import yamlconfig as yc import yamlconfig as yc
logging.basicConfig(level="WARNING",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s') logging.basicConfig(level="WARNING",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')
RunTimer=True; RunTimer=True;
#def signal_handler(sig, frame): #def signal_handler(sig, frame):
...@@ -24,37 +25,66 @@ RunTimer=True; ...@@ -24,37 +25,66 @@ RunTimer=True;
#logging.info("Start I2C processes") #logging.info("Start I2C processes")
#threads=[] #threads=[]
#I2Cclients=[] #I2Cclients=[]
name='RCUL' name='RECVTR'
#RCU_I2C=i2client.i2client(name=name) #RCU_I2C=i2client.i2client(name=name)
RCUNR=1;
conf=yc.yamlconfig(name) conf=yc.yamlconfig(name)
conf.linkdevices() conf.linkdevices()
conf.loaddrivers() conf.loaddrivers()
conf.linkdrivers() conf.linkdrivers()
#def getRCU(D,N=1):
#return D[N*RCUNR:N*(RCUNR+1)]
def GetVal(name,N=1): def GetVal(name,N=1):
varid=conf.getvarid(name); varid=conf.getvarid(name);
var1=conf.getvars()[varid] var1=conf.getvars()[varid]
drv=var1.get('drivercls'); drv=var1.get('drivercls');
mask=[True]*N+[False]*((32-1)*N); mask=[False]*RCUNR*N+[True]*N+[False]*((32-RCUNR-1)*N);
data=drv.OPCUAReadVariable(varid,var1,mask) data=drv.OPCUAReadVariable(varid,var1,mask)
return data[0].data,var1 data=data[0].data
N3=len(data)//32;
return data[N3*RCUNR:N3*(RCUNR+1)],var1
data,var1=GetVal('RCU_ID'); data,var1=GetVal('RCU_ID');
print("ID=",[hex(d) for d in data[:4]]); #print("ID= %h%h%h%h" % (,str([hex(d) for d in data[:4]]));
ID=("%.2x%.2x%.2x%.2x" % (data[0],data[1],data[2],data[3]))
logPath='log'
rootLogger = logging.getLogger()
fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, "RCU2L"+ID))
#fileHandler.setFormatter(logFormatter)
rootLogger.addHandler(fileHandler)
logging.warning("ID=%s" % ID)
#exit();
#print("Check
def Check(D,Dmin,Dmax):
for d in D:
if (d<Dmin):
logging.error("Value to small");
return False;
if (d>Dmax):
logging.error("Value to large");
return False;
return True
if False: if True:
data,var1=GetVal('RCU_temperature'); data,var1=GetVal('RCU_temperature');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("Temp=",D,"K") logging.warning("RCU Temperature=%.3f K" % D)
if (D<290) or (D>350): exit() if not Check([D],290,350): exit();
data,var1=GetVal('RCU_3V3'); data,var1=GetVal('RCU_3V3');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("3V3=",D,"V") logging.warning("3V3 =%.3f V" % D)
if (D<3.2) or (D>3.4): exit() # print("3V3=",D,"V")
if not Check([D],3.2,3.4): exit();
# if (D<3.2) or (D>3.4): exit()
#print("data=",[hex(d) for d in data[:3]]); #print("data=",[hex(d) for d in data[:3]]);
#exit()
def SetRegister(regname,value): def SetRegister(regname,value):
methodid=conf.getmethodid("RCU_on"); methodid=conf.getmethodid("RCU_on");
...@@ -62,12 +92,13 @@ def SetRegister(regname,value): ...@@ -62,12 +92,13 @@ def SetRegister(regname,value):
drv=var1.get('drivercls'); drv=var1.get('drivercls');
v1=conf.getdevreg(regname) v1=conf.getdevreg(regname)
drv2=v1.get('drivercls') drv2=v1.get('drivercls')
mask=[True]+[False]*31; mask=[False]*(RCUNR)+[True]+[False]*(31-RCUNR);
if drv: drv.Setdevreg(v1,value,mask) if drv: drv.Setdevreg(v1,value,mask)
elif drv2: drv2.Setdevreg(v1,value,mask) elif drv2: drv2.Setdevreg(v1,value,mask)
else: logging.warn("Driver not specified for instruction"+key) else: logging.warn("Driver not specified for instruction"+key)
if False: logging.warning("Switch RCU Power on");
if True:
SetRegister("IO1.GPIO1",[0]) SetRegister("IO1.GPIO1",[0])
SetRegister("IO1.GPIO2",[0x80]) #Analog power on SetRegister("IO1.GPIO2",[0x80]) #Analog power on
SetRegister("IO2.GPIO1",[0x40]) #Digital power on SetRegister("IO2.GPIO1",[0x40]) #Digital power on
...@@ -78,85 +109,120 @@ if False: ...@@ -78,85 +109,120 @@ if False:
SetRegister("IO2.CONF1",[0x80]) #Pgood on P07 SetRegister("IO2.CONF1",[0x80]) #Pgood on P07
SetRegister("IO2.CONF2",[0]) SetRegister("IO2.CONF2",[0])
print("IO expander status:"); logging.warning(" Check IO expander 1&2");
data,var=GetVal('RCU_IO1_GPIO1');print("IO1_1",hex(data[0])) # print("IO expander status:");
data,var=GetVal('RCU_IO1_GPIO2');print("IO1_2",hex(data[0])) data,var=GetVal('RCU_IO1_GPIO1');
data,var=GetVal('RCU_IO2_GPIO1');print("IO2_1",hex(data[0])) if not Check(data,0,0): exit();
data,var=GetVal('RCU_IO2_GPIO2');print("IO2_2",hex(data[0])) data,var=GetVal('RCU_IO1_GPIO2');
if not Check(data,0x80,0x80): exit();
if False: data,var=GetVal('RCU_IO2_GPIO1');
if not Check(data,0xC0,0xC0): exit();
data,var=GetVal('RCU_IO2_GPIO2');
if not Check(data,0x0,0x0): exit();
logging.warning("Check voltages")
if True:
data,var1=GetVal('RCU_1V8'); data,var1=GetVal('RCU_1V8');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("1V8=",D,"") logging.warning(" 1V8 =%.3f V" % D)
if not Check([D],1.7,1.9): exit();
data,var1=GetVal('RCU_2V5'); data,var1=GetVal('RCU_2V5');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("2V5=",D,"") logging.warning(" 2V5 =%.3f V" % D)
if not Check([D],2.4,2.6): exit();
if False: if True:
data,var1=GetVal('ANT_Vin'); data,var1=GetVal('RCU_ANT_VIN');
D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.) D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.) D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
print("Vant_in=",D0,D1,D2) logging.warning(" Vant_in=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
# SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on logging.warning("Switch Antenna power on")
# SetRegister("IO1.GPIO2",[0xC0]) #Analog power on SetRegister("IO1.GPIO1",[0xC0]) #Antenna power on
SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
data,var1=GetVal('ANT_Vout'); data,var1=GetVal('RCU_ANT_VOUT');
D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.) D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.) D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
print("Vant_out=",D0,D1,D2) logging.warning(" Vant_out=%.2f %.2f %.2f" % (D0,D1,D2))
if not Check([D0,D1,D2],5,10): exit();
data,var1=GetVal('ANT_I'); data,var1=GetVal('RCU_ANT_IOUT');
D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.) D0=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.) D1=((data[3]*256+data[4])*256+data[5])*var1.get('scale',1.)
D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.) D2=((data[6]*256+data[7])*256+data[8])*var1.get('scale',1.)
print("Iant=",D0,D1,D2) logging.warning(" Iant_out=%.2f %.2f %.2f" % (D0,D1,D2))
# print("Iant=",D0,D1,D2)
#exit()
if False: if True:
logging.warning("Test ADC read")
logging.warning(" Check IO expander 3");
SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_EN=low SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_EN=low
SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output SetRegister("IO3.CONF1",[0]) #All output
SetRegister("IO3.CONF2",[0]) SetRegister("IO3.CONF2",[0])
data,var=GetVal('RCU_IO3_GPIO1');print("IO3_1",hex(data[0])) data,var=GetVal('RCU_IO3_GPIO1');
data,var=GetVal('RCU_IO3_GPIO2');print("IO3_2",hex(data[0])) if not Check(data,0x15,0x15): exit();
data,var=GetVal('RCU_IO3_GPIO2');
if not Check(data,0x47,0x47): exit();
if False: if True:
#Test reading register from ADCs #Test reading register from ADCs
data,var=GetVal('RCU_ADC_JESD');print("ADC JESD",[hex(d) for d in data[:3]]) data,var=GetVal('RCU_ADC_JESD');
logging.warning(" ADC JESD (0x14)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x14,0x14): exit();
logging.warning("Test ADC write")
#Test writing ADC register #Test writing ADC register
SetRegister("ADC1.SYNC_control",[1]) SetRegister("ADC1.SYNC_control",[1])
SetRegister("ADC1.Update",[1]) SetRegister("ADC1.Update",[1])
data,var=GetVal('RCU_ADC_sync');print("ADC sync",[hex(d) for d in data[:3]]) SetRegister("ADC2.SYNC_control",[1])
SetRegister("ADC2.Update",[1])
SetRegister("ADC3.SYNC_control",[1])
SetRegister("ADC3.Update",[1])
data,var=GetVal('RCU_ADC_sync');
logging.warning(" ADC sync (0x1)=%x %x %x" % (data[0],data[1],data[2]))
if not Check(data,0x1,0x1): exit();
#exit()
#Need to update I2c bitbang.... #Need to update I2c bitbang....
if True: if True:
logging.warning("Test DITHER communication")
SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_SDN=low SetRegister("IO3.GPIO1",[0x15]) #ADC_SDIO=high, clk=low, DTH_SDN=low
SetRegister("IO3.GPIO2",[0x3F]) #ADC SC=high, DTH_SDA=low, DTH_CLK=high SetRegister("IO3.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output SetRegister("IO3.CONF1",[0]) #All output
SetRegister("IO3.CONF2",[0x40]) #DTH_SDA=input SetRegister("IO3.CONF2",[0x0]) #All output (DTH_SDA=input)
# data,var=GetVal('RCU_IO3_GPIO1');print("IO3_1",hex(data[0])) # data,var=GetVal('RCU_IO3_GPIO1');print("IO3_1",hex(data[0]))
# data,var=GetVal('RCU_IO3_GPIO2');print("IO3_2",hex(data[0])) # data,var=GetVal('RCU_IO3_GPIO2');print("IO3_2",hex(data[0]))
f=int(150e6) f=int(150e6)
print("Frequency set=",f) logging.warning(" Set frequency 150MHz");
# print("Frequency set=",f)
d=[0]*4; d=[0]*4;
for i in range(4): for i in range(4):
d[3-i]=f%256;f//=256 d[3-i]=f%256;f//=256
# print([hex(h) for h in d]) # print([hex(h) for h in d])
SetRegister("DTH1.Freq",d) #DTH_SDA=input SetRegister("DTH1.Freq",d) #DTH_SDA=input
SetRegister("DTH2.Freq",d) #DTH_SDA=input
SetRegister("DTH3.Freq",d) #DTH_SDA=input
f=int(150e6)
data,var1=GetVal("RCU_DTH_freq") data,var1=GetVal("RCU_DTH_freq")
# data,var1=GetVal("RCU_DTH_Rev") # data,var1=GetVal("RCU_DTH_Rev")
f=0; for j in range(3):
f2=0;
for i in range(4): for i in range(4):
f=f*256+data[i]; f2=f2*256+data[j*4+i];
print("Frequency read back=",f) #print("Frequency read back=",f)
logging.warning(" Readback frequency %f" % f2);
if not Check([f2],f-1,f+1): exit();
# print([hex(h) for h in data[:30]]) # print([hex(h) for h in data[:30]])
logging.warning("** I2C communication working **");
#print(data) #print(data)
#scale=float(scale) #scale=float(scale)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment