aaarrr 69 28 января, 2013 Опубликовано 28 января, 2013 · Жалоба Ну тогда уж, огласите пожалуйста, чтобы и я знал - чем SPI лучше чем 1-битный SDIO? В общем случае несколько хуже: "честный" SD-контроллер может считать CRC. В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC сам. Ну, теоретическая скорость на SPI несколько ниже, если это принципиально (37.5 против 48МГц). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 28 января, 2013 Опубликовано 28 января, 2013 · Жалоба В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено? И какая ему альтернатива, если он как в ф4 не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 января, 2013 Опубликовано 28 января, 2013 · Жалоба А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено? HW flow control просто отрубает клок, если контроллер по каким-либо причинам не может отдать или принять данные. У F4 это процесс сопровождается глитчами на линии CLK, что в результате приводит к ошибкам. И какая ему альтернатива, если он как в ф4 не работает? Никакой. На F4 придется или разгребать ошибки CRC, если управление потоком включено (что, понятно, не рекомендуется), или же разгребать ошибки overrun / underrun. В любом случае некоторая головная боль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 28 января, 2013 Опубликовано 28 января, 2013 · Жалоба Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Daria 0 6 февраля, 2013 Опубликовано 6 февраля, 2013 · Жалоба Добрый вечер. Сегодня, наконец, спаяли модуль. пробую включить SSD1963 через FSMC. Команда Display On проходит - по крайней мере, экран загорается. На экране цветной мусор из памяти. На остальные команды никакой реакции Кто работал с SSD1963 - не подскажете, в какой последовательности подаются команды? Я сначала делаю программный RES, потом Display On. Потом установка режима- AddrMode, Далее устанавливаю начальный и конечный адреса и формат пикселя. 0x2C и начинаю посылать массив данных. Смотрю шину анализатором- картинки вроде соответствуют даташиту, данные отправляются, стробы есть. после команды 0x29 - DisplayOn, экран загорается. но больше никаких изменений. TE у меня не выведен на внешний разъем модуля, поэтому приходится без него Может, нужна какая-то другая последовательность команд? И вопрос по формату данных - судя по даташиту, для SSD1963 нужно настроить FSMC на 8-битный режим, команды-то у него 8битные. Это так или я ошибаюсь? :) Кто работал с SSD1963 - отзовитесь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 6 февраля, 2013 Опубликовано 6 февраля, 2013 (изменено) · Жалоба Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию // 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; } Изменено 6 февраля, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Daria 0 7 февраля, 2013 Опубликовано 7 февраля, 2013 · Жалоба Дарья, вы хоть бы поиском пользовались или доку читали бы инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию Да, уже нашла пару вариантов :rolleyes: Но ваш, кстати, самый понятный :) Большое спасибо, сегодня попробую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Daria 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Rash, большое спасибо, все получилось :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 43 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба сначала читаем ну и там же есть еще ряд статей. потом задаем вопросы. сделано под STM32F207vet, fsmc модули у них вроде одинаковые с 407/ Добрый день! Вопрос к спецу по GUI. Как лучше реализовать курсоры в драйвере контроллера типа SSD1963? Аппаратной поддержки курсоров нет. Полную копию видеопамяти хранить негде (для 7 дюймового дисплея). Как лучше определить субфрейм и наиболее быстро прочитать его и инвертировать? Стоит ли заморачиваться с DMA для прорисовки курсора? Интересуют как мелкие курсоры, типа мышачьих, так и на весь экран, типа осциллографических- крестовые и линейные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться