repstosw 18 6 июля, 2018 Опубликовано 6 июля, 2018 · Жалоба Память SRAM1,2,3 сидит в регионах 0x30000000...0x30047FFF. Тактирование включил. При попытке туда записать или считать с помощью CPU ни к чему не приводит. Эта память доступна вообще для процессора или нет? Читал манул, так и не понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 6 июля, 2018 Опубликовано 6 июля, 2018 · Жалоба Это просто капец... Эта память жестко специализирована: DTCM - может быть стеком, данными и DMA AXI - тоже самое SRAM1,2,3 - только данными. Никакого ДМА и стека SRAM4 - данные, стек. Никакого ДМА Итого: DTCM и AXI - универсальная память. SRAM 1..4 - нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 81 6 июля, 2018 Опубликовано 6 июля, 2018 · Жалоба SRAM1,2,3 - только данными. Никакого ДМА и стека Итого: DTCM и AXI - универсальная память. SRAM 1..4 - нет Все правильно - SRAM1,2,3 заточена на буферы Ethernet, USB, SDMMC. И между ними есть свой DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 7 июля, 2018 Опубликовано 7 июля, 2018 (изменено) · Жалоба Вот такое распределение памяти в моем проекте: 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 Фото к тому, что это не придумано а работает. Изменено 7 июля, 2018 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2018 Опубликовано 7 июля, 2018 · Жалоба OK, спасибо. Попутно ещё обнаружил, что для DAC DMA с памятью 0x20000000 не работает, только с 0x24000000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться