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