Jump to content

    
Sign in to follow this  
__inline__

STM32H743 и SRAM1,2,3

Recommended Posts

Память SRAM1,2,3 сидит в регионах 0x30000000...0x30047FFF. Тактирование включил.

 

При попытке туда записать или считать с помощью CPU ни к чему не приводит.

 

Эта память доступна вообще для процессора или нет?

Читал манул, так и не понял.

Share this post


Link to post
Share on other sites

Это просто капец...

 

Эта память жестко специализирована:

 

DTCM - может быть стеком, данными и DMA

AXI - тоже самое

 

SRAM1,2,3 - только данными. Никакого ДМА и стека

 

SRAM4 - данные, стек. Никакого ДМА

 

Итого: DTCM и AXI - универсальная память. SRAM 1..4 - нет

Share this post


Link to post
Share on other sites
SRAM1,2,3 - только данными. Никакого ДМА и стека

Итого: DTCM и AXI - универсальная память. SRAM 1..4 - нет

Все правильно - SRAM1,2,3 заточена на буферы Ethernet, USB, SDMMC. И между ними есть свой DMA.

Share this post


Link to post
Share on other sites

Вот такое распределение памяти в моем проекте:

        DTCMRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K      /* DTCMRAM Data DTCMRAM-RAM */
        RAM_D1 (xrw)  : ORIGIN = 0x24000000, LENGTH = 512K      /* LTDC frame buffer */
        RAM_D2 (xrw)  : ORIGIN = 0x30000000, LENGTH = 288K
        RAM_D3 (xrw)  : ORIGIN = 0x38000000, LENGTH = 64K
        ITCMRAM (rwx) : ORIGIN = 0x00000000, LENGTH = 64K       /* ITCMRAM-RAM */
        FLASH (rx)    : ORIGIN = 0x08000000, LENGTH = 2048K     /* FLASH on AXIM interface */

 

Для D1 есть ограничения - только в ней может находиться память для SDMMC1, USB и LTDC (на таблице в даташите больше подробностей).

Процессор все области пишет/читает нормально.

 

остальное применрно так:

    /* AXI SRAM Slave */
    //AXI_TARG7_FN_MOD |= READ_ISS_OVERRIDE;
    *((__IO uint32_t*) 0x51008108) = 0x1; //Change  the switch matrix read issuing capability to 1 (Errata BUG fix)
    /* Change  the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
    //*((__IO uint32_t*)0x51008108) = 0x000000001;

    RCC->AHB2ENR |= RCC_AHB2ENR_D2SRAM1EN;
    (void) RCC->AHB2ENR;
    RCC->AHB2ENR |= RCC_AHB2ENR_D2SRAM2EN;
    (void) RCC->AHB2ENR;
    RCC->AHB2ENR |= RCC_AHB2ENR_D2SRAM3EN;
    (void) RCC->AHB2ENR;

    RCC->AHB4ENR |= RCC_AHB4ENR_D3SRAM1EN;
    (void) RCC->AHB4ENR;

 

Еще сюда не попали kernel clock и prescalers для всех D1, D2 и D3. Полный текст проекта выложен на https://188.134.5.254/browser/trunk

Фото к тому, что это не придумано а работает.

post-28634-1530952116_thumb.jpg

post-28634-1530952164_thumb.jpg

Edited by Genadi Zawidowski

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this