в stm32 озу разбито на куски с отдельными контроллерами, хотя
программно выглядит как линейная память. на пример в уже в
устаревающем f4 два куска - вот вам и двухпортовая память. я давно
замечаю что люди это не особо замечают такие тонкости. в h7 уже 9
дырок.   d1_itcm_sram   (rwx):     ORIGIN = 0x00000000,                      LENGTH = 64K       /* critical real-time CM7 code routines (interrupt handlers,deterministic execution) */
  d1_dtcm_sram1  (rwx):    ORIGIN = 0x20000000,                     LENGTH = 64K      /* critical real-time CM7 rw data (stack, heap, ...) */
  d1_dtcm_sram2  (rwx):  ORIGIN = 0x20010000,                     LENGTH = 64K      
  d1_axi_sram    (rwx):         ORIGIN = 0x24000000,                       LENGTH = 512K        /* application data (local data,graphic objects,frame buffers, ...)  */
  d2_sram1       (rwx):             ORIGIN = 0x30000000,                          LENGTH = 128K           /* DMA  D2 domain peripheral input/output buffers, CM4 code          */
  d2_sram2       (rwx):             ORIGIN = 0x30020000,                          LENGTH = 128K           /* DMA  D2 domain peripheral input/output buffers, CM4 data          */
  d2_sram3       (rwx):            ORIGIN = 0x30040000,                          LENGTH = 32K            /* ETH/USB peripheral input/output buffers                           */
  d3_sram4       (rwx):              ORIGIN = 0x38000000,                          LENGTH = 64K           /* BDMA D3 domain peripheral input/output buffers                    */
  d3_backup_sram (rwx):   ORIGIN = 0x38800000,                    LENGTH  = 4K