This is an automated email from the ASF dual-hosted git repository. wes3 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
The following commit(s) were added to refs/heads/master by this push: new 817ba5b da1469x: otp and serial script enhancements (#2262) 817ba5b is described below commit 817ba5b516da1241a7f0e9355b1fa0834c15c53d Author: Naveen Kaje <naveen.k...@juul.com> AuthorDate: Wed Apr 8 12:07:46 2020 -0500 da1469x: otp and serial script enhancements (#2262) * hw/bsp/da1469x: da1469x_serial: Make the reset script optional Make the reset script an optional parameter. This gives the user an option to manually reset the board to make it enter the serial load mode or use JLink or OpenOCD based reset script. Signed-off-by: Naveen Kaje <naveen.k...@juul.com> * hw/bsp/da1469x: otp_tool: provide common function for serial Provide common method for serial port opening opens the port, flushes and returns port handle. This eleminates repeated code. Signed-off-by: Naveen Kaje <naveen.k...@juul.com> * hw/bsp/da1469x: da1469x_serial: drain the port after open Drain the port after opening to ensure the buffers are empty. Signed-off-by: Naveen Kaje <naveen.k...@juul.com> --- hw/bsp/dialog_da1469x-dk-pro/da1469x_serial.py | 16 +++++- hw/bsp/dialog_da1469x-dk-pro/otp_tool.py | 70 +++++++++----------------- 2 files changed, 39 insertions(+), 47 deletions(-) diff --git a/hw/bsp/dialog_da1469x-dk-pro/da1469x_serial.py b/hw/bsp/dialog_da1469x-dk-pro/da1469x_serial.py index 1d7d7aa..598c609 100755 --- a/hw/bsp/dialog_da1469x-dk-pro/da1469x_serial.py +++ b/hw/bsp/dialog_da1469x-dk-pro/da1469x_serial.py @@ -26,7 +26,7 @@ from datetime import datetime @click.argument('infile') @click.option('-u', '--uart', required=True, help='uart port') -@click.option('-r', '--reset_script', required=True, help='Custom reset script to switch to serial load') +@click.option('-r', '--reset_script', required=False, help='Custom reset script to switch to serial load') @click.command(help='Load the provided file using serial load protocol') def load(infile, uart, reset_script): try: @@ -35,6 +35,15 @@ def load(infile, uart, reset_script): except serial.SerialException: raise SystemExit("Failed to open serial port") + # drain serial port buffer + try: + while True: + data = ser.read(1) + if len(data) == 0: + break + except serial.SerialException: + raise SystemExit("Failed to open serial port") + try: f = open(infile, "rb") except IOError: @@ -59,12 +68,15 @@ def load(infile, uart, reset_script): prev = datetime.now() reset_delay_us = 250000 + if reset_script is None: + print("Please reset board to enter ROM uart recovery") + while True: elapsed = datetime.now() - prev if elapsed.seconds >= 15: raise SystemExit("Failed to receive SOM, aborting") if not som_detected and not reset_triggered: - if elapsed.microseconds >= reset_delay_us: + if reset_script and elapsed.microseconds >= reset_delay_us: print("Triggering SWD reset...") # Run in background os.system(reset_script + " &") diff --git a/hw/bsp/dialog_da1469x-dk-pro/otp_tool.py b/hw/bsp/dialog_da1469x-dk-pro/otp_tool.py index fbe3086..8883365 100755 --- a/hw/bsp/dialog_da1469x-dk-pro/otp_tool.py +++ b/hw/bsp/dialog_da1469x-dk-pro/otp_tool.py @@ -125,14 +125,26 @@ def validate_response(response): return True -def otp_read_key(index, segment, uart): - seg_map = {'signature': 0, 'data': 1, 'qspi': 2} - +def get_serial_port(port, baudrate, timeout, bytesize, stopbits): try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) + ser = serial.Serial(port=port, baudrate=baudrate, timeout=timeout, + bytesize=bytesize, stopbits=stopbits) except serial.SerialException: raise SystemExit("Failed to open serial port") + # drain serial port buffer + try: + while True: + data = ser.read(1) + if len(data) == 0: + break + except serial.SerialException: + raise SystemExit("Failed to open serial port") + return ser + + +def otp_read_key(index, segment, uart): + seg_map = {'signature': 0, 'data': 1, 'qspi': 2} + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) cmd = cmd_read_key(0xaa55aa55, Cmd.OTP_READ_KEY, seg_map[segment], index) data = struct.pack('IIII', *cmd) @@ -196,11 +208,7 @@ def otp_write_key(infile, index, segment, uart): seg_map = {'signature': 0, 'data': 1, 'qspi': 2} - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) cmd = cmd_write_key(0xaa55aa55, Cmd.OTP_WRITE_KEY, seg_map[segment], index) # swap endianness of data to little endian @@ -237,11 +245,7 @@ def generate_payload(data): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Read data from OTP configuration script area') def otp_read_config(uart, outfile): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) # length is unused, so set to 0 cmd = cmd_append_value(0xaa55aa55, Cmd.OTP_READ_CONFIG, 0) @@ -277,11 +281,7 @@ def otp_read_config(uart, outfile): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Read from flash') def flash_read(uart, length, outfile, offset): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) try: f = open(outfile, "wb") @@ -346,11 +346,7 @@ def flash_read(uart, length, outfile, offset): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Erase flash') def flash_erase(uart, offset, length): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=60, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) # length is unused, so set to 0 offset = int(offset, 16) @@ -379,11 +375,7 @@ def flash_erase(uart, offset, length): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Write to flash') def flash_write(uart, infile, offset, block_size): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) try: f = open(infile, "rb") @@ -429,11 +421,7 @@ def flash_write(uart, infile, offset, block_size): def send_otp_config_payload(uart, data): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) data_bytes = generate_payload(data) @@ -561,11 +549,7 @@ def close_config_script(uart): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Initialize blank OTP Config script') def init_config_script(uart): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) # length is unused, so set to 0 cmd = cmd_append_value(0xaa55aa55, Cmd.OTP_INIT, 0) @@ -590,11 +574,7 @@ def init_config_script(uart): @click.option('-u', '--uart', required=True, help='uart port') @click.command(help='Test if the board is alive by sending and receving data') def test_alive_target(uart): - try: - ser = serial.Serial(port=uart, baudrate=1000000, timeout=1, - bytesize=8, stopbits=serial.STOPBITS_ONE) - except serial.SerialException: - raise SystemExit("Failed to open serial port") + ser = get_serial_port(uart, 1000000, 1, 8, serial.STOPBITS_ONE) # length is unused, so set to 0 cmd = cmd_append_value(0xaa55aa55, Cmd.TEST_ALIVE, 0)