|
| 1 | +# OpenOCD config for NUCLEO-N657X0-Q with MX25UM51245G NOR on XSPI2 |
| 2 | + |
| 3 | +source [find interface/stlink.cfg] |
| 4 | +transport select swd |
| 5 | + |
| 6 | +set CHIPNAME stm32n6x |
| 7 | +set WORKAREASIZE 0x10000 |
| 8 | + |
| 9 | +source [find target/stm32n6x.cfg] |
| 10 | + |
| 11 | +# Work-area above wolfBoot SRAM region |
| 12 | +$_TARGETNAME configure -work-area-phys 0x34020000 -work-area-size $WORKAREASIZE -work-area-backup 0 |
| 13 | + |
| 14 | +# XSPI2 NOR flash bank (memory-mapped at 0x70000000, regs at 0x5802A000) |
| 15 | +set XSPI2_BANK_ID [llength [flash list]] |
| 16 | +flash bank $CHIPNAME.xspi2 stmqspi 0x70000000 0 0 0 $CHIPNAME.cpu 0x5802A000 |
| 17 | + |
| 18 | +# Mark VDDIO supplies valid (required for XSPI2 GPIO) |
| 19 | +proc pwr_enable_io_supply {} { |
| 20 | + mmw 0x5602825C 0x00040000 0 ;# RCC_AHB4ENR: PWR clock |
| 21 | + mmw 0x56024834 0x00000100 0 ;# SVMCR1: VDDIO4SV |
| 22 | + mmw 0x56024838 0x00000100 0 ;# SVMCR2: VDDIO5SV |
| 23 | + mmw 0x5602483C 0x00000300 0 ;# SVMCR3: VDDIO2SV + VDDIO3SV |
| 24 | +} |
| 25 | + |
| 26 | +# Port N GPIO for XSPI2 (PN0-PN11, AF9, very high speed) |
| 27 | +proc xspi2_gpio_init {} { |
| 28 | + mmw 0x5602825C 0x00002000 0 ;# RCC_AHB4ENR: GPION clock |
| 29 | + sleep 1 |
| 30 | + mmw 0x56023400 0x00AAAAAA 0x00555555 ;# MODER: AF mode |
| 31 | + mmw 0x56023408 0x00FFFFFF 0 ;# OSPEEDR: very high |
| 32 | + mmw 0x5602340C 0 0x00FFFFFF ;# PUPDR: no pull |
| 33 | + mww 0x56023420 0x99999999 ;# AFRL: AF9 |
| 34 | + mww 0x56023424 0x00009999 ;# AFRH: AF9 |
| 35 | +} |
| 36 | + |
| 37 | +# XSPI2 init: single-SPI, /16 prescaler, NOR reset, enter mmap mode |
| 38 | +proc xspi2_init {} { |
| 39 | + mmw 0x56028260 0x00003000 0 ;# RCC_AHB5ENR: XSPI2 + XSPIM clocks |
| 40 | + mmw 0x56028248 0x00000008 0 ;# RCC_MISCENR: XSPI PHY comp clock |
| 41 | + sleep 1 |
| 42 | + |
| 43 | + mww 0x5802A000 0x00000000 ;# CR: disable |
| 44 | + sleep 1 |
| 45 | + mww 0x5802A008 0x001A0308 ;# DCR1: DLYBYP, DEVSIZE=26, CSHT=3 |
| 46 | + mww 0x5802A00C 0x0000000F ;# DCR2: prescaler /16 |
| 47 | + sleep 1 |
| 48 | + mww 0x5802A000 0x00000001 ;# CR: enable |
| 49 | + |
| 50 | + # NOR flash software reset (0x66 + 0x99) |
| 51 | + mmw 0x5802A000 0x00000002 0 ;# abort |
| 52 | + sleep 1 |
| 53 | + mww 0x5802A024 0x0000000B ;# FCR: clear flags |
| 54 | + mww 0x5802A100 0x00000001 ;# CCR: IMODE=single |
| 55 | + mww 0x5802A108 0x00000000 ;# TCR: no dummy |
| 56 | + mww 0x5802A110 0x00000066 ;# IR: Reset Enable |
| 57 | + sleep 1 |
| 58 | + |
| 59 | + mmw 0x5802A000 0x00000002 0 ;# abort |
| 60 | + sleep 1 |
| 61 | + mww 0x5802A024 0x0000000B |
| 62 | + mww 0x5802A100 0x00000001 |
| 63 | + mww 0x5802A108 0x00000000 |
| 64 | + mww 0x5802A110 0x00000099 ;# IR: Reset Memory |
| 65 | + sleep 10 |
| 66 | + |
| 67 | + xspi2_mem_mapped |
| 68 | +} |
| 69 | + |
| 70 | +# Memory-mapped fast-read mode (single-SPI, 4-byte addr, 8 dummy cycles) |
| 71 | +proc xspi2_mem_mapped {} { |
| 72 | + mmw 0x5802A000 0x00000002 0 ;# abort |
| 73 | + sleep 1 |
| 74 | + mww 0x5802A000 0x30000001 ;# CR: mmap + enable |
| 75 | + mww 0x5802A100 0x01003101 ;# CCR: IMODE=1, ADMODE=1, ADSIZE=3, DMODE=1 |
| 76 | + mww 0x5802A108 0x40000008 ;# TCR: DCYC=8, SSHIFT |
| 77 | + mww 0x5802A110 0x0000000C ;# IR: Fast Read 4B |
| 78 | +} |
| 79 | + |
| 80 | +# Set NOR flash params manually (SFDP not readable in single-SPI mode) |
| 81 | +proc xspi2_flash_set {} { |
| 82 | + global XSPI2_BANK_ID |
| 83 | + stmqspi set $XSPI2_BANK_ID MX25UM51245G 0x4000000 0x100 0x13 0 0x12 0x60 0x1000 0x21 |
| 84 | +} |
| 85 | + |
| 86 | +# Full reinit for use when XSPI2 may already be configured |
| 87 | +proc xspi2_reinit {} { |
| 88 | + global XSPI2_BANK_ID |
| 89 | + pwr_enable_io_supply |
| 90 | + xspi2_gpio_init |
| 91 | + xspi2_init |
| 92 | + xspi2_flash_set |
| 93 | + flash probe $XSPI2_BANK_ID |
| 94 | + xspi2_flash_set |
| 95 | +} |
| 96 | + |
| 97 | +$_TARGETNAME configure -event reset-init { |
| 98 | + global XSPI2_BANK_ID |
| 99 | + pwr_enable_io_supply |
| 100 | + xspi2_gpio_init |
| 101 | + xspi2_init |
| 102 | + xspi2_flash_set |
| 103 | + flash probe $XSPI2_BANK_ID |
| 104 | + # Re-set after probe (stmqspi driver quirk) |
| 105 | + xspi2_flash_set |
| 106 | +} |
| 107 | + |
| 108 | +init |
0 commit comments