You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by we...@apache.org on 2020/04/08 17:07:54 UTC

[mynewt-core] branch master updated: da1469x: otp and serial script enhancements (#2262)

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 <na...@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 <na...@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 <na...@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 <na...@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)