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:
type: i2c_array #An array of similar devices connected to an I2C switch
parent: I2C1
parameters: [0,31,14] #start,number of RCUs, error count to disable I2C
status: RCU_I2C_STATUS
status: RCU_I2C_error
- name: I2C_HBAT
type: hba1 #Special driver to manage HBAT1s.
parent: I2C_RCU
......@@ -220,7 +220,7 @@ variables:
dtype: boolean
dim: 32
- name: RCU_I2C_STATUS
- name: RCU_I2C_error
description: 0=Good, >0 communication error
driver: I2C_RCU
rw: ro #server RW variable, not linked to IO
......@@ -235,7 +235,7 @@ variables:
# dtype: uint8
# dim: 1
- name: RECVTR_busy
- name: RECVTR_translator_busy
description: True when I2C line is busy
rw: ro #server variable, not linked to IO
dtype: boolean
......@@ -305,7 +305,7 @@ variables:
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_3V3
description: RCU 3.3V voltage (V)
......@@ -317,7 +317,7 @@ variables:
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_1V8
description: RCU 1.8V voltage (V)
......@@ -329,7 +329,7 @@ variables:
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_2V5
description: RCU 2.5V voltage (V)
......@@ -341,9 +341,9 @@ variables:
dtype: double
dim: 32
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_V_ANT
- name: RCU_ANT_VOUT
description: RCU antenna voltage (V)
driver: I2C_RCU
devreg: [AN.V_Ant_O0,AN.V_Ant_O1,AN.V_Ant_O2]
......@@ -353,9 +353,9 @@ variables:
dtype: double
dim: 96
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.
driver: I2C_RCU
devreg: [AN.V_Ant_I0,AN.V_Ant_I1,AN.V_Ant_I2]
......@@ -365,9 +365,9 @@ variables:
dtype: double
dim: 96
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)
driver: I2C_RCU
devreg: [AN.I_Ant0,AN.I_Ant1,AN.I_Ant2]
......@@ -377,7 +377,7 @@ variables:
dtype: double
dim: 96
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_PWR_DIGITAL_ON
description: RCU digital power enable. Controlled by calling RCU_on/RCU_off
......@@ -400,7 +400,7 @@ variables:
dtype: boolean
dim: 32
monitor: true
mask: RCU_I2C_STATUS
mask: RCU_I2C_error
- name: RCU_PWR_ANALOG_ON
description: RCU analog power enable. Controlled by RCU_on/off
......@@ -479,7 +479,7 @@ variables:
dim: 32
mask: RCU_mask
- name: RCU_ADC_lock
- name: RCU_ADC_locked
description: RCU ADC lock status, 0x81=locked
driver: I2C_RCU
devreg: [ADC1.PLL_stat,ADC2.PLL_stat,ADC3.PLL_stat]
......@@ -568,7 +568,7 @@ variables:
debug: true
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
debug: True
instructions:
......@@ -591,7 +591,7 @@ methods:
driver: I2C_RCU
mask: RCU_mask
instructions:
- RCU_I2C_STATUS: 0
- RCU_I2C_error: 0
- IO2.CONF1: 0x80 #Pgood on 0x80
- IO2.GPIO1: 0x4A #0x40 Dig on, 0x0a =10dB att
- IO2.GPIO2: 0x55 #0x15 #Band0 (or 0x2a band 1) #LEDS=on=low
......@@ -669,7 +669,7 @@ methods:
driver: I2C_RCU
mask: RCU_mask
instructions:
- RCU_I2C_STATUS: 0
- RCU_I2C_error: 0
- RCU_PWR_ANALOG_ON: 0 #Switch power off
- RCU_PWR_DIGITAL_ON: 0 #Switch power off
- IO2.GPIO1: 0
......
......@@ -13,6 +13,7 @@ from yamlconfig import Find;
import yamlconfig as yc
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;
#def signal_handler(sig, frame):
......@@ -24,37 +25,66 @@ RunTimer=True;
#logging.info("Start I2C processes")
#threads=[]
#I2Cclients=[]
name='RCUL'
name='RECVTR'
#RCU_I2C=i2client.i2client(name=name)
RCUNR=1;
conf=yc.yamlconfig(name)
conf.linkdevices()
conf.loaddrivers()
conf.linkdrivers()
#def getRCU(D,N=1):
#return D[N*RCUNR:N*(RCUNR+1)]
def GetVal(name,N=1):
varid=conf.getvarid(name);
var1=conf.getvars()[varid]
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)
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');
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');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("Temp=",D,"K")
if (D<290) or (D>350): exit()
logging.warning("RCU Temperature=%.3f K" % D)
if not Check([D],290,350): exit();
data,var1=GetVal('RCU_3V3');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("3V3=",D,"V")
if (D<3.2) or (D>3.4): exit()
logging.warning("3V3 =%.3f V" % D)
# 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]]);
#exit()
def SetRegister(regname,value):
methodid=conf.getmethodid("RCU_on");
......@@ -62,12 +92,13 @@ def SetRegister(regname,value):
drv=var1.get('drivercls');
v1=conf.getdevreg(regname)
drv2=v1.get('drivercls')
mask=[True]+[False]*31;
mask=[False]*(RCUNR)+[True]+[False]*(31-RCUNR);
if drv: drv.Setdevreg(v1,value,mask)
elif drv2: drv2.Setdevreg(v1,value,mask)
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.GPIO2",[0x80]) #Analog power on
SetRegister("IO2.GPIO1",[0x40]) #Digital power on
......@@ -78,85 +109,120 @@ if False:
SetRegister("IO2.CONF1",[0x80]) #Pgood on P07
SetRegister("IO2.CONF2",[0])
print("IO expander status:");
data,var=GetVal('RCU_IO1_GPIO1');print("IO1_1",hex(data[0]))
data,var=GetVal('RCU_IO1_GPIO2');print("IO1_2",hex(data[0]))
data,var=GetVal('RCU_IO2_GPIO1');print("IO2_1",hex(data[0]))
data,var=GetVal('RCU_IO2_GPIO2');print("IO2_2",hex(data[0]))
if False:
logging.warning(" Check IO expander 1&2");
# print("IO expander status:");
data,var=GetVal('RCU_IO1_GPIO1');
if not Check(data,0,0): exit();
data,var=GetVal('RCU_IO1_GPIO2');
if not Check(data,0x80,0x80): exit();
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');
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');
D=((data[0]*256+data[1])*256+data[2])*var1.get('scale',1.)
print("2V5=",D,"")
if False:
data,var1=GetVal('ANT_Vin');
logging.warning(" 2V5 =%.3f V" % D)
if not Check([D],2.4,2.6): exit();
if True:
data,var1=GetVal('RCU_ANT_VIN');
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.)
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
# SetRegister("IO1.GPIO2",[0xC0]) #Analog power on
logging.warning("Switch Antenna 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.)
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.)
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.)
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.)
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.GPIO2",[0x47]) #ADC SC=high, DTH_SDA=high
SetRegister("IO3.CONF1",[0]) #All output
SetRegister("IO3.CONF2",[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_GPIO1');
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
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
SetRegister("ADC1.SYNC_control",[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....
if True:
logging.warning("Test DITHER communication")
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.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_GPIO2');print("IO3_2",hex(data[0]))
f=int(150e6)
print("Frequency set=",f)
logging.warning(" Set frequency 150MHz");
# print("Frequency set=",f)
d=[0]*4;
for i in range(4):
d[3-i]=f%256;f//=256
# print([hex(h) for h in d])
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_Rev")
f=0;
for i in range(4):
f=f*256+data[i];
print("Frequency read back=",f)
for j in range(3):
f2=0;
for i in range(4):
f2=f2*256+data[j*4+i];
#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]])
logging.warning("** I2C communication working **");
#print(data)
#scale=float(scale)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment