[Программирование микроконтроллеров, Схемотехника, Производство и разработка электроники, DIY или Сделай сам, Электроника для начинающих] STM32 DoomBoy SDRAM ILI9341
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Решил попробовать развести что похожее на STM32F4Discovery. Контроллер STM32F429ZGT в корпусе LQFP-144. Выбрал самый распространенный цветной экран ILI9341. Добавил w25q64 который аналог AT25SF081 также SD-CARD и ES8374
Электрически дисплей подключи так же как для Doom Boy ESP32 немного не рассчитал отступ слева. Экран сдвинут влево на сантиметр
Поставил пластиковые втулки по краям плат в места крепления. USB разъем теперь находится на весу и на него ничего не давит когда нажимается кнопка. Постараемся сделать все по красоте в этот раз
Извините, данный ресурс не поддреживается. :(
Connect
SPL
16:09:44: Disconnected from device.
16:09:45: ST-LINK SN: 1F4204003212374D434B4E00
16:09:45: ST-LINK FW: V2J33S7
16:09:45: Voltage: 3,28V
16:09:45: SWD freq: 4000 KHz
16:09:45: Connect mode: Normal
16:09:45: Reset mode: Software reset
16:09:45: Device ID: 0x419
16:09:46: UPLOADING OPTION BYTES DATA…
16:09:46: Bank: 0x00
16:09:46: Address: 0x40023c14
16:09:46: Size: 8 Bytes
16:09:46: UPLOADING…
16:09:46: Size: 1024 Bytes
16:09:46: Address: 0x8000000
16:09:46: Read progress:
16:09:46: Data read successfully
16:09:46: Time elapsed during the read operation is: 00:00:00.006
Распаиваем память. Ставим Кварцевый резонатор. Кварцы все еще в пути, преодолевая Шелковый путь, поэтому выпаял из какой-то BT-MP3 платы 24MHz. Настраиваем порт PB13 на выход. Берем код для мигания светодиода из любого примера. Включаем конструкцию, мигаем светодиодом
Хотел поробовать USB BOOT, но не получается. Наверное надо другой кварц. Мой текущий не совсем попадает
For connectivity line USB DFU bootloader, the device first tries the 25 MHz configuration, then, if it fails, the 14.7456 MHz configuration, and finally, if it fails, the 8 MHz configuration. In case of fail, this operation is repeated with a bigger timeout value (the three configurations are tested again). If the second trial fails, a system reset is generated.
Поставил кварц 8MHz добиться устройства ttyUSB не получилось. STM32F429Discovery в режиме загрузчика BOOT0=1 BOOT1=0 видит как UART устройство и позволяет залить прошивку. Но к ней подключен ST-Link V2 на борту. Он и позволяет это сделать
Так что используем старые проверенный вариант от внешней BluePill. На нем и Debug. Подключение через SWDIO, SWCLK, GND. Поскольку питание полаты осуществляется через USB, +3.3V не подключаем!
Схема подключения как у предыдущего проекта ESP32 DoomBoy
Память IS42S16400J
Контроллер STM32F429ZGT
Потратил 3 вечера чтобы запустить память. Сначала я не инициализировал последовательность. Проинициализировал
SDRAM_Initialization_Sequence()
SPL
#define REFRESH_COUNT ((uint32_t)0x056A) /* SDRAM refresh counter (90MHz SDRAM clock) */
#define SDRAM_BANK_ADDR ((uint32_t)0xC0000000)
static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
__IO uint32_t tmpmrd =0;
/* Step 3: Configure a clock configuration enable command */
Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 4: Insert 100 ms delay */
HAL_Delay(100);
/* Step 5: Configure a PALL (precharge all) command */
Command->CommandMode = FMC_SDRAM_CMD_PALL;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 6 : Configure a Auto-Refresh command */
Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command->AutoRefreshNumber = 4;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 7: Program the external memory mode register */
tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 |
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
SDRAM_MODEREG_CAS_LATENCY_3 |
SDRAM_MODEREG_OPERATING_MODE_STANDARD |
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = tmpmrd;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 8: Set the refresh rate counter */
/* (15.62 us x Freq) - 20 */
/* Set the device refresh counter */
HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT);
}
Память обнулялась. При попытке записать и считать появлялся мусор. У меня есть STM32F429I-DISC1 и на ней тест проходил нормально. Однако в ней память подключена к второму банку 0xD0000000, я же развел на первый банк 0xC0000000. Разница подключения только в двух сигналах
SDRAM 2 — STM32F429I-DISC1
PB5 <-> FMC_SDCKE1
PB6 <-> FMC_SDNE1
SDRAM 1 — Моя плата
PС3 <-> FMC_SDCKE0
PС2 <-> FMC_SDNE0
Последнее что я хотел попробовать это перепаять эту память. На самом деле после этого я собирался расчехлить осциллограф. Сдув предыдущую феном, впаял уже из другой партии IS42S16400J из другого магазина. И о чудо! Я записал и считал одно и тоже значение. Немного поигравшись с частотами, вся память прошла тест на максимальной частоте шины и частоте памяти 90 MHz. (90MHz SDRAM clock). Я не брал за основу референсный дизайн, а разводил сам. Надо будет погонять интенсивнее в будущем.
// #define SDRAM_START_ADR ((uint32_t)0xD0000000)
#define SDRAM_START_ADR ((uint32_t)0xC0000000)
#define SDRAM_SIZE 0x400000
uint32_t j32 = 0x12345678;
uint32_t data32 = 0;
for (i = SDRAM_START_ADR; i < SDRAM_START_ADR + SDRAM_SIZE; i += 4)
{
*(uint32_t*)i = j32;
data = *(uint32_t*)i;
if (data != j32){
error_happen();
}
}
Хороший материал по подключению различных типов памяти и FMC (Flexible Memory Controller) я нашел в webinar формате pdf
Драйвер дисплея взял STM32-ILI9341
Добавил папку с драйверами в свой проект и немного переконфигурировал выводы на SPI1. Тесты запустились и прошли. Дальше планирую портировать LVGL и Doom
Пока не удалось завести FATFS для SD-CARD. Так же не пробовал w25q64
Материалы по теме
SPL
webinar_stm32_20170511.pdf
cd00264379-usb-dfu-protocol-used-in-the-stm32-bootloader-stmicroelectronics.pdf
en.radzio.dxp.pl/stm32f429idiscovery/sdram.html
main.lv/writeup/stm32f4_sdram_configuration.md#toc-1
===========
Источник:
habr.com
===========
Похожие новости:
- [Производство и разработка электроники, DIY или Сделай сам] Создание устройства качания детских кроваток с дугообразным полозом
- [Разработка робототехники, Учебный процесс в IT, Робототехника, Электроника для начинающих] Робототехнические лаборатории, фаблаб и победы молодежных команд на профильных олимпиадах — дайджест Университета ИТМО
- [Программирование, Разработка мобильных приложений, Программирование микроконтроллеров, Умный дом, DIY или Сделай сам] Свой путь в мире, где есть готовое решение для всего
- [C++, C, Программирование микроконтроллеров, Системы сборки] Готовим C++. Система сборки Bake
- [Законодательство в IT, Производство и разработка электроники, История IT, Процессоры, IT-компании] Микропроцессор «Байкал-М» официально получил статус интегральной схемы отечественного производства
- [Производство и разработка электроники, Компьютерное железо, Научно-популярное, Процессоры] 2D-полупроводники спасут закон Мура?
- [Производство и разработка электроники, Периферия, Звук] Аудиобубен лейтенанта Шмидта: о волшебных розетках, “чудо-фильтрах”, и “вреде” импульсных блоков питания
- [Старое железо, DIY или Сделай сам] Rage Against The eMachine: ретро-модификация компьютера (перевод)
- [Производство и разработка электроники, Процессоры, IT-компании] Самый мощный российский процессор будет 32-ядерным и сделанным по технорме 7 нм
- [Производство и разработка электроники, Процессоры, Интернет вещей, IT-компании] Выросшая из AMD компания начала использовать ReRAM технологию от Dialog Semiconductor
Теги для поиска: #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_shemotehnika (Схемотехника), #_proizvodstvo_i_razrabotka_elektroniki (Производство и разработка электроники), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_elektronika_dlja_nachinajuschih (Электроника для начинающих), #_stm32_custom_board_ili9341, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
), #_shemotehnika (
Схемотехника
), #_proizvodstvo_i_razrabotka_elektroniki (
Производство и разработка электроники
), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
), #_elektronika_dlja_nachinajuschih (
Электроника для начинающих
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:59
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Решил попробовать развести что похожее на STM32F4Discovery. Контроллер STM32F429ZGT в корпусе LQFP-144. Выбрал самый распространенный цветной экран ILI9341. Добавил w25q64 который аналог AT25SF081 также SD-CARD и ES8374 Электрически дисплей подключи так же как для Doom Boy ESP32 немного не рассчитал отступ слева. Экран сдвинут влево на сантиметр Поставил пластиковые втулки по краям плат в места крепления. USB разъем теперь находится на весу и на него ничего не давит когда нажимается кнопка. Постараемся сделать все по красоте в этот раз Извините, данный ресурс не поддреживается. :( ConnectSPL16:09:44: Disconnected from device.
16:09:45: ST-LINK SN: 1F4204003212374D434B4E00 16:09:45: ST-LINK FW: V2J33S7 16:09:45: Voltage: 3,28V 16:09:45: SWD freq: 4000 KHz 16:09:45: Connect mode: Normal 16:09:45: Reset mode: Software reset 16:09:45: Device ID: 0x419 16:09:46: UPLOADING OPTION BYTES DATA… 16:09:46: Bank: 0x00 16:09:46: Address: 0x40023c14 16:09:46: Size: 8 Bytes 16:09:46: UPLOADING… 16:09:46: Size: 1024 Bytes 16:09:46: Address: 0x8000000 16:09:46: Read progress: 16:09:46: Data read successfully 16:09:46: Time elapsed during the read operation is: 00:00:00.006 Распаиваем память. Ставим Кварцевый резонатор. Кварцы все еще в пути, преодолевая Шелковый путь, поэтому выпаял из какой-то BT-MP3 платы 24MHz. Настраиваем порт PB13 на выход. Берем код для мигания светодиода из любого примера. Включаем конструкцию, мигаем светодиодом Хотел поробовать USB BOOT, но не получается. Наверное надо другой кварц. Мой текущий не совсем попадает For connectivity line USB DFU bootloader, the device first tries the 25 MHz configuration, then, if it fails, the 14.7456 MHz configuration, and finally, if it fails, the 8 MHz configuration. In case of fail, this operation is repeated with a bigger timeout value (the three configurations are tested again). If the second trial fails, a system reset is generated.
Поставил кварц 8MHz добиться устройства ttyUSB не получилось. STM32F429Discovery в режиме загрузчика BOOT0=1 BOOT1=0 видит как UART устройство и позволяет залить прошивку. Но к ней подключен ST-Link V2 на борту. Он и позволяет это сделать Так что используем старые проверенный вариант от внешней BluePill. На нем и Debug. Подключение через SWDIO, SWCLK, GND. Поскольку питание полаты осуществляется через USB, +3.3V не подключаем! Схема подключения как у предыдущего проекта ESP32 DoomBoy Память IS42S16400J Контроллер STM32F429ZGT Потратил 3 вечера чтобы запустить память. Сначала я не инициализировал последовательность. Проинициализировал SDRAM_Initialization_Sequence()SPL#define REFRESH_COUNT ((uint32_t)0x056A) /* SDRAM refresh counter (90MHz SDRAM clock) */
#define SDRAM_BANK_ADDR ((uint32_t)0xC0000000) static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command) { __IO uint32_t tmpmrd =0; /* Step 3: Configure a clock configuration enable command */ Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; Command->AutoRefreshNumber = 1; Command->ModeRegisterDefinition = 0; /* Send the command */ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); /* Step 4: Insert 100 ms delay */ HAL_Delay(100); /* Step 5: Configure a PALL (precharge all) command */ Command->CommandMode = FMC_SDRAM_CMD_PALL; Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; Command->AutoRefreshNumber = 1; Command->ModeRegisterDefinition = 0; /* Send the command */ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); /* Step 6 : Configure a Auto-Refresh command */ Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; Command->AutoRefreshNumber = 4; Command->ModeRegisterDefinition = 0; /* Send the command */ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); /* Step 7: Program the external memory mode register */ tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 | SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | SDRAM_MODEREG_CAS_LATENCY_3 | SDRAM_MODEREG_OPERATING_MODE_STANDARD | SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE; Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; Command->AutoRefreshNumber = 1; Command->ModeRegisterDefinition = tmpmrd; /* Send the command */ HAL_SDRAM_SendCommand(hsdram, Command, 0x1000); /* Step 8: Set the refresh rate counter */ /* (15.62 us x Freq) - 20 */ /* Set the device refresh counter */ HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT); } Память обнулялась. При попытке записать и считать появлялся мусор. У меня есть STM32F429I-DISC1 и на ней тест проходил нормально. Однако в ней память подключена к второму банку 0xD0000000, я же развел на первый банк 0xC0000000. Разница подключения только в двух сигналах SDRAM 2 — STM32F429I-DISC1 PB5 <-> FMC_SDCKE1 PB6 <-> FMC_SDNE1 SDRAM 1 — Моя плата PС3 <-> FMC_SDCKE0 PС2 <-> FMC_SDNE0 Последнее что я хотел попробовать это перепаять эту память. На самом деле после этого я собирался расчехлить осциллограф. Сдув предыдущую феном, впаял уже из другой партии IS42S16400J из другого магазина. И о чудо! Я записал и считал одно и тоже значение. Немного поигравшись с частотами, вся память прошла тест на максимальной частоте шины и частоте памяти 90 MHz. (90MHz SDRAM clock). Я не брал за основу референсный дизайн, а разводил сам. Надо будет погонять интенсивнее в будущем. // #define SDRAM_START_ADR ((uint32_t)0xD0000000)
#define SDRAM_START_ADR ((uint32_t)0xC0000000) #define SDRAM_SIZE 0x400000 uint32_t j32 = 0x12345678; uint32_t data32 = 0; for (i = SDRAM_START_ADR; i < SDRAM_START_ADR + SDRAM_SIZE; i += 4) { *(uint32_t*)i = j32; data = *(uint32_t*)i; if (data != j32){ error_happen(); } } Хороший материал по подключению различных типов памяти и FMC (Flexible Memory Controller) я нашел в webinar формате pdf Драйвер дисплея взял STM32-ILI9341 Добавил папку с драйверами в свой проект и немного переконфигурировал выводы на SPI1. Тесты запустились и прошли. Дальше планирую портировать LVGL и Doom Пока не удалось завести FATFS для SD-CARD. Так же не пробовал w25q64 Материалы по темеSPLwebinar_stm32_20170511.pdf
cd00264379-usb-dfu-protocol-used-in-the-stm32-bootloader-stmicroelectronics.pdf en.radzio.dxp.pl/stm32f429idiscovery/sdram.html main.lv/writeup/stm32f4_sdram_configuration.md#toc-1 =========== Источник: habr.com =========== Похожие новости:
Программирование микроконтроллеров ), #_shemotehnika ( Схемотехника ), #_proizvodstvo_i_razrabotka_elektroniki ( Производство и разработка электроники ), #_diy_ili_sdelaj_sam ( DIY или Сделай сам ), #_elektronika_dlja_nachinajuschih ( Электроника для начинающих ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:59
Часовой пояс: UTC + 5