From 90b5d1d22ede081242a2b5e2ab462a889957f9ad Mon Sep 17 00:00:00 2001 From: lwc-tester Date: Wed, 19 Feb 2020 18:06:00 +0100 Subject: [PATCH] updated f7 template to the new glorious pythonic way of doing things! --- templates/f7/test | 267 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ test_common.py | 8 ++++---- 2 files changed, 61 insertions(+), 214 deletions(-) diff --git a/templates/f7/test b/templates/f7/test index ef7368a..486a1aa 100755 --- a/templates/f7/test +++ b/templates/f7/test @@ -5,242 +5,89 @@ import sys import time import struct import serial -import subprocess +import pylink +sys.path.insert(0, '.') +from test_common import ( + SaleaeTimeMeasurements, + parse_nist_aead_test_vectors, + DeviceUnderTestAeadUARTP, + run_nist_aead_test, +) -RAM_SIZE = 0x50000 - def eprint(*args, **kargs): print(*args, file=sys.stderr, **kargs) -def popen_jlink(): - pipe = subprocess.PIPE - 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 get_serial(): + import serial.tools.list_ports + ports = serial.tools.list_ports.comports() + for port in ports: + print(port.serial_number) + devices = [ + p.device + for p in ports + if p.serial_number == 'FT2XA9MY' + ] + devices.sort() + return serial.Serial( + devices[0], + baudrate=115200, + timeout=5) -def flash(): - p = popen_jlink() - return p.communicate((""" -loadbin build/f7.bin 0x8000000 -r -g -exit - """).encode('ascii')) +class F7(DeviceUnderTestAeadUARTP): + RAM_SIZE = 0x50000 + def __init__(self): + DeviceUnderTestAeadUARTP.__init__(self, get_serial()) + self.jlink = pylink.JLink() + self.jlink.open(779340002) -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 flash(self): + jlink = self.jlink + jlink.connect('STM32F746ZG') + jlink.flash_file('build/f7.bin', 0x8000000) + jlink.flash_file('ram_pattern.bin', 0x20000000) + jlink.reset() + jlink.restart() -def dump_ram(): - p = popen_jlink() - return p.communicate((""" -h -savebin ram_dump.bin 0x20000000 0x%x -exit - """ % RAM_SIZE).encode('ascii')) + def dump_ram(self): + jlink = self.jlink + return bytes(jlink.memory_read8(0x20000000, F7.RAM_SIZE)) -def get_serial(): - import serial.tools.list_ports - ports = serial.tools.list_ports.comports() - devices = [ p.device for p in ports ] - devices.sort() - return devices[-1] - - -class UARTP: - def __init__(self, ser): - UARTP.SYN = 0xf9 - UARTP.FIN = 0xf3 - self.ser = ser - - def uart_read(self): - r = self.ser.read(1) - if len(r) != 1: - raise Exception("Serial read error") - return r[0] - - def uart_write(self, c): - b = struct.pack("B", c) - r = self.ser.write(b) - if r != len(b): - raise Exception("Serial write error") - return r - - def send(self, buf): - self.uart_write(UARTP.SYN) - len_ind_0 = 0xff & len(buf) - len_ind_1 = 0xff & (len(buf) >> 7) - if len(buf) < 128: - self.uart_write(len_ind_0) - else: - self.uart_write(len_ind_0 | 0x80) - self.uart_write(len_ind_1) - fcs = 0 - for i in range(len(buf)): - info = buf[i] - fcs = (fcs + info) & 0xff - self.uart_write(buf[i]) - fcs = (0xff - fcs) & 0xff - self.uart_write(fcs) - self.uart_write(UARTP.FIN) - eprint("sent frame '%s'" % buf.hex()) - - def recv(self): - tag_old = UARTP.FIN - while 1: - tag = tag_old - while 1: - if tag_old == UARTP.FIN: - if tag == UARTP.SYN: - break - tag_old = tag - tag = self.uart_read() - tag_old = tag - - l = self.uart_read() - if l & 0x80: - l &= 0x7f - l |= self.uart_read() << 7 - - fcs = 0 - buf = [] - for i in range(l): - info = self.uart_read() - buf.append(info) - fcs = (fcs + info) & 0xff - fcs = (fcs + self.uart_read()) & 0xff - - tag = self.uart_read() - if fcs == 0xff: - if tag == UARTP.FIN: - buf = bytes(buf) - eprint("rcvd frame '%s'" % buf.hex()) - if len(buf) >= 1 and buf[0] == 0xde: - sys.stderr.buffer.write(buf[1:]) - sys.stderr.flush() - else: - return buf +def main(argv): + if len(argv) < 2: + print("Usage: test LWC_AEAD_KAT.txt") + kat = list(parse_nist_aead_test_vectors(argv[1])) -def main(argv): eprint(argv[0]) script_dir = os.path.split(argv[0])[0] if len(script_dir) > 0: os.chdir(script_dir) - dev = get_serial() - ser = serial.Serial(dev, baudrate=115200, timeout=5) - uartp = UARTP(ser) + dut = F7() - flash() - fill_ram() + dut.flash() eprint("Flashed") - time.sleep(0.1) - - def stdin_read(n): - b = sys.stdin.buffer.read(n) - if len(b) != n: - sys.exit(1) - return b - - def stdin_readvar(): - l = stdin_read(4) - (l, ) = struct.unpack("