Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PyPCC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
LOFAR2.0
PyPCC
Commits
0bb96271
"git@git.astron.nl:lofar2.0/tango.git" did not exist on "2f7744420b49fdd4def28b34d7c0f84112669d6b"
Commit
0bb96271
authored
3 years ago
by
Paulus Kruger
Browse files
Options
Downloads
Patches
Plain Diff
RCU2L test script logging
parent
2ea1cd46
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
config/RECVTR.yaml
+18
-18
18 additions, 18 deletions
config/RECVTR.yaml
testRCUL.py
+112
-46
112 additions, 46 deletions
testRCUL.py
with
130 additions
and
64 deletions
config/RECVTR.yaml
+
18
−
18
View file @
0bb96271
...
...
@@ -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_V
IN
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_I
OUT
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_lock
ed
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
:
R
CU
_Init
#Called after startup to load. Should have all stored registers
-
name
:
R
ECVTR
_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
...
...
This diff is collapsed.
Click to expand it.
testRCUL.py
+
112
−
46
View file @
0bb96271
...
...
@@ -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
=
'
R
CUL
'
name
=
'
R
ECVTR
'
#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
Fals
e
:
if
Tru
e
:
data
,
var1
=
GetVal
(
'
RCU_temperature
'
);
D
=
((
data
[
0
]
*
256
+
data
[
1
])
*
256
+
data
[
2
])
*
var1
.
get
(
'
scale
'
,
1.
)
pr
in
t
(
"
Temp=
"
,
D
,
"
K
"
)
if
(
D
<
290
)
or
(
D
>
350
):
exit
()
logging
.
warn
in
g
(
"
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.
)
pr
in
t
(
"
2V5
=
"
,
D
,
""
)
if
Fals
e
:
data
,
var1
=
GetVal
(
'
ANT_V
in
'
);
logging
.
warn
in
g
(
"
2V5
=%.3f V
"
%
D
)
if
not
Check
([
D
],
2.4
,
2.6
):
exit
();
if
Tru
e
:
data
,
var1
=
GetVal
(
'
RCU_
ANT_V
IN
'
);
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_V
out
'
);
data
,
var1
=
GetVal
(
'
RCU_
ANT_V
OUT
'
);
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_I
OUT
'
);
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
Fals
e
:
if
Tru
e
:
#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
"
,[
0x
3F
])
#ADC SC=high, DTH_SDA=
low, DTH_CLK=
high
SetRegister
(
"
IO3.GPIO2
"
,[
0x
47
])
#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)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment