Jump to content
    

IAR - ext RAM, FMC, DMA и icf-файл.

Всем привет.

Чип STM32F769, к нему через FMC подключена внешняя ОЗУ (используется для вывода изображения на дисплей).

Хочу частично использовать внешнюю ОЗУ для приема данных от UART и SPI.

Объявил массив следующим образом : 

uint8_t rx_buffer[131072] @ ".sram";

В icf-файл вписал данные о новой области памяти:

define symbol __ICFEDIT_region_SRAM_start__ = 0xC03B5800;
define symbol __ICFEDIT_region_SRAM_end__   = 0xC043CC00;

define symbol __ICFEDIT_size_sram__   = 524288; 

define region SRAM_region   = mem:[from __ICFEDIT_region_SRAM_start__ to __ICFEDIT_region_SRAM_end__]; 

place in SRAM_region { readwrite section .sram };

 

Проверяю map-файл, вижу что массив размещен во внешней ОЗУ, все хорошо.

Но прием данных не работает - в приемном буфере мусор 😞 Пробую читать через SPI, в DMA-режиме. 

Вопрос : возможно ли в принципе использовать внешнюю память для использования ее периферией, и с DMA?

Если да, то что делаю не так?

Share this post


Link to post
Share on other sites

1 hour ago, charkin said:

Пробую читать через SPI, в DMA-режиме. 

А FMC инициализирован? Линковщик всё разместил правильно, но он и понятия не имеет, что это "внешняя" память. Для него лишь адреса имеют значения. А где они находятся - вопрос другой.

Share this post


Link to post
Share on other sites

35 minutes ago, haker_fox said:

А FMC инициализирован? Линковщик всё разместил правильно, но он и понятия не имеет, что это "внешняя" память. Для него лишь адреса имеют значения. А где они находятся - вопрос другой.

Да, FMC проинициализирован и работает верно - изображение на дисплее есть. Ну и просто скопировать данные из ОЗУ МК в буфер во внешней памяти тоже могу - memcpy() работает.

Share this post


Link to post
Share on other sites

On 5/7/2023 at 7:23 PM, charkin said:

Да, FMC проинициализирован и работает верно - изображение на дисплее есть. Ну и просто скопировать данные из ОЗУ МК в буфер во внешней памяти тоже могу - memcpy() работает.

А кэши настроены ?

MPU настроено ?

Share this post


Link to post
Share on other sites

27 minutes ago, dimka76 said:

А кэши настроены ?

MPU настроено ?

Кэш данных и инструкций не включал, MPU не настраивал.

Share this post


Link to post
Share on other sites

On 5/7/2023 at 9:17 PM, charkin said:

Кэш данных и инструкций не включал, MPU не настраивал.

Вот поэтому у вас и мусор при работе с периферией. 

Share this post


Link to post
Share on other sites

5 minutes ago, dimka76 said:

Вот поэтому у вас и мусор при работе с периферией. 

То есть icf-файл у меня отредактирован верно, а для того, чтобы все работало, необходимо верно настроить регионы памяти в MPU? Кэши можно не включать, правильно понимаю?

Share this post


Link to post
Share on other sites

On 5/7/2023 at 10:10 PM, charkin said:

То есть icf-файл у меня отредактирован верно, а для того, чтобы все работало, необходимо верно настроить регионы памяти в MPU? Кэши можно не включать, правильно понимаю?

Про icf не знаю, я IAR не использую. По поводу MPU и кэш у ST была отдельная методичка. Да и тут на форуме были темы про кэши в М7.

Вроде для работы с периферией через DMA надо настраивать MPU и включать кэши. Я в таких случаях включаю.

Share this post


Link to post
Share on other sites

9 minutes ago, dimka76 said:

Про icf не знаю, я IAR не использую. По поводу MPU и кэш у ST была отдельная методичка. Да и тут на форуме были темы про кэши в М7.

Вроде для работы с периферией через DMA надо настраивать MPU и включать кэши. Я в таких случаях включаю.

Я в другом проекте включал кэши, а область памяти, в которой были размещены буферы для работы с периферией в DMA-режиме настраивал как некэшируемую. Вроде работало. Но это все было в пределах ОЗУ МК, а тут внешняя память.

В этом проекте решил попробовать не включать кэши и MPU - прием данных по UART и SPI в DMA-режиме работал нормально..

Share this post


Link to post
Share on other sites

8 hours ago, charkin said:

То есть icf-файл у меня отредактирован верно, а для того, чтобы все работало, необходимо верно настроить регионы памяти в MPU?

Да. icf-файл не имеет никакого отношения к аппаратному обеспечению. И ничего не знает о нём. Вы можете указать даже несуществующий регион памяти, например 0xFFFFFF00 : 0xFFFFFFFF, и всё равно проект в IAR (думаю, что и в другом инструментарии тоже) будет собран без ошибок. Ибо линковщику и невдомёк, что такого региона просто нет. Он покорно расположит Ваши данные в этой области. Не знаю, может быть каким-то интеллектом линковщик и наделён по поводу знания железа, в принципе производитель инструмента это сделать может, но смысла в этом нет. Поэтому, разместит то, что Вы ему сказали и там, где сказали.

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.

×
×
  • Create New...