Перейти к содержанию

    

STM32H743 и SRAM1,2,3

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

AXI - тоже самое

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SRAM1,2,3 - только данными. Никакого ДМА и стека

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

        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

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

OK, спасибо.

 

Попутно ещё обнаружил, что для DAC DMA с памятью 0x20000000 не работает, только с 0x24000000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти