Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407, SSD1963, SD Memory card
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Daria
Господа! (и немногочисленные дамы)
Я знаю, что подобная тема долго и плодотворно обсуждалась уже здесь в прошлом году, но из той темы, кажется все ушли sm.gif А вопросов после ее прочтения у меня еще осталось много. Поэтому открываю новую.
Итак, есть STM32F407VGT6, есть модуль с LCD дисплеем, контроллером SSD1963 с протоколом 8080 и разъемом под SD MC.
Необходимо выводить на дисплей информацию, которую STM будет получать от внешних устройств.
Информации не очень много, анимация не нужна, просто статическая картинка и текст, который будет меняться не чаще, чем раз в минуту. иногда должна меняться вся картинка. Всего картинок не больше десятка, полагаю.
На внешний разъем модуля выведены не все пины SD карты, а только spi-совместимые (Do,DI, CS, CLK).
Рассматриваю такой вариант - управлять SSD1963 с помощью FSMC. SD подключить к spi пинам. Хранить картинки в SD, и при необходимости перекидывать их на дисплей. А текст и несколько примитивов хранить прямо во внутренней Flash.
Другие варианты:
Можно подключить SD к родному SD порту в STM32. Но тогда возможен только 1-битовый режим, потому что на внешний разъем модуля выведен только один DO...
Можно управлять SSD1963 ногодрыганием, вроде бы в некоторых темах народ выступает за такой способ, в лоб.
Можно подключить SD к FSMC как NOR\PSRAM, а SSD1963 управлять ногодрыганием.
Кто может подсказать, какой способ проще, быстрее и надежнее?

Да, в моем корпусе STM32 FSMC сокращенный, присутствуют только Bank1 и Bank2, так что можно подключить только одно устройство.

Второй вопрос. Если все-таки задействовать FSMC для реализации 8080, то к каким пинам подключать?
правильно ли я понимаю, что
FSMC_NWE - к WR
FSMC_NOE к RD,
FSMC_NE1 - к CS,
FSMC_D0..15 - к D0..15

А для переключения адреса и данных (С\D) можно задействовать любой пин из FSMC_A шины, например A16? И для отправки команд дисплею, писать команды в регистр адреса FSMC?

Это вопрос к тем, кто работал с FSMC STM32F407

буду рада ответам и помощи sm.gif
NaughtyFreak
Цитата(Daria @ Jan 27 2013, 17:24) *
Можно управлять SSD1963 ногодрыганием, вроде бы в некоторых темах народ выступает за такой способ, в лоб.
Можно подключить SD к FSMC как NOR\PSRAM, а SSD1963 управлять ногодрыганием.
Кто может подсказать, какой способ проще, быстрее и надежнее?
Да, в моем корпусе STM32 FSMC сокращенный, присутствуют только Bank1 и Bank2, так что можно подключить только одно устройство.

насчёт SD-карточки точно не скажу, но вроде как её по обычному SPI подключают.
Ногодрыганием при наличии фсмц управлять LCD не имеет смысла, для этого он и есть sm.gif

Цитата(Daria @ Jan 27 2013, 17:24) *
Второй вопрос. Если все-таки задействовать FSMC для реализации 8080, то к каким пинам подключать?
правильно ли я понимаю, что
FSMC_NWE - к WR
FSMC_NOE к RD,
FSMC_NE1 - к CS,
FSMC_D0..15 - к D0..15


да, + RS для выбора данные/команда

Цитата(Daria @ Jan 27 2013, 17:24) *
А для переключения адреса и данных (С\D) можно задействовать любой пин из FSMC_A шины, например A16? И для отправки команд дисплею, писать команды в регистр адреса FSMC?

да, любой свободный адресный пин. Не совсем в регистр, а в адресное пространство, относящееся к FSMC.

Вот, прочитайте вот здесь про FSMC и LCD, разобрали до косточек.
-Игорь-
Цитата(Daria @ Jan 27 2013, 16:24) *
Можно подключить SD к родному SD порту в STM32.

Здесь с осторожностью у меня не работала пересылка по dma с карточки sd (подключена к порту sd) на lcd на stm32f103. На форуме st висел вопрос об этом без ответа. К spi карточку возможности подключить не было.
hd44780
F103 и F407 - разные вещи.
У них даже исходники непереносимые во многом.... Так что с примерами под F1 советую не связываться, если на руках F4.

По теме.
Daria, посмотрите плату STM3240G-EVAL - http://www.st.com/internet/evalboard/product/252216.jsp Проц такой же, как и на Discovery, только в 144 ногом корпусе. Но если Вы не собираетесь цеплять на FSMC дисплей и SRAM одновременно, то можно те исходники брать как есть.
Там и дисплей (ILI9320) на FSMC есть, и карта на SDIO. И исходник прошивки, которая со всем этим делом рулит.

Я лично оттуда пока только SD карту выдрал, работает нормально на STM32F4Discovery. Код могу дать, кому надо.
Дисплей пока не припаял до конца. Припаяю, буду с прошивкой копаться.
Daria
Цитата(NaughtyFreak @ Jan 28 2013, 14:11) *
Вот, прочитайте вот здесь про FSMC и LCD, разобрали до косточек.

Большое спасибо, сейчас почитаю.

Цитата(-Игорь- @ Jan 28 2013, 15:14) *
Здесь с осторожностью у меня не работала пересылка по dma с карточки sd (подключена к порту sd) на lcd на stm32f103. На форуме st висел вопрос об этом без ответа. К spi карточку возможности подключить не было.

Ясно, спасибо. Значит, буду подключать к SPI, как и задумывала сначала sm.gif

Цитата(hd44780 @ Jan 28 2013, 16:00) *
F103 и F407 - разные вещи.
У них даже исходники непереносимые во многом.... Так что с примерами под F1 советую не связываться, если на руках F4.

Ясно. А я вот как раз нарыла несколько исходников под F103 sm.gif Придется отказаться от них sm.gif
Цитата(hd44780 @ Jan 28 2013, 16:00) *
По теме.
Daria, посмотрите плату STM3240G-EVAL - http://www.st.com/internet/evalboard/product/252216.jsp Проц такой же, как и на Discovery, только в 144 ногом корпусе.

Эх, жаль, но у меня уже есть эта Dicscovery и другой не купят уже sm.gif
Цитата(hd44780 @ Jan 28 2013, 16:00) *
Код могу дать, кому надо.

Конечно, надо sm.gif Кидайте в личку
Цитата(hd44780 @ Jan 28 2013, 16:00) *
Дисплей пока не припаял до конца. Припаяю, буду с прошивкой копаться.

Ага, удачи sm.gif Я тоже буду копаться sm.gif
Господа, всем спасибо, но не бросайте тему. заглядывайте переодически, если будет время. Буду запускать проект и потихоньку обновлять тему новыми вопросами sm.gif
hd44780
Цитата(Daria @ Jan 28 2013, 16:02) *
Эх, жаль, но у меня уже есть эта Dicscovery и другой не купят уже sm.gif

Да необязательно её покупать.
Из её примеров можно разных полезностей надёргать. Типа SDIO или дисплея на FSMC rolleyes.gif .

Цитата(Daria @ Jan 28 2013, 16:02) *
Конечно, надо sm.gif Кидайте в личку

Вложения туды не кидаются laughing.gif . Кладу здесь. Вопросы в личку.
Allregia
Цитата(Daria @ Jan 28 2013, 16:02) *
Ясно, спасибо. Значит, буду подключать к SPI, как и задумывала сначала sm.gif


А почему не к специально предназначенному для этого SDIO ?
hd44780
Allregia, читайте внимательнее.

Цитата(Daria @ Jan 27 2013, 15:24) *
На внешний разъем модуля выведены не все пины SD карты, а только spi-совместимые (Do,DI, CS, CLK).


Первый пост темы.
Мой пример для SDIO (не SPI!!!!), кто не понял.

Если есть доступ к SDIO, конечно лучше SDIO.
Allregia
Цитата(hd44780 @ Jan 28 2013, 18:09) *
Allregia, читайте внимательнее.


Я очень внимательно читаю.

Цитата(Daria)
На внешний разъем модуля выведены не все пины SD карты, а только spi-совместимые (Do,DI, CS, CLK).


и, продолжайте пожалуйста?
dac
QUOTE (Daria @ Jan 27 2013, 19:24) *
Итак, есть STM32F407VGT6, есть модуль с LCD дисплеем, контроллером SSD1963 с протоколом 8080 и разъемом под SD MC.
Необходимо выводить на дисплей информацию, которую STM будет получать от внешних устройств.
буду рада ответам и помощи sm.gif

сначала читаем там. ссылка на исходники в конце статьи гитхаб
ну и там же есть еще ряд статей.
потом задаем вопросы. сделано под STM32F207vet, fsmc модули у них вроде одинаковые с 407/
контроллер дисплея другой, поэтому файл lcdHAL придется править под свой, через пару недель выложу драйверы под disovery4 + китайский экран HY-32D (с HAL под несколько контроллеров)
вопросы лучше в личку или в статье, тогда уведомления будут приходить, а то форум не постоянно читаю sm.gif
Daria
Цитата(dac @ Jan 28 2013, 21:07) *
сначала читаем там.

Спасибо, почитала
Цитата(dac @ Jan 28 2013, 21:07) *
через пару недель выложу драйверы под disovery4 + китайский экран HY-32D (с HAL под несколько контроллеров)
вопросы лучше в личку или в статье, тогда уведомления будут приходить, а то форум не постоянно читаю sm.gif

Ага, будем ждать. Вы упоминали как раз SSD, кажется, в статье wink.gif
dac
QUOTE (Daria @ Jan 29 2013, 00:05) *
Спасибо, почитала

Ага, будем ждать. Вы упоминали как раз SSD, кажется, в статье wink.gif А где выложите?

в конце статьи есть ссылка, там все и будет
Daria
Цитата(hd44780 @ Jan 28 2013, 20:09) *
Allregia, читайте внимательнее.
Первый пост темы.

Именно. Можно, конечно, и на SDIO, но тогда возможен только 1-битовый режим. Как я понимаю(и разумно посоветовали в личкуsm.gif), смысла в этом нет.
Цитата(hd44780 @ Jan 28 2013, 20:09) *
Мой пример для SDIO (не SPI!!!!), кто не понял.
Если есть доступ к SDIO, конечно лучше SDIO.

Нет, все понятно. Но пригодится обязательно, это же не единственный проект, который нужно будет реализовывать на STM rolleyes.gif

Цитата(dac @ Jan 28 2013, 22:15) *
в конце статьи есть ссылка, там все и будет

Да, спасибо, буду ждать sm.gif Попробую сама переделать lcdHAL, если вы поздно выложите, но пока мне хотя бы вообще включить дисплей через FSMC rolleyes.gif Завтра буду пробовать sm.gif
Allregia
Цитата(Daria @ Jan 28 2013, 20:27) *
Именно. Можно, конечно, и на SDIO, но тогда возможен только 1-битовый режим. Как я понимаю(и разумно посоветовали в личку sm.gif ), смысла в этом нет.


Ну тогда уж, огласите пожалуйста, чтобы и я знал - чем SPI лучше чем 1-битный SDIO?
_Pasha
Цитата(Allregia @ Jan 28 2013, 21:31) *
Ну тогда уж, огласите пожалуйста, чтобы и я знал - чем SPI лучше чем 1-битный SDIO?

Походу, ничем, даже лишний код/головняк добавляется с тактами ожидания и при инициализации карты.
aaarrr
Цитата(Allregia @ Jan 28 2013, 22:31) *
Ну тогда уж, огласите пожалуйста, чтобы и я знал - чем SPI лучше чем 1-битный SDIO?

В общем случае несколько хуже: "честный" SD-контроллер может считать CRC.
В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC сам.
Ну, теоретическая скорость на SPI несколько ниже, если это принципиально (37.5 против 48МГц).
Allregia
Цитата(aaarrr @ Jan 28 2013, 22:13) *
В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC

А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено?
И какая ему альтернатива, если он как в ф4 не работает?
aaarrr
Цитата(Allregia @ Jan 29 2013, 00:49) *
А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено?

HW flow control просто отрубает клок, если контроллер по каким-либо причинам не может отдать или принять данные.
У F4 это процесс сопровождается глитчами на линии CLK, что в результате приводит к ошибкам.

Цитата(Allregia @ Jan 29 2013, 00:49) *
И какая ему альтернатива, если он как в ф4 не работает?

Никакой. На F4 придется или разгребать ошибки CRC, если управление потоком включено (что, понятно, не рекомендуется), или же
разгребать ошибки overrun / underrun. В любом случае некоторая головная боль.
Allregia
Спасибо.
Daria
Добрый вечер. Сегодня, наконец, спаяли модуль. пробую включить SSD1963 через FSMC.
Команда Display On проходит - по крайней мере, экран загорается. На экране цветной мусор из памяти. На остальные команды никакой реакции
Кто работал с SSD1963 - не подскажете, в какой последовательности подаются команды?
Я сначала делаю программный RES, потом Display On. Потом установка режима- AddrMode, Далее устанавливаю начальный и конечный адреса и формат пикселя. 0x2C и начинаю посылать массив данных.
Смотрю шину анализатором- картинки вроде соответствуют даташиту, данные отправляются, стробы есть. после команды 0x29 - DisplayOn, экран загорается. но больше никаких изменений.
TE у меня не выведен на внешний разъем модуля, поэтому приходится без него

Может, нужна какая-то другая последовательность команд?

И вопрос по формату данных - судя по даташиту, для SSD1963 нужно настроить FSMC на 8-битный режим, команды-то у него 8битные.
Это так или я ошибаюсь? sm.gif
Кто работал с SSD1963 - отзовитесь sm.gif
Rash
Дарья, вы хоть бы поиском пользовались или доку читали бы
инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию
CODE
// Horizontal and vertical display resolution (from the glass datasheet)
#define DISP_HOR_RESOLUTION 800
#define DISP_VER_RESOLUTION 480

// Horizontal synchronization timing in pixels (from the glass datasheet)
#define DISP_HOR_PULSE_WIDTH 48 // 1..48 (Min .. Typ)
#define DISP_HOR_BACK_PORCH 40 // Typ
#define DISP_HOR_FRONT_PORCH 40 // Typ

// Vertical synchronization timing in lines (from the glass datasheet)
#define DISP_VER_PULSE_WIDTH 3 // Typ
#define DISP_VER_BACK_PORCH 29 // Typ
#define DISP_VER_FRONT_PORCH 13 // Typ


// *****************************************************************************
// Инициализация контроллера SSD1963 for PCLK, HSYNC, VSYNC etc
void SSD1963_Init(void)
{
// Програмный сброс
set_reg(0x01); // Soft reset (Сбрасываются все регистры кроме 0xE0 и 0xE5)
LCD_Delay(5); // Нужно ожидать 5 мс

// * Настройка PLL на 100 МГц перед его включением (для фнешего кыарца 10 МГц) *
// Установка множителя M для PLL: VCO = crystal freq * (N+1) (где - 250MHz < VCO < 800MHz)
// Частота PLL = VCO/M, макс 110MHz.
set_reg(0xE2); // Уст. PLL для OSC = 10MHz
set_data(0x1D); // Множитель N = 29, VCO (>250MHz)= OSC*(N+1), VCO = 300MHz
set_data(0x02); // Делитель M = 2, PLL = 300/(M+1) = 100MHz
set_data(0x04); // Установить использование M (множителя) и N (делителя) значений

// * Запуск PLL *
set_reg(0xE0); // Start PLL command
set_data(0x01); // включить PLL
LCD_Delay(1); // ожидание стабильности (100 мскек) минимум

set_reg(0xE0); // Start PLL command again
set_data(0x03); // Теперь PLL выход используя как системные часы
LCD_Delay(1); // ожидание стабильности (100 мксек) минимум

// Програмный сброс после включения PLL
set_reg(0x01); // Soft reset
LCD_Delay(10000);

// Установить LSHIFT частоту, т.е DCLK для TFT если частота PLL 100 МГц set previously
// Значение DCLK для HSD050IDW1-A20 равняется 33 МГц (по даташиту)
// 33 MHz = 100MHz*(LCDC_FPR + 1)/2^20
// LCDC_FPR = 346030 (0x547AE)
// Time per line = (DISP_HOR_RESOLUTION + DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH +
// DISP_HOR_FRONT_PORCH)/30.3 нсек = 928/30.3 = 30.6 нсек
set_reg(0xE6);
set_data(0x05);
set_data(0x47);
set_data(0xAE);

//Set panel mode, varies from individual manufacturer
set_reg(0xB0);
// set_data(0x10); // set 18-bit for 7" panel TY700TFT800480
// set_data(0x80); // set TTL mode
// set_data(0x08); // SET TFT MODE & hsync + Vsync + DEN MODE
set_data(0x20); // set 24-bit
set_data(0x00); // SET TFT MODE & hsync + Vsync + DEN MODE
set_data(((DISP_HOR_RESOLUTION - 1) >> 8) & 0x0007); // Set panel size
set_data((DISP_HOR_RESOLUTION - 1) & 0x00FF);
set_data(((DISP_VER_RESOLUTION - 1) >> 8) & 0x0007);
set_data((DISP_VER_RESOLUTION - 1) & 0x00FF);
set_data(0x00); // RGB sequence

// Set horizontal period
set_reg(0xB4);
#define HT (DISP_HOR_RESOLUTION + DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH + DISP_HOR_FRONT_PORCH)
set_data(((HT - 1) >> 8) & 0x0007); // HT - horizontal total period
set_data((HT - 1) & 0x00FF); // ...
#define HPS (DISP_HOR_PULSE_WIDTH + DISP_HOR_BACK_PORCH)
set_data(((HPS - 1) >> 8) & 0x0007); // HPS: Horizontal Sync Pulse Start Position
set_data((HPS - 1) & 0x00FF); // ...
set_data(DISP_HOR_PULSE_WIDTH - 1); // HPW: Horizontal Sync Pulse Width
set_data(0x00); // LPS: Horizontal Display Period Start Position
set_data(0x00); // ...
set_data(0x00); // LPSPP: Horizontal Sync Pulse Subpixel Start Position
// (for serial TFT interface). Dummy value for TFT interface.
// Set vertical period
set_reg(0xB6);
#define VT (DISP_VER_RESOLUTION + DISP_VER_PULSE_WIDTH + DISP_VER_BACK_PORCH +
DISP_VER_FRONT_PORCH) set_data(((VT - 1) >> 8) & 0x0007); // VT: Vertical Total
set_data((VT - 1) & 0x00FF); // ...
#define VSP (DISP_VER_PULSE_WIDTH + DISP_VER_BACK_PORCH)
set_data(((VSP - 1) >> 8) & 0x0007); // VPS: Vertical Sync Pulse Start Position
set_data((VSP - 1) & 0x00FF); // ...
set_data(DISP_VER_PULSE_WIDTH - 1); // VPW: Vertical Sync Pulse Width
set_data(0x00); // FPS: Vertical Display Period Start Position
set_data(0x00); // ...

// SET Address mode
set_reg(0x36);
set_data(0x00);
// set_data(0xA0);
// set_data(0x03);

//Set pixel format, i.e. the bpp (команда была удалена см. даташит вер 1.1)
// set_reg(0x3A);
// set_data(0x50); // set 16bpp

// Set pixel data interface
set_reg(0xF0);
set_data(0x03); // 16-bit(565 format) data
set_reg(0x29); // Turn on display; show the image on display
LCD_Delay(5); // Нужно ожидать 5 мс
return;
}
Daria
Цитата(Rash @ Feb 7 2013, 00:48) *
Дарья, вы хоть бы поиском пользовались или доку читали бы
инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию


Да, уже нашла пару вариантов rolleyes.gif
Но ваш, кстати, самый понятный sm.gif Большое спасибо, сегодня попробую
Daria
Rash, большое спасибо, все получилось sm.gif
khach
Цитата(dac @ Jan 28 2013, 20:07) *
сначала читаем
ну и там же есть еще ряд статей.
потом задаем вопросы. сделано под STM32F207vet, fsmc модули у них вроде одинаковые с 407/

Добрый день!
Вопрос к спецу по GUI. Как лучше реализовать курсоры в драйвере контроллера типа SSD1963? Аппаратной поддержки курсоров нет. Полную копию видеопамяти хранить негде (для 7 дюймового дисплея). Как лучше определить субфрейм и наиболее быстро прочитать его и инвертировать? Стоит ли заморачиваться с DMA для прорисовки курсора?
Интересуют как мелкие курсоры, типа мышачьих, так и на весь экран, типа осциллографических- крестовые и линейные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.