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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...