Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
lwc
/
compare
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Pipelines
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b13825f4
authored
Jul 26, 2019
by
Enrico Pozzobon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
f7 scripts for measuring ram utilization
parent
75c36bef
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
55 deletions
+78
-55
templates/f7/ram_pattern.bin
+0
-0
templates/f7/test
+72
-12
test.py
+6
-43
No files found.
templates/f7/ram_pattern.bin
0 → 100644
View file @
b13825f4
File added
templates/f7/test
View file @
b13825f4
...
...
@@ -8,17 +8,52 @@ import serial
import
subprocess
RAM_SIZE
=
0x50000
def
eprint
(
*
args
,
**
kargs
):
print
(
*
args
,
file
=
sys
.
stderr
,
**
kargs
)
def
flash
():
def
popen_jlink
():
pipe
=
subprocess
.
PIPE
cmd
=
[
'JLinkExe'
,
'flash.jlink'
]
p
=
subprocess
.
Popen
(
cmd
,
stdout
=
sys
.
stderr
,
stdin
=
pipe
)
stdout
,
stderr
=
p
.
communicate
(
""
)
cmd
=
[
'JLinkExe'
]
cmd
.
extend
([
'-autoconnect'
,
'1'
])
cmd
.
extend
([
'-device'
,
'STM32F746ZG'
])
cmd
.
extend
([
'-if'
,
'swd'
])
cmd
.
extend
([
'-speed'
,
'4000'
])
return
subprocess
.
Popen
(
cmd
,
stdout
=
sys
.
stderr
,
stdin
=
pipe
)
def
flash
():
p
=
popen_jlink
()
return
p
.
communicate
((
"""
loadbin build/f7.bin 0x8000000
r
g
exit
"""
)
.
encode
(
'ascii'
))
def
fill_ram
():
p
=
popen_jlink
()
return
p
.
communicate
((
"""
h
loadbin ram_pattern.bin 0x20000000
savebin ram_copy.bin 0x20000000 0x
%
x
r
g
exit
"""
%
RAM_SIZE
)
.
encode
(
'ascii'
))
def
dump_ram
():
p
=
popen_jlink
()
return
p
.
communicate
((
"""
h
savebin ram_dump.bin 0x20000000 0x
%
x
exit
"""
%
RAM_SIZE
)
.
encode
(
'ascii'
))
def
get_serial
():
import
serial.tools.list_ports
...
...
@@ -113,16 +148,10 @@ def main(argv):
uartp
=
UARTP
(
ser
)
flash
()
fill_ram
()
eprint
(
"Flashed"
)
time
.
sleep
(
0.1
)
ser
.
setDTR
(
False
)
# IO0=HIGH
ser
.
setRTS
(
True
)
# EN=LOW, chip in reset
time
.
sleep
(
0.1
)
ser
.
setDTR
(
False
)
# IO0=HIGH
ser
.
setRTS
(
False
)
# EN=HIGH, chip out of reset
time
.
sleep
(
1
)
def
stdin_read
(
n
):
b
=
sys
.
stdin
.
buffer
.
read
(
n
)
if
len
(
b
)
!=
n
:
...
...
@@ -176,6 +205,37 @@ def main(argv):
raise
Exception
(
"Unacknowledged variable transfer"
)
eprint
(
"Operation
%
c completed successfully"
%
action
)
elif
action
in
b
"u"
:
dump_ram
()
with
open
(
"ram_copy.bin"
,
'rb'
)
as
dump
:
dump_a
=
dump
.
read
()
with
open
(
"ram_dump.bin"
,
'rb'
)
as
dump
:
dump_b
=
dump
.
read
()
if
len
(
dump_a
)
!=
RAM_SIZE
or
len
(
dump_b
)
!=
RAM_SIZE
:
raise
Exception
(
"Wrong dump sizes: 0x
%
x, 0x
%
x"
%
(
len
(
dump_a
),
len
(
dump_b
)))
streaks
=
[]
streak_beg
=
0
streak_end
=
0
for
i
in
range
(
len
(
dump_a
)):
if
dump_a
[
i
]
==
dump_b
[
i
]:
streak_end
=
i
else
:
if
streak_end
!=
streak_beg
:
streaks
.
append
((
streak_beg
,
streak_end
))
streak_beg
=
i
streak_end
=
i
for
b
,
e
in
streaks
:
eprint
(
"equal bytes from 0x
%
x to 0x
%
x (length:
%
d)"
%
(
b
,
e
,
e
-
b
))
b
,
e
=
max
(
streaks
,
key
=
lambda
a
:
a
[
1
]
-
a
[
0
])
eprint
(
"longest equal bytes streak from 0x
%
x to 0x
%
x (length:
%
d)"
%
(
b
,
e
,
e
-
b
))
v
=
struct
.
pack
(
"<II"
,
4
,
e
-
b
)
sys
.
stdout
.
buffer
.
write
(
v
)
sys
.
stdout
.
flush
()
else
:
raise
Exception
(
"Unknown action
%
c"
%
action
)
...
...
test.py
View file @
b13825f4
...
...
@@ -16,11 +16,7 @@ def main(argv):
for
attempt
in
range
(
3
):
print
(
"beginning test
%
d of '
%
s' using test vectors '
%
s'"
%
(
attempt
,
' '
.
join
(
cmd
),
argv
[
1
]))
try
:
measurements
=
begin_measurement
()
try
:
test
(
argv
[
1
],
cmd
)
finally
:
end_measurement
(
measurements
)
test
(
argv
[
1
],
cmd
)
print
(
"TEST SUCCESSFUL"
)
return
0
...
...
@@ -115,6 +111,11 @@ def test(test_file, cmd):
if
m
!=
output
:
raise
Exception
(
"output of encryption is different from expected ciphertext"
)
write
(
b
'u'
)
output
=
obtain
()
print
(
" untouched memory =
%
d"
%
struct
.
unpack
(
"<I"
,
output
))
break
elif
res
is
not
None
:
if
res
[
1
]
.
lower
()
==
'count'
:
i
=
int
(
res
[
2
],
10
)
...
...
@@ -133,43 +134,5 @@ def test(test_file, cmd):
else
:
raise
Exception
(
"ERROR: unparsed line in test vectors file: '
%
s'"
%
line
)
def
begin_measurement
():
import
saleae
import
time
sal
=
saleae
.
Saleae
()
sal
.
set_active_channels
([
1
,
2
],
[])
sal
.
set_sample_rate
(
sal
.
get_all_sample_rates
()[
0
])
sal
.
set_capture_seconds
(
6000
)
sal
.
capture_start
()
time
.
sleep
(
1
)
if
sal
.
is_processing_complete
():
raise
Exception
(
"Capture didn't start successfully"
)
return
sal
def
end_measurement
(
sal
):
import
time
if
sal
.
is_processing_complete
():
raise
Exception
(
"Capture finished before expected"
)
time
.
sleep
(
1
)
sal
.
capture_stop
();
time
.
sleep
(
.
1
)
for
attempt
in
range
(
3
):
if
not
sal
.
is_processing_complete
():
print
(
"Waiting for capture to complete..."
)
time
.
sleep
(
1
)
continue
outfile
=
"measurement_
%
s.csv"
%
time
.
strftime
(
"
%
Y
%
m
%
d-
%
H
%
M
%
S"
)
outfile
=
os
.
path
.
join
(
"measurements"
,
outfile
)
if
os
.
path
.
isfile
(
outfile
):
os
.
unlink
(
outfile
)
sal
.
export_data2
(
os
.
path
.
abspath
(
outfile
))
print
(
"Measurements written to '
%
s'"
%
outfile
)
mdbfile
=
os
.
path
.
join
(
"measurements"
,
"measurements.txt"
)
mdbfile
=
open
(
mdbfile
,
"a"
)
mdbfile
.
write
(
"
%
s >
%
s
\n
"
%
(
' '
.
join
(
sys
.
argv
),
outfile
))
mdbfile
.
close
()
return
0
raise
Exception
(
"Capture didn't complete successfully"
)
if
__name__
==
"__main__"
:
sys
.
exit
(
main
(
sys
.
argv
))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment