|
STM32F407, SSD1963, SD Memory card, отображение графической информации на дисплее |
|
|
|
Jan 27 2013, 13:24
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Господа! (и немногочисленные дамы) Я знаю, что подобная тема долго и плодотворно обсуждалась уже здесь в прошлом году, но из той темы, кажется все ушли  А вопросов после ее прочтения у меня еще осталось много. Поэтому открываю новую. Итак, есть 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 буду рада ответам и помощи
|
|
|
|
|
Jan 28 2013, 10:11
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 7-10-11
Из: Москва
Пользователь №: 67 593

|
Цитата(Daria @ Jan 27 2013, 17:24)  Можно управлять SSD1963 ногодрыганием, вроде бы в некоторых темах народ выступает за такой способ, в лоб. Можно подключить SD к FSMC как NOR\PSRAM, а SSD1963 управлять ногодрыганием. Кто может подсказать, какой способ проще, быстрее и надежнее? Да, в моем корпусе STM32 FSMC сокращенный, присутствуют только Bank1 и Bank2, так что можно подключить только одно устройство. насчёт SD-карточки точно не скажу, но вроде как её по обычному SPI подключают. Ногодрыганием при наличии фсмц управлять LCD не имеет смысла, для этого он и есть  Цитата(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, разобрали до косточек.
Сообщение отредактировал NaughtyFreak - Jan 28 2013, 10:13
|
|
|
|
|
Jan 28 2013, 11:14
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 8-10-11
Пользователь №: 67 615

|
Цитата(Daria @ Jan 27 2013, 16:24)  Можно подключить SD к родному SD порту в STM32. Здесь с осторожностью у меня не работала пересылка по dma с карточки sd (подключена к порту sd) на lcd на stm32f103. На форуме st висел вопрос об этом без ответа. К spi карточку возможности подключить не было.
|
|
|
|
|
Jan 28 2013, 12:00
|

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

|
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. Код могу дать, кому надо. Дисплей пока не припаял до конца. Припаяю, буду с прошивкой копаться.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Jan 28 2013, 14:02
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(NaughtyFreak @ Jan 28 2013, 14:11)  Вот, прочитайте вот здесь про FSMC и LCD, разобрали до косточек. Большое спасибо, сейчас почитаю. Цитата(-Игорь- @ Jan 28 2013, 15:14)  Здесь с осторожностью у меня не работала пересылка по dma с карточки sd (подключена к порту sd) на lcd на stm32f103. На форуме st висел вопрос об этом без ответа. К spi карточку возможности подключить не было. Ясно, спасибо. Значит, буду подключать к SPI, как и задумывала сначала  Цитата(hd44780 @ Jan 28 2013, 16:00)  F103 и F407 - разные вещи. У них даже исходники непереносимые во многом.... Так что с примерами под F1 советую не связываться, если на руках F4. Ясно. А я вот как раз нарыла несколько исходников под F103  Придется отказаться от них  Цитата(hd44780 @ Jan 28 2013, 16:00)  По теме. Daria, посмотрите плату STM3240G-EVAL - http://www.st.com/internet/evalboard/product/252216.jsp Проц такой же, как и на Discovery, только в 144 ногом корпусе. Эх, жаль, но у меня уже есть эта Dicscovery и другой не купят уже  Цитата(hd44780 @ Jan 28 2013, 16:00)  Код могу дать, кому надо. Конечно, надо  Кидайте в личку Цитата(hd44780 @ Jan 28 2013, 16:00)  Дисплей пока не припаял до конца. Припаяю, буду с прошивкой копаться. Ага, удачи  Я тоже буду копаться  Господа, всем спасибо, но не бросайте тему. заглядывайте переодически, если будет время. Буду запускать проект и потихоньку обновлять тему новыми вопросами
|
|
|
|
|
Jan 28 2013, 14:49
|

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

|
Цитата(Daria @ Jan 28 2013, 16:02)  Эх, жаль, но у меня уже есть эта Dicscovery и другой не купят уже  Да необязательно её покупать. Из её примеров можно разных полезностей надёргать. Типа SDIO или дисплея на FSMC  . Цитата(Daria @ Jan 28 2013, 16:02)  Конечно, надо  Кидайте в личку Вложения туды не кидаются  . Кладу здесь. Вопросы в личку.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Jan 28 2013, 16:09
|

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

|
Allregia, читайте внимательнее. Цитата(Daria @ Jan 27 2013, 15:24)  На внешний разъем модуля выведены не все пины SD карты, а только spi-совместимые (Do,DI, CS, CLK). Первый пост темы. Мой пример для SDIO (не SPI!!!!), кто не понял. Если есть доступ к SDIO, конечно лучше SDIO.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Jan 28 2013, 16:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(hd44780 @ Jan 28 2013, 18:09)  Allregia, читайте внимательнее. Я очень внимательно читаю. Цитата(Daria) На внешний разъем модуля выведены не все пины SD карты, а только spi-совместимые (Do,DI, CS, CLK). и, продолжайте пожалуйста?
|
|
|
|
|
Jan 28 2013, 17:07
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Daria @ Jan 27 2013, 19:24)  Итак, есть STM32F407VGT6, есть модуль с LCD дисплеем, контроллером SSD1963 с протоколом 8080 и разъемом под SD MC. Необходимо выводить на дисплей информацию, которую STM будет получать от внешних устройств. буду рада ответам и помощи  сначала читаем там. ссылка на исходники в конце статьи гитхаб ну и там же есть еще ряд статей. потом задаем вопросы. сделано под STM32F207vet, fsmc модули у них вроде одинаковые с 407/ контроллер дисплея другой, поэтому файл lcdHAL придется править под свой, через пару недель выложу драйверы под disovery4 + китайский экран HY-32D (с HAL под несколько контроллеров) вопросы лучше в личку или в статье, тогда уведомления будут приходить, а то форум не постоянно читаю
|
|
|
|
|
Jan 28 2013, 18:05
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(dac @ Jan 28 2013, 21:07)  Спасибо, почитала Цитата(dac @ Jan 28 2013, 21:07)  через пару недель выложу драйверы под disovery4 + китайский экран HY-32D (с HAL под несколько контроллеров) вопросы лучше в личку или в статье, тогда уведомления будут приходить, а то форум не постоянно читаю  Ага, будем ждать. Вы упоминали как раз SSD, кажется, в статье
Сообщение отредактировал Daria - Jan 28 2013, 18:20
|
|
|
|
|
Jan 28 2013, 18:15
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Daria @ Jan 29 2013, 00:05)  Спасибо, почитала Ага, будем ждать. Вы упоминали как раз SSD, кажется, в статье  А где выложите? в конце статьи есть ссылка, там все и будет
|
|
|
|
|
Jan 28 2013, 18:27
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(hd44780 @ Jan 28 2013, 20:09)  Allregia, читайте внимательнее. Первый пост темы. Именно. Можно, конечно, и на SDIO, но тогда возможен только 1-битовый режим. Как я понимаю(и разумно посоветовали в личку  ), смысла в этом нет. Цитата(hd44780 @ Jan 28 2013, 20:09)  Мой пример для SDIO (не SPI!!!!), кто не понял. Если есть доступ к SDIO, конечно лучше SDIO. Нет, все понятно. Но пригодится обязательно, это же не единственный проект, который нужно будет реализовывать на STM  Цитата(dac @ Jan 28 2013, 22:15)  в конце статьи есть ссылка, там все и будет Да, спасибо, буду ждать  Попробую сама переделать lcdHAL, если вы поздно выложите, но пока мне хотя бы вообще включить дисплей через FSMC  Завтра буду пробовать
|
|
|
|
|
Jan 28 2013, 21:05
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(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. В любом случае некоторая головная боль.
|
|
|
|
|
Feb 6 2013, 18:53
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Добрый вечер. Сегодня, наконец, спаяли модуль. пробую включить SSD1963 через FSMC. Команда Display On проходит - по крайней мере, экран загорается. На экране цветной мусор из памяти. На остальные команды никакой реакции Кто работал с SSD1963 - не подскажете, в какой последовательности подаются команды? Я сначала делаю программный RES, потом Display On. Потом установка режима- AddrMode, Далее устанавливаю начальный и конечный адреса и формат пикселя. 0x2C и начинаю посылать массив данных. Смотрю шину анализатором- картинки вроде соответствуют даташиту, данные отправляются, стробы есть. после команды 0x29 - DisplayOn, экран загорается. но больше никаких изменений. TE у меня не выведен на внешний разъем модуля, поэтому приходится без него Может, нужна какая-то другая последовательность команд? И вопрос по формату данных - судя по даташиту, для SSD1963 нужно настроить FSMC на 8-битный режим, команды-то у него 8битные. Это так или я ошибаюсь?  Кто работал с SSD1963 - отзовитесь
|
|
|
|
|
Feb 6 2013, 20:48
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию 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; }
Сообщение отредактировал IgorKossak - Feb 6 2013, 21:20
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Feb 7 2013, 05:53
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(Rash @ Feb 7 2013, 00:48)  Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию Да, уже нашла пару вариантов Но ваш, кстати, самый понятный  Большое спасибо, сегодня попробую
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|