Перейти к содержанию
    

Ну тогда уж, огласите пожалуйста, чтобы и я знал - чем SPI лучше чем 1-битный SDIO?

В общем случае несколько хуже: "честный" SD-контроллер может считать CRC.

В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC сам.

Ну, теоретическая скорость на SPI несколько ниже, если это принципиально (37.5 против 48МГц).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В данном конкретном случае может быть лучше, т.к. у F407 SDIO ломается при включении HW flow control, зато SPI умеет считать CRC

А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено?

И какая ему альтернатива, если он как в ф4 не работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А Вы не могли бы вкратце рассказать про этом HW flow (что это вообще я в курсе) в SDIO? КАк оно там устроено?

HW flow control просто отрубает клок, если контроллер по каким-либо причинам не может отдать или принять данные.

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

 

И какая ему альтернатива, если он как в ф4 не работает?

Никакой. На F4 придется или разгребать ошибки CRC, если управление потоком включено (что, понятно, не рекомендуется), или же

разгребать ошибки overrun / underrun. В любом случае некоторая головная боль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый вечер. Сегодня, наконец, спаяли модуль. пробую включить SSD1963 через FSMC.

Команда Display On проходит - по крайней мере, экран загорается. На экране цветной мусор из памяти. На остальные команды никакой реакции

Кто работал с SSD1963 - не подскажете, в какой последовательности подаются команды?

Я сначала делаю программный RES, потом Display On. Потом установка режима- AddrMode, Далее устанавливаю начальный и конечный адреса и формат пикселя. 0x2C и начинаю посылать массив данных.

Смотрю шину анализатором- картинки вроде соответствуют даташиту, данные отправляются, стробы есть. после команды 0x29 - DisplayOn, экран загорается. но больше никаких изменений.

TE у меня не выведен на внешний разъем модуля, поэтому приходится без него

 

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

 

И вопрос по формату данных - судя по даташиту, для SSD1963 нужно настроить FSMC на 8-битный режим, команды-то у него 8битные.

Это так или я ошибаюсь? :)

Кто работал с SSD1963 - отзовитесь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дарья, вы хоть бы поиском пользовались или доку читали бы

инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию

  // 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
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дарья, вы хоть бы поиском пользовались или доку читали бы

инициализация для дисплея (переводить в восьмитонный режим ничего не надо), из всех найденных вариантов написал свою версию

 

Да, уже нашла пару вариантов :rolleyes:

Но ваш, кстати, самый понятный :) Большое спасибо, сегодня попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сначала читаем

ну и там же есть еще ряд статей.

потом задаем вопросы. сделано под STM32F207vet, fsmc модули у них вроде одинаковые с 407/

Добрый день!

Вопрос к спецу по GUI. Как лучше реализовать курсоры в драйвере контроллера типа SSD1963? Аппаратной поддержки курсоров нет. Полную копию видеопамяти хранить негде (для 7 дюймового дисплея). Как лучше определить субфрейм и наиболее быстро прочитать его и инвертировать? Стоит ли заморачиваться с DMA для прорисовки курсора?

Интересуют как мелкие курсоры, типа мышачьих, так и на весь экран, типа осциллографических- крестовые и линейные.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...