diff --git a/config/RECVTR.yaml b/config/RECVTR.yaml index f1a81f0af082247d690b5482b335a1955e83a462..97a698461ad42c861c1623b981ee67923069003d 100644 --- a/config/RECVTR.yaml +++ b/config/RECVTR.yaml @@ -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 diff --git a/testRCUL.py b/testRCUL.py index f9f3525492baa6667ceea1d6c2fa56fbe1b80d4d..d6457359410543fae4b2f9fd22fe16ab28c36321 100644 --- a/testRCUL.py +++ b/testRCUL.py @@ -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)