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

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?

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

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


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

1 hour ago, charkin said:

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

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

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


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

35 minutes ago, haker_fox said:

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

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

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


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

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

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

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

MPU настроено ?

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


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

27 minutes ago, dimka76 said:

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

MPU настроено ?

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

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


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

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

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

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

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


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

5 minutes ago, dimka76 said:

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

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

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


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

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

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

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

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

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


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

9 minutes ago, dimka76 said:

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

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

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

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

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


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

8 hours ago, charkin said:

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

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

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


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

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

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

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

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

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

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

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

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

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