Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройка LCD контроллера в AT91SAM9263
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
АДИКМ
Дисплей LQ043T3DX02 (Sony PSP) подключен к SAM9263. Нашел инициализацию (Линукс) для AVR32, в котором контроллер LCD вроде тот же самый -
Код
static struct fb_videomode __initdata lcd_modes[] = {
  {
        .name        = "LCD",
        .refresh    = 25,
        .xres        = 480,        .yres        = 272,
        .pixclock    = KHZ2PICOS(9072),
        .left_margin    = 2,        .right_margin    = 2,
        .upper_margin    = 2,        .lower_margin    = 2,
        .hsync_len    = 41,        .vsync_len    = 10,
        .sync        = 0,
        .vmode        = FB_VMODE_NONINTERLACED,
    }
};

static struct fb_monspecs __initdata xmedia_default_monspecs = {
    .manufacturer        = "BWA",
    .monitor        = "SHARP LQ043",
    .modedb            = lcd_modes,
    .modedb_len        = ARRAY_SIZE(lcd_modes),
    .hfmin            = 19948,
    .hfmax            = 31478,
    .vfmin            = 25,
    .vfmax            = 67,
    .dclkmax        = 28330000,
};

static struct atmel_lcdfb_info __initdata xmedia_lcdc_data = {
    .default_bpp        = 24,
    .default_dmacon        = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
    .default_lcdcon2    = (ATMEL_LCDC_DISTYPE_TFT
                   | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
                   | ATMEL_LCDC_MEMOR_BIG),
    .default_monspecs    = &xmedia_default_monspecs,
    .guard_time        = 2,
};


Разумеется он не работает (бегут горизонтальные полосы). В связи с этим хочется понять назначение pixclock и как оно расчитывается? Зачем нужны margin (left, right, upper, lower), что такое FB_VMODE_NONINTERLACED ? Ну и насчет dclkmax, hfmax, hfmin, vfmax, vfmin.

Буду весьма благодарен тому, кто просветит по данным вопросам.

PS. Сама панель рабочая, с другим видеоконтроллером работает нормально.
Alexandro
У Atmel есть дока по подключению http://www.atmel.com/dyn/resources/prod_do...nts/doc6300.pdf
aaarrr
Margin - это, как я понимаю, все-таки front- и back porch.
Вот это - ".refresh = 25" - какое-то фуфло, ибо по логике вещей должно быть 60.
С интерлейсом вроде бы все должно быть понятно.

Осциллографом посмотреть не пробовали?
at90
Немного OFF. А никто не знает название матрицы от SONY PSP Slim?
АДИКМ
Цитата(aaarrr @ Oct 19 2009, 15:49) *
Margin - это, как я понимаю, все-таки front- и back porch.
Вот это - ".refresh = 25" - какое-то фуфло, ибо по логике вещей должно быть 60.
С интерлейсом вроде бы все должно быть понятно.

Осциллографом посмотреть не пробовали?


Пробовал и 60 Герц, особо не меняется.
Именно сейчас осциллографа нет под рукой. Завтра буду им рассматривать.
Пока пытаюсь понять в чем может быть проблема.

Цитата(at90 @ Oct 19 2009, 16:13) *
Немного OFF. А никто не знает название матрицы от SONY PSP Slim?



LS0DZC0031
at90
Спасибо за инфу. У вас нету даташита на эту матрицу?
at90
вот случайно нашел на одном из форумов буржуйских... может чем то поможет

I solved the problem. It works with this settings in the icnova_base.c


CODE
Code:
static struct fb_videomode grasshopper_tft_modes[] = {
{

.name = "LQ043 @ 60",
.refresh = 60, /* refresh rate */
/* horizontal resolution */
.xres = 480,
.yres = 272, /* vertical resolution */
.pixclock = KHZ2PICOS(9000), /* pixel clock in kHz */
.left_margin = 2, /* h. front porch */
.right_margin = 2, /* h. back porch */
.upper_margin = 12, /* v. front porch */
.lower_margin = 2, /* v. back porch */

.hsync_len = 41, /* hsync length */
.vsync_len = 10, /* vsync lengt */
.sync = 0,
.vmode = FB_VMODE_NONINTERLACED,
},
};
static struct fb_monspecs __initdata grasshopper_default_monspecs = {
.manufacturer = "ATM", /* ATM = Atmel */
.monitor = "GENERIC", /* Generic type */
.modedb = grasshopper_tft_modes,
.modedb_len = ARRAY_SIZE(grasshopper_tft_modes),
.hfmin = 15000, /* doesn‘t affect the lcdc! */
.hfmax = 30000, /* doesn‘t affect the lcdc! */
.vfmin = 60, /* doesn‘t affect the lcdc! */
.vfmax = 700, /* doesn‘t affect the lcdc! */
.dclkmax = 90000000, /* doesn‘t affect the lcdc! */
};
struct atmel_lcdfb_info __initdata grasshopper_lcdc_data = {
.default_bpp = 24, /* Colur depth */
.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
| ATMEL_LCDC_MEMOR_BIG),
.default_monspecs = &grasshopper_default_monspecs,
.guard_time = 2,
};


http://forum.embedded-projects.net/viewtopic.php?id=543
АДИКМ
Цитата(at90 @ Oct 20 2009, 10:33) *
...



Спасибо, это я тоже видел. Сегодня посижу с осциллографом.

Насчет даташита на слимовый ЖКИ - у меня его нет, честно говоря не искал. Думаю, что должен быть в инете.
at90
LS0DZC0031 вроде с виду такая как и LQ043. А меня инетересует матрица которая очень тонкая и без металической рамки.....
http://www.focalprice.com/GS136X/LCD_Repla..._2000_Slim.html
АДИКМ
Цитата(at90 @ Oct 20 2009, 11:09) *
LS0DZC0031 вроде с виду такая как и LQ043. А меня инетересует матрица которая очень тонкая и без металической рамки.....
http://www.focalprice.com/GS136X/LCD_Repla..._2000_Slim.html


Это экран от psp2, может вы ищете от psp3 ?
at90
Да его ищу... Вы пробовали его запускать?
АДИКМ
Цитата(at90 @ Oct 20 2009, 15:21) *
Да его ищу... Вы пробовали его запускать?

Нет, я пробую экран от самой первой PSP.
Jury093
Судя по всему, речь идет о драйвере фреймбуфера. Я бы посоветовал пристально посмотреть на функции типа xxx_probe xxx_init где проводится начальная загрузка регистров контроллера LCD перед его запуском.
0x800 LCD Control Register 1 LCDCON1
0x804 LCD Control Register 2 LCDCON2
0x808 LCD Timing Register 1 LCDTIM1
0x80C LCD Timing Register 2 LCDTIM2

эти регистры отвечают за PixelClock, синхру, длительности и полярности сигналов. Проверить их значения на соответствие времянки LCD. Если все будет соответствовать, то появится стабильное изображение, возможно оно будет смещено - подстройка в тех же регистрах.
цифры из struct fb_videomode __initdata lcd_modes - (как я понял) используются при запросе программами типа fbset xvidtune у драйвера fb - "а ты кто такой и что умеешь?".

ЗЫ Все вышеизложенное написано на основе опыта подстройки драйвера FB на w90p950 и TFT LQ064 Sharp. Ну и бегло глянул pdf на sam9263

Цитата(АДИКМ @ Oct 19 2009, 15:00) *
Дисплей LQ043T3DX02 (Sony PSP) подключен к SAM9263. Нашел инициализацию (Линукс) для AVR32, в котором контроллер LCD вроде тот же самый -
Код
static struct fb_videomode __initdata lcd_modes[] = {
  {
        .name        = "LCD",
        .refresh    = 25,
        .xres        = 480,        .yres        = 272,


Разумеется он не работает (бегут горизонтальные полосы). В связи с этим хочется понять назначение pixclock и как оно расчитывается? Зачем нужны margin (left, right, upper, lower), что такое FB_VMODE_NONINTERLACED ? Ну и насчет dclkmax, hfmax, hfmin, vfmax, vfmin.

Буду весьма благодарен тому, кто просветит по данным вопросам.

PS. Сама панель рабочая, с другим видеоконтроллером работает нормально.
Леший
Вот мой реально работающий код инициализации LCD:

Код
diff -ruN linux-2.6.30.5M-clean/arch/arm/mach-at91/board-sam9263ek.c linux-2.6.30.5M/arch/arm/mach-at91/board-sam9263ek.c
--- linux-2.6.30.5M-clean/arch/arm/mach-at91/board-sam9263ek.c
+++ linux-2.6.30.5M/arch/arm/mach-at91/board-sam9263ek.c    
@@ -258,44 +259,46 @@


#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
static struct fb_videomode at91_tft_vga_modes[] = {
    {
-        .name        = "TX09D50VM1CCA @ 60",
+        .name        = "LQ043T1DG01 @ 60",
        .refresh    = 60,
-        .xres        = 240,        .yres        = 320,
-        .pixclock    = KHZ2PICOS(4965),
+        .xres        = 480,        .yres        = 272,
+        .pixclock    = KHZ2PICOS(9009), //(480+41+2+2)*(272+10+2+2)*60 = 9009000

-        .left_margin    = 1,        .right_margin    = 33,
-        .upper_margin    = 1,        .lower_margin    = 0,
-        .hsync_len    = 5,        .vsync_len    = 1,
+        .left_margin    = 2,        .right_margin    = 2,
+        .upper_margin    = 12,        .lower_margin    = 2,
+        .hsync_len    = 41,        .vsync_len    = 10,

-        .sync        = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        /*.sync        = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,*/
        .vmode        = FB_VMODE_NONINTERLACED,
    },
};

static struct fb_monspecs at91fb_default_monspecs = {
-    .manufacturer    = "HIT",
-    .monitor    = "TX09D70VM1CCA",
+    .manufacturer    = "SHA",
+    .monitor    = "LQ043T1DG01",

    .modedb        = at91_tft_vga_modes,
    .modedb_len    = ARRAY_SIZE(at91_tft_vga_modes),
-    .hfmin        = 15000,
-    .hfmax        = 64000,
+    .hfmin        = 64000,
+    .hfmax        = 80000,
    .vfmin        = 50,
-    .vfmax        = 150,
+    .vfmax        = 200,
};
-
+
#define AT91SAM9263_DEFAULT_LCDCON2     (ATMEL_LCDC_MEMOR_LITTLE \
                    | ATMEL_LCDC_DISTYPE_TFT \
                    | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.