summaryrefslogtreecommitdiffstats
path: root/_log
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2026-01-05 17:39:10 +0800
committerSadeep Madurange <sadeep@asciimx.com>2026-01-05 18:49:38 +0800
commita6440c00abbc30230f8a59c737e4ec55cb82a350 (patch)
tree8f7da5640298a84eb202f995caa888bed0012180 /_log
parentb10690f16d2b310221ffa7995e779f09d146f7f8 (diff)
downloadwww-a6440c00abbc30230f8a59c737e4ec55cb82a350.tar.gz
Fix Arduino Due post, ol list css.
Diffstat (limited to '_log')
-rw-r--r--_log/arduino-due.md70
-rw-r--r--_log/e-reader.md9
-rw-r--r--_log/neo4j-a-star-search.md2
3 files changed, 29 insertions, 52 deletions
diff --git a/_log/arduino-due.md b/_log/arduino-due.md
index a0bfe4a..e24666c 100644
--- a/_log/arduino-due.md
+++ b/_log/arduino-due.md
@@ -1,17 +1,24 @@
---
-title: Bare-metal ATSAM3X8E
+title: ATSAM3X8E bare-metal notes
date: 2024-09-16
layout: post
---
-Notes on programming bare-metal ATSAM3X8E chips (Arduino Due) using Serial Wire
-Debug (SwD) protocol.
+Bypassing ATSAM3X8E (Due) bootloader via Serial Wire Debug (SWD).
-## Toolchain
+Toolchain: ST-LINK/V2 programmer, OpenOCD, ARM GNU Compiler Toolchain.
-ST-LINK/V2 programmer, OpenOCD, ARM GNU Compiler Toolchain.
+ARM chips boot into 0x00000. GPNVM bits map one of ROM, flash0, flash1 to
+0x00000:
-## Electrical connections
+ - GPNVM1=0 → ROM (default).
+ - GPNVM1=1 and GPNVM2=0 → flash0.
+ - GPNVM1=1 and GPNVM2=1 → flash1.
+
+By default, control jumps to Atmel's SAM-BA bootloader in ROM. To bypass, set
+GPNVM1=1 and place vector table at 0x80000 (flash0).
+
+Connect ST-LINK/v2 to Arduino Due's DEBUG port:
<table style="border: none; width: 100%;">
<tr style="border: none;">
@@ -26,22 +33,7 @@ ST-LINK/V2 programmer, OpenOCD, ARM GNU Compiler Toolchain.
</tr>
</table>
-Arduino Due exposes the ATSAM3X8E's SWD interface via its DEBUG port. The
-ST-LINK/v2 programmer connects to that to communicate with the chip.
-
-## Upload procedure
-
-Build. Magic is in the script.ld linker script.
-
-```
-$ arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -T script.ld \
- -nostartfiles \
- -nostdlib \
- -o a.elf main.c
-```
-
-
-Upload using OpenOCD:
+Remap memory:
```
$ openocd -f openocd-due.cfg
@@ -50,35 +42,19 @@ $ telnet localhost 4444
> at91sam3 gpnvm show
> at91sam3 gpnvm set 1
> at91sam3 gpnvm show
-$ openocd -f openocd-due.cfg -c "program a.elf verify reset exit"
```
-First command starts OpenOCD. Telnet session halts chip, checks GPNVM bit. If
-unset (returns 0), set to 1 and verify. Final command uploads program. See
-OpenOCD manual AT91SAM3 flash driver section for full command list.
+Full command list is in OpenOCD manual AT91SAM3 (flash driver section).
-## GPNVM bits
+Compile and upload program:
-ARM chips boot into address 0x00000. ATSAM3X8E has ROM and dual-banked flash
-(flash0/flash1) at different addresses. GPNVM bits control which maps to
-0x00000.
-
-GPNVM1 cleared (default): boots from ROM (Atmel SAM-BA bootloader). GPNVM1=1,
-GPNVM2=0: flash0 (0x80000) maps to 0x00000. Both cleared: flash1 maps to
-0x00000.
-
-Program goes in flash0, so set GPNVM1=1 to boot our code instead of bootloader.
-
-## Linker script notes
-
-Vector table must be at first flash address--required for ARM chips unless
-relocated using VTOR register.
-
-First vector table entry: stack pointer. Initialize to highest memory location
-(ATSAM3X8E has descending stack).
-
-Second entry: reset vector. Place initialization code here (zero memory, set
-registers) before jumping to main().
+```
+$ arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -T script.ld \
+ -nostartfiles \
+ -nostdlib \
+ -o a.elf main.c
+$ openocd -f openocd-due.cfg -c "program a.elf verify reset exit"
+```
Commit:
[3184969](https://git.asciimx.com/bare-metal-arduino-due/commit/?id=318496925ca76668dd9d63c3d060376f489276f8)
diff --git a/_log/e-reader.md b/_log/e-reader.md
index 87417f7..69b1e96 100644
--- a/_log/e-reader.md
+++ b/_log/e-reader.md
@@ -1,5 +1,5 @@
---
-title: ESP32 prototype e-reader
+title: 512 KB e-reader
date: 2023-10-24
layout: post
project: true
@@ -15,9 +15,10 @@ First project with e-paper displays and ESP32.
ESP-WROOM-32, 7.5" Waveshare e-paper display, three-button interface
(prev/next/sleep).
-Memory: 512KB SRAM + 4MB flash--insufficient for local library. Streams via
-HTTP Range requests over WiFi. Reading progress saved to RTC memory; persists
-through deep sleep.
+Memory: 512KB SRAM + 4MB flash. Internal 4 MB flash unsuitable for storing
+books due to P/E cycle limits. HTTP Range requests for on-demand bitmap
+streaming. Progress saved to RTC memory to survive deep sleep without flash
+wear.
EBM format: Raw bitmap sequence. 1 byte = 8 pixels, 1 page = 48 KB (display
resolution), headerless. Optimized for HTTP Range requests:
diff --git a/_log/neo4j-a-star-search.md b/_log/neo4j-a-star-search.md
index fe6f33f..de0ef25 100644
--- a/_log/neo4j-a-star-search.md
+++ b/_log/neo4j-a-star-search.md
@@ -1,5 +1,5 @@
---
-title: Neo4j shortest path optimization
+title: 'Neo4J path traversal: A* optimization'
date: 2018-03-06
layout: post
---