Hoernchen has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-asf4-dfu/+/39436?usp=email )
Change subject: contrib: add nvm urow parser ipynb
......................................................................
contrib: add nvm urow parser ipynb
Useful when dealing with the urow bits for wdt, bootprot, ..
Change-Id: I588838d7c33be24636e00cec65c3b485a486f747
---
A contrib/same54_urow.ipynb
1 file changed, 135 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-asf4-dfu refs/changes/36/39436/1
diff --git a/contrib/same54_urow.ipynb b/contrib/same54_urow.ipynb
new file mode 100644
index 0000000..3069475
--- /dev/null
+++ b/contrib/same54_urow.ipynb
@@ -0,0 +1,135 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Memory dump from GDB\n",
+ "# (gdb) x/512xb 0x00804000\n",
+ "memory_dump = \"\"\"\n",
+ "0x804000: 0x39 0x92 0x9a 0xfe 0x80 0xff 0xc0
0xee\n",
+ "0x804008: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "0x804010: 0x10 0x40 0x80 0x00 0xff 0xff 0xff
0xff\n",
+ "0x804018: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "0x804020: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "0x804028: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "0x804030: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "0x804038: 0xff 0xff 0xff 0xff 0xff 0xff 0xff
0xff\n",
+ "\"\"\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import struct\n",
+ "\n",
+ "DEFAULTS = {\n",
+ "\t'BOD33 Disable': 0x1,\n",
+ "\t'BOD33 Level': 0x1C,\n",
+ "\t'BOD33 Action': 0x1,\n",
+ "\t'BOD33 Hysteresis': 0x2,\n",
+ "\t'NVM BOOTPROT': 0xF,\n",
+ "\t'SBLK': 0x0,\n",
+ "\t'PSZ': 0x0,\n",
+ "\t'RAM ECCDIS': 0x1,\n",
+ "\t'WDT Enable': 0x0,\n",
+ "\t'WDT Always-On': 0x0,\n",
+ "\t'WDT Period': 0xB,\n",
+ "\t'WDT Window': 0xB,\n",
+ "\t'WDT EWOFFSET': 0xB,\n",
+ "\t'WDT WEN': 0x0,\n",
+ "\t'NVM LOCKS': 0xFFFFFFFF\n",
+ "}\n",
+ "\n",
+ "# def extract_bits(value, offset, mask):\n",
+ "# \treturn (value >> offset) & mask\n",
+ "\n",
+ "def extract_bits(value, start, end):\n",
+ "\tmask = (1 << (end - start + 1)) - 1\n",
+ "\treturn (value >> start) & mask\n",
+ "\n",
+ "\n",
+ "def decode_user_row(memory_dump):\n",
+ "\t# Extract only the hexadecimal values from the memory dump\n",
+ "\thex_values = ''.join(line.split(':')[1].strip().replace('
', '') for line in memory_dump.strip().split('\\n'))\n",
+ "\thex_values = hex_values.replace('0x',
'').replace('\\n', '')\n",
+ "\t\n",
+ "\t# Convert the cleaned hex string to bytes\n",
+ "\tmemory_bytes = bytes.fromhex(hex_values)\n",
+ "\t\n",
+ "\t# Convert bytes to 32-bit words\n",
+ "\t# words = struct.unpack('<8I', memory_bytes[:32])\n",
+ "\twords = struct.unpack('<8I', memory_bytes[:32])\n",
+ "\t\n",
+ "\tsettings = {\n",
+ "\t\t'BOD33 Disable': extract_bits(words[0], 0, 0),\n",
+ "\t\t'BOD33 Level': extract_bits(words[0], 1, 8),\n",
+ "\t\t'BOD33 Action': extract_bits(words[0], 9, 10),\n",
+ "\t\t'BOD33 Hysteresis': extract_bits(words[0], 11, 14),\n",
+ "\t\t'BOD12 Calibration': extract_bits(words[0], 15, 25),\n",
+ "\t\t'NVM BOOTPROT': extract_bits(words[0], 26, 29),\n",
+ "\t\t'SBLK': extract_bits(words[1], 0, 3),\n",
+ "\t\t'PSZ': extract_bits(words[1], 4, 6),\n",
+ "\t\t'RAM ECCDIS': extract_bits(words[1], 7, 7),\n",
+ "\t\t'WDT Enable': extract_bits(words[1], 16, 16),\n",
+ "\t\t'WDT Always-On': extract_bits(words[1], 17, 17),\n",
+ "\t\t'WDT Period': extract_bits(words[1], 18, 21),\n",
+ "\t\t'WDT Window': extract_bits(words[1], 22, 25),\n",
+ "\t\t'WDT EWOFFSET': extract_bits(words[1], 26, 29),\n",
+ "\t\t'WDT WEN': extract_bits(words[1], 30, 30),\n",
+ "\t\t'NVM LOCKS': words[2],\n",
+ "\t\t'User Page': words[3]\n",
+ "\t}\n",
+ "\treturn settings\n",
+ "\n",
+ "\n",
+ "\n",
+ "def display_user_row_settings(settings):\n",
+ "\tprint(\"SAME54 User Row Settings (Current vs Default):\")\n",
+ "\tprint(\"-\" * 50)\n",
+ "\tfor key, value in settings.items():\n",
+ "\t\tif key in DEFAULTS:\n",
+ "\t\t\tif value != DEFAULTS[key]:\n",
+ "\t\t\t\tprint(f\"{key:15}: 0x{value:X} (Default: 0x{DEFAULTS[key]:X})
*DIFFERENT*\")\n",
+ "\t\t\telse:\n",
+ "\t\t\t\tprint(f\"{key:15}: 0x{value:X} (Default:
0x{DEFAULTS[key]:X})\")\n",
+ "\t\telse:\n",
+ "\t\t\tprint(f\"{key:15}: 0x{value:X}\")\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Decode the memory dump\n",
+ "decoded_settings = decode_user_row(memory_dump)\n",
+ "\n",
+ "# Display the formatted settings\n",
+ "display_user_row_settings(decoded_settings)\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-asf4-dfu/+/39436?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-asf4-dfu
Gerrit-Branch: master
Gerrit-Change-Id: I588838d7c33be24636e00cec65c3b485a486f747
Gerrit-Change-Number: 39436
Gerrit-PatchSet: 1
Gerrit-Owner: Hoernchen <ewild(a)sysmocom.de>