реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32H7 работа с SDRAM. Проблема
Николандр
сообщение Aug 21 2018, 13:09
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 21-08-18
Пользователь №: 106 954



Добрый день, форумчане!

Мы перешли на наших платах с STM32F429 на STM32H743. Сейчас пытаюсь оживить SDRAM (MT48LC16M16A2). Ввиду того, что регистры у FMC аналогичны (за исключением двух вещей: нет статусного сигнала BUSY и необходимо после настройки включать FMC в регистре FMC_BCR1), перетянул настройку SDRAM с контроллера STM32F4. Внутреннюю частоту (120 МГц) и частоту SDRAM (60 МГц) настроил точно также как и STM32F4. Повторюсь, снял с платы F4 и поставил H7 для освоения.
Пишу по 16 бит без burst режима. Ремап не делал. Пишу по адресу 0xC0000000 (банк 1 SDRAM) и добавляю смещение.

Но вот почему-то не хочет запускаться нормально FMC.
Обнаружил осциллографом:
1. Нет сигналов BA0, BA1 и UDQM, LDQM. Хотя пишу в каждый банк.
2. Сигналы RAS и CAS не имеют сдвига друг относительно друга. но может так и должно быть не знаю.

Экспериментально обнаружил, что если писать в 0х60000000 то сигналы появляются (кроме BA0), но всё равно не записать в SDRAM данные. В примерах на HAL вижу, что настраивают они банк2 минуя банк 1. Может там что-то не так с ним.

Кто-нибудь уже разбирался с темой STM32H7 и SDRAM? Буду признателен за любую помощь!

CODE
#define SDRAM_START_ADDR ((uint32_t) 0xC0000000) // SDRAM bank1 area start address

static void fmc_SDRAM_Config(void)
{
FMC_Bank1->BTCR[0] &= ~(1 << FMC_BCR1_FMCEN_Pos);

FMC_Bank5_6->SDCR[0] = FMC_SDCR1_SDCLK_1 | FMC_SDCR1_CAS_1 | FMC_SDCR1_NB | FMC_SDCR1_MWID_0 | FMC_SDCR1_NR_1 | FMC_SDCR1_NC_0;

uint8_t TMRD, TXSR, TRAS, TRC, TWR, TRP, TRCD;
TMRD = 2;
TXSR = 5;
TRAS = 5;
TRC = 4;
TWR = 4;
TRP = 2;
TRCD = 2;
FMC_Bank5_6->SDTR[0] = (uint32_t) (((TMRD - 1) << FMC_SDTR1_TMRD_Pos) |
((TXSR - 1) << FMC_SDTR1_TXSR_Pos) |
((TRC - 1) << FMC_SDTR1_TRC_Pos) |
((TRAS - 1) << FMC_SDTR1_TRAS_Pos) |
((TRP - 1) << FMC_SDTR1_TRP_Pos) |
((TWR - 1) << FMC_SDTR1_TWR_Pos) |
((TRCD - 1) << FMC_SDTR1_TRCD_Pos));

FMC_Bank1->BTCR[0] |= (1 << FMC_BCR1_FMCEN_Pos);
}
static void fmc_SDRAM_Initialization_Sequence(void)
{
/*
STEP 1: Clock enable command
*/
FMC_Bank5_6->SDCMR = (uint32_t)((FMC_MODE_CLOCKCONFIG << FMC_SDCMR_MODE_Pos) |\
(1 << FMC_SDCMR_CTB1_Pos) |\
((1 - 1) << FMC_SDCMR_NRFS_Pos) |\
(0 << FMC_SDCMR_MRD_Pos));

/*
Delay = 1000 mks
*/
HAL_Delay(1);

/*
STEP 2: All Bank Precharge command
*/
FMC_Bank5_6->SDCMR = (uint32_t)((FMC_MODE_PALL << FMC_SDCMR_MODE_Pos) |\
(1 << FMC_SDCMR_CTB1_Pos) |\
((1 - 1) << FMC_SDCMR_NRFS_Pos) |\
(0 << FMC_SDCMR_MRD_Pos));
/*
STEP 3: Auto refresh command (NRFS = TRC in SDCR1 register)
*/
FMC_Bank5_6->SDCMR = (uint32_t)((FMC_MODE_AUTOREFRESH << FMC_SDCMR_MODE_Pos) |\
(1 << FMC_SDCMR_CTB1_Pos) |\
((8 - 1) << FMC_SDCMR_NRFS_Pos) |\
(0 << FMC_SDCMR_MRD_Pos));

/*
STEP 4: MRD register program:
Mode Register = 0b0000 0100 0100 0 (CL = 2; M9 - Single Location Access)
*/
uint32_t tmpmrd = (uint32_t)0x220;
FMC_Bank5_6->SDCMR = (uint32_t)((FMC_MODE_LOADMODEREG << FMC_SDCMR_MODE_Pos) |\
(1 << FMC_SDCMR_CTB2_Pos) |\
((1 - 1) << FMC_SDCMR_NRFS_Pos) |\
(tmpmrd << FMC_SDCMR_MRD_Pos));

/*
STEP 5: Set refresh count
*/
FMC_Bank5_6->SDRTR = (FMC_Bank5_6->SDRTR & FMC_SDRTR_REIE) | (0x000001EF << 1);
}

void fmc_SDRAM_Init(void)
{
RCC->D1CCIPR |= (RCC->D1CCIPR & RCC_D1CCIPR_FMCSEL) | RCC_D1CCIPR_FMCSEL_1; // FMC kernel clock source = per_pll2 = 120 MHz
RCC->AHB3ENR |= RCC_AHB3ENR_FMCEN; // Enable the FMC interface clock

fmc_SDRAM_GPIOConfig();

fmc_SDRAM_Config();

fmc_SDRAM_Initialization_Sequence();

}

int main(void)
{
Init_SoftwareModules();

fmc_SDRAM_Init();

uint32_t Address, Pattern;

while(1)
{
Address = SDRAM_START_ADDR;
Pattern = 0xAAAA;
MemTest_WriteReadSDRAM(Address, Pattern, dbw16Bit);

Address = SDRAM_START_ADDR + 0x4000;
Pattern = 0xAAAA;
MemTest_WriteReadSDRAM(Address, Pattern, dbw16Bit);

Address = SDRAM_START_ADDR + 0x8000;
Pattern = 0xAAAA;
MemTest_WriteReadSDRAM(Address, Pattern, dbw16Bit);

Address = SDRAM_START_ADDR + 0xC000;
Pattern = 0xAAAA;
MemTest_WriteReadSDRAM(Address, Pattern, dbw16Bit);
}
}


Сообщение отредактировал IgorKossak - Aug 21 2018, 13:56
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post
hd44780
сообщение Aug 22 2018, 12:11
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Сам не делал, т.к. на моей плате NUCLEO-H743ZI SDRAM нет, но Вы можете глянуть, какие настройки производятся кубом. Я понимаю нелюбовь многих к этой софтине, но деваться некуда, других примеров просто нет.
Кроме того, в кубе есть примеры для платы STM32H743I_EVAL, на которой есть SDRAM чип. Можно там что-то подсмотреть.

Я тоже сижу, раскуриваю разные примеры по кубу и тамошним платам...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Aner
сообщение Aug 22 2018, 20:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Процы сильно разные как по командам так и по архитектуре, замена пин то пин не пройдёт. Читайте изучайте даташит и различие архитектур, команд. Все похоже, но разное вплоть до длины команд их, ширины ригистров, адресации и тд. если у вас F4 и H7. Коррекций много, тупой заменой кода не пройдет.
Go to the top of the page
 
+Quote Post
khach
сообщение Sep 12 2018, 09:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Совместимость по пинам есть, по крайней мере H743 TQFP работает на плате F429 discovery. Но вот разводка SDRAM не позволяет получить не то что 133 мгц, а и 100Мгц тактовой.
А теперь вопрос- где можно посмотреть разводку TQFP H743 + SDRAM, работоспособную на 133 мгц, желательно в 4 слоях? BGA варианты не интересуют, т.к гербера BGA доступны у ST.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Sep 17 2018, 06:48
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Делел проект на STM32F746G с SDRAM и видео выходом. SDRAM инитил куском либы из примеров, идущих с кубом-мх. Конкретно файл stm32746g_discovery_sdram.c (17 013 байт) но, как уже говорили, 133 там никак не получалось, и когда читал доку на H7xx то как запомнилось, выше 100 частоту SDRAM на нем тоже поднять нельзя. У меня на 100МГц плата в 4 слоя без особых ухищрений, единственно на что смотрели - чтоб длина проводника тактовой была не менее максимального из остальных адресов/данных/команд.
Из доки на F746
===
SDRAM waveforms and timings
• CL = 30 pF on data and address lines. CL = 10 pF on FMC_SDCLK unless otherwise
specified.
In all timing tables, the THCLK is the HCLK clock period.
– For 3.0 V≤VDD≤3.6 V, maximum FMC_SDCLK= 100 MHz at CL=20 pF (on
FMC_SDCLK)
===
да, про куб - на прямую проект им сгенеренный с SDRAM у меня не заработал, только с другими файлами из примеров от этого же куба.
Go to the top of the page
 
+Quote Post
Николандр
сообщение Sep 17 2018, 08:58
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 21-08-18
Пользователь №: 106 954



Цитата(hd44780 @ Aug 22 2018, 15:11) *
Сам не делал, т.к. на моей плате NUCLEO-H743ZI SDRAM нет, но Вы можете глянуть, какие настройки производятся кубом. Я понимаю нелюбовь многих к этой софтине, но деваться некуда, других примеров просто нет.
Кроме того, в кубе есть примеры для платы STM32H743I_EVAL, на которой есть SDRAM чип. Можно там что-то подсмотреть.


Как раз благодаря Кубовским примерам на эту плату я и обнаружил, что они используют эту команду после записи. Но мне вот хотелось понять почему именно так.
На данный момент могу объяснить это только тем, что у Cortex-m4 трех этапный конвейер процессора, а Cortex-m7 он уже шести этапный. Во всех остальных принципах оптимизации процессоры идентичны. Так что пока вот так.

Небольшое уточнение к предыдущему сообщению.
Запись в SDRAM нужно сопровождать командой DSB (это я имел в виду). Данная команда выжидает пока процессор полностью выполнит все операции до этой команды и затем идет дальше.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 17 2018, 09:32
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата
используют эту команду после записи

О какой команде речь?
upd: увидел комментарий... Если Вам требуется вытолкнуть кэш (например перед запуском DMA) то для этого другие другие средства.

Сообщение отредактировал Genadi Zawidowski - Sep 17 2018, 09:33
Go to the top of the page
 
+Quote Post
Николандр
сообщение Sep 18 2018, 09:08
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 21-08-18
Пользователь №: 106 954



Цитата(Genadi Zawidowski @ Sep 17 2018, 12:32) *
О какой команде речь?
upd: увидел комментарий... Если Вам требуется вытолкнуть кэш (например перед запуском DMA) то для этого другие другие средства.


Это лишь моё объяснение, почему в Кубовских примерах на работу с SDRAM они используют команду DSB после записи. Может быть я ошибаюсь.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Sep 19 2018, 17:23
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(khach @ Sep 12 2018, 14:47) *
Совместимость по пинам есть, по крайней мере H743 TQFP работает на плате F429 discovery. Но вот разводка SDRAM не позволяет получить не то что 133 мгц, а и 100Мгц тактовой.
А теперь вопрос- где можно посмотреть разводку TQFP H743 + SDRAM, работоспособную на 133 мгц, желательно в 4 слоях? BGA варианты не интересуют, т.к гербера BGA доступны у ST.


Вы запаяли H743 в F429 Discovery? SDRAM удалось запустить ? На какой частоте? Инициализация по сравнению с 429 сильно разнится?
Go to the top of the page
 
+Quote Post
khach
сообщение Sep 19 2018, 20:57
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(nanorobot @ Sep 19 2018, 19:23) *
Вы запаяли H743 в F429 Discovery? SDRAM удалось запустить ? На какой частоте? Инициализация по сравнению с 429 сильно разнится?

Не я. Информация отсюда http://www.cqham.ru/forum/showthread.php?3...3%EC%FF-STM32H7 пост №4
А я посмотрел на гербера 429 дискавери и попытался переразвести нормально и наткнулся на проблемы с частотой и разводкой.
Ссылки на код в теме есть- оттуда можно взять инициализацию.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Sep 20 2018, 03:04
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(khach @ Sep 20 2018, 01:57) *
А я посмотрел на гербера 429 дискавери и попытался переразвести нормально и наткнулся на проблемы с частотой и разводкой.


Наверное возможно и на этой плате произвести такую замену ...
http://starterkit.ru/html/index.php?name=s...view&id=120

Поспешил. H7 нет в таких корпусах.

Сообщение отредактировал nanorobot - Sep 20 2018, 03:17
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Sep 24 2018, 15:23
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(khach @ Sep 12 2018, 14:47) *
BGA варианты не интересуют, т.к гербера BGA доступны у ST.


А меня интересуют. Но я не представляю как можно воспользоваться гербер файлами. Сделать по ним клон отладочной платы? Подсмотреть приемы разводки?
Go to the top of the page
 
+Quote Post
khach
сообщение Sep 24 2018, 18:21
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(nanorobot @ Sep 24 2018, 17:23) *
Но я не представляю как можно воспользоваться гербер файлами.

В первом приближении именно клон. Схема контроллер плюс SDRAM один в один от дискавери, гербера импортируются и обрезаются. Остальные цепи контроллера можно разводить в соответствии с новой схемой.
А иначе только вдумчивое курение
AN4803: High-speed SI simulations using IBIS and board-level simulations using HyperLynx SI on STM32 32-bit ARM® Cortex® MCUs
Скачивание IBIS модели контроллера и памяти и разводка с выравниванием длины в соответствии с моделями.


Go to the top of the page
 
+Quote Post
nanorobot
сообщение Sep 28 2018, 06:41
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(khach @ Sep 24 2018, 23:21) *
В первом приближении именно клон.


Попытался заказать плату в Тенхосвязь Екатеринбург. Не берутся.
Go to the top of the page
 
+Quote Post
khach
сообщение Sep 28 2018, 09:03
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(nanorobot @ Sep 28 2018, 08:41) *
Попытался заказать плату в Тенхосвязь Екатеринбург. Не берутся.

Ну да, в BGA оно намного дороже получается. Поэтому хотелось бы найти рабочую разводку на TQFP, хотя бы на 100 МГц. И еще непонятно как верифицировать разводку в железе. Гонять сутками тест памяти? Вот если бы шину SDRAM сделали 36 битную с контролем по Хеммингу с выпадание в трап по несовпадению кодов... Кто нибудь встречал такой АРМ?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 23:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016