реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Новый проект на основе прототипа с AM/DM37xx, OMAP-L138, Понимание настроек Linux, uboot, драйверов и всего остального...
Petrovitch
сообщение Feb 23 2014, 14:44
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-03-08
Пользователь №: 36 216



Прошу Вас по возможности вернуться к решению конкретных вопросов.

Процессоры, на которых я предполагаю реализацию проекта это либо L138, либо AM3715, либо DM3730.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 15:27
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Petrovitch @ Feb 23 2014, 18:44) *
Процессоры, на которых я предполагаю реализацию проекта это либо L138, либо AM3715, либо DM3730.

Учтите, что у L138 сильно урезан LCD-порт: 16 бит и ~40МГц. Для демонстрации видео он, прямо скажем, не очень годится.
Go to the top of the page
 
+Quote Post
SAURIS GmbH
сообщение Feb 23 2014, 19:14
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291



Посмотрите на наше готовое железо - http://sauris.de/ru/products/som/ и кит к нему. Там уже подняты в BSP все необходимые драйвера, в т.ч. шин I2C, UART-ов, есть примеры видеозахвата (на ките к навигационной версии установлен кодер ТВ сигнала, выдающий данные именно в виде BT.656, и сделан драйвер для него, захватывающий эти данные). На этом примере, конкретно, в рамках того линукса, что туда портирован, могу все по шагам объяснить, что и куда вставлять, и как добавлять/дописывать драйвера для своей новой периферии (u-boot, кстати, тут вообще не причем, у нас, к примеру, при загрузке с NAND она идет вообще мимо u-boot, без него, для ускорения процесса).

Например, чтобы "оживить" Ваш дисплей по I2C, надо написать небольшой драйверок LCD панели (drivers/video/omap2/displays), который заявить в системе I2C-клиентом, и вписать в файл инициализации платы (arc/arm/mach-omap2/boart-xxxxxx.c), на какой I2C он подключен с каким адресом, тогда по запросу на включение дисплея он выдаст все необходимые команды инициализации.

Ну и т.п., для конкретного ответа нужен конкретный вопрос - какая борда, какой BSP, куда оно подключено, что это за "оно", и т.д.

Сообщение отредактировал SAURIS GmbH - Feb 23 2014, 19:26


--------------------
Sauris GmbH technical support (web site: http://www.sauris.de)
XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 23 2014, 21:00
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(sasamy @ Feb 23 2014, 16:36) *
Как ни странно - но вы были единственный человек на кого у меня была надежда на этом вонючем форуме, сейчас просто идите ВСЕ нахер.


Совершенно напрасно. Проще относиться к другим участникам с уважением.
Go to the top of the page
 
+Quote Post
Petrovitch
сообщение Feb 24 2014, 08:18
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-03-08
Пользователь №: 36 216



Для SAURIS GmbH.

Платы интересные. Только вот выход на LCD через LVDS и никак иначе. Значит на базовой плате необходимо установить преобразователь LVDS->RGB888. На первых порах для макета может и сойдёт. Про загрузку без u-boot можно поподробнее? Какова технология создания драйвера I2C для моего случая?

Что касается L138, то для меня RGB565 вполне достаточно !
Go to the top of the page
 
+Quote Post
SAURIS GmbH
сообщение Feb 24 2014, 08:35
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291



Цитата(Petrovitch @ Feb 24 2014, 12:18) *
Платы интересные. Только вот выход на LCD через LVDS и никак иначе. Значит на базовой плате необходимо установить преобразователь LVDS->RGB888.


Это сделано ради экономии сигналов на разъеме, чтобы, в том числе, там хватило места и на интерфейс видеоввода, и на I2C, и на UART, и на параллельную шину GPMC. На ките, кстати, использована именно такая система, стоит десериализатор LVDS и с него идет параллельный RGB888 на дисплей, то есть, имея кит, и сняв дисплей, но оставив плату дисплея, уже имеете с нее сразу RGB888.

Цитата(Petrovitch @ Feb 24 2014, 12:18) *
Про загрузку без u-boot можно поподробнее?


Все очень просто - "sau-load", разновидность "x-loader"-а, умеет грузить сразу Linux, и если видит, что загрузка из NAND включена, и там есть образ, то это сразу и делает, а иначе - грузит u-boot

Цитата(Petrovitch @ Feb 24 2014, 12:18) *
Какова технология создания драйвера I2C для моего случая?


Ну я же вкратце выше уже писал... Берете исходники ядра линукса (с нашего сайта), накладываете на них все патчи для нашего железа, а дальше, взяв за основу, например, наш драйвер LCD-панели unipanel, добавляете в него функциональность, связанную с I2C шиной (написав ее, например, подглядев, как оно сделано в tca8418 или 24c512), и меняется процедура его регистрации в системе, он становится I2C-клиентом, соотв. его регистрация на I2C шине добавляется в board-saumodule-am3517.c, по аналогии, например, с ds1374 или 24c512 или аудиокодеком. Собственно, это все мы можем помочь сделать в рамках техподдержки наших модулей, включая написание драйверов (если перспективы работы с Вами покажутся интересными, то абсолютно бесплатно).

А может быть, драйвер подсветки (backlight) стоит переделать, он и так I2C уже... Короче, конкретика нужна тут.

Сообщение отредактировал SAURIS GmbH - Feb 24 2014, 08:58


--------------------
Sauris GmbH technical support (web site: http://www.sauris.de)
XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 25 2014, 03:14
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Petrovitch @ Feb 24 2014, 11:18) *
Какова технология создания драйвера I2C для моего случая?


Драйвер I2C уже есть, но драйвера дисплея может не быть. Драйвер дисплея использует драйвер I2C , чтобы управлять дисплеем. Он просто использует запись в драйвер I2C и чтение из него, чтобы взаимодействовать с дисплеем. Однако если вы найдете драйвер дисплея в ядре линукс, то он практически готов для ваших целей.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 25 2014, 06:13
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Tarbal @ Feb 25 2014, 07:14) *
Он просто использует запись в драйвер I2C и чтение из него, чтобы взаимодействовать с дисплеем.

Не использует он "запись в драйвер и чтение из него", тут Вам не виндовс. Он вызывает напрямую функции, экспортируемые драйвером, например i2c_smbus_write_word_data, i2c_smbus_read_i2c_block_data и т.п. (там их много разных для разных видов передач)
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 25 2014, 18:11
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(SM @ Feb 25 2014, 09:13) *
Не использует он "запись в драйвер и чтение из него", тут Вам не виндовс. Он вызывает напрямую функции, экспортируемые драйвером, например i2c_smbus_write_word_data, i2c_smbus_read_i2c_block_data и т.п. (там их много разных для разных видов передач)


Да вы правы. Не совсем драйвер.
Используется API I2C:

drivers/i2c/i2c-core.c
Код
/**
* i2c_master_send - issue a single I2C message in master transmit mode
* @client: Handle to slave device
* @buf: Data that will be written to the slave
* @count: How many bytes to write, must be less than 64k since msg.len is u16
*
* Returns negative errno, or else the number of bytes written.
*/
int i2c_master_send(struct i2c_client *client, const char *buf, int count)
{
        int ret;
        struct i2c_adapter *adap = client->adapter;
        struct i2c_msg msg;

        msg.addr = client->addr;
        msg.flags = client->flags & I2C_M_TEN;
        msg.len = count;
        msg.buf = (char *)buf;

        ret = i2c_transfer(adap, &msg, 1);

        /* If everything went ok (i.e. 1 msg transmitted), return #bytes
           transmitted, else error code. */
        return (ret == 1) ? count : ret;
}
EXPORT_SYMBOL(i2c_master_send);

/**
* i2c_master_recv - issue a single I2C message in master receive mode
* @client: Handle to slave device
* @buf: Where to store data read from slave
* @count: How many bytes to read, must be less than 64k since msg.len is u16
*
* Returns negative errno, or else the number of bytes read.
*/
int i2c_master_recv(struct i2c_client *client, char *buf, int count)
{
        struct i2c_adapter *adap = client->adapter;
        struct i2c_msg msg;
        int ret;

        msg.addr = client->addr;
        msg.flags = client->flags & I2C_M_TEN;
        msg.flags |= I2C_M_RD;
        msg.len = count;
        msg.buf = buf;

        ret = i2c_transfer(adap, &msg, 1);

        /* If everything went ok (i.e. 1 msg transmitted), return #bytes
           transmitted, else error code. */
        return (ret == 1) ? count : ret;
}
EXPORT_SYMBOL(i2c_master_recv);



Для доступа к видеокамере ov5640 по I2C:

drivers/media/video/mxc/capture/ov5640.c
Код
static s32 ov5640_write_reg(u16 reg, u8 val)
{
        u8 au8Buf[3] = {0};

        au8Buf[0] = reg >> 8;
        au8Buf[1] = reg & 0xff;
        au8Buf[2] = val;

        if (i2c_master_send(ov5640_data.i2c_client, au8Buf, 3) < 0) {
                pr_err("%s:write reg error:reg=%x,val=%x\n",
                        __func__, reg, val);
                return -1;
        }

        return 0;
}

static s32 ov5640_read_reg(u16 reg, u8 *val)
{
        u8 au8RegBuf[2] = {0};
        u8 u8RdVal = 0;

        au8RegBuf[0] = reg >> 8;
        au8RegBuf[1] = reg & 0xff;

        if (2 != i2c_master_send(ov5640_data.i2c_client, au8RegBuf, 2)) {
                pr_err("%s:write reg error:reg=%x\n",
                                __func__, reg);
                return -1;
        }
        if (1 != i2c_master_recv(ov5640_data.i2c_client, &u8RdVal, 1)) {
                pr_err("%s:read reg error:reg=%x,val=%x\n",
                                __func__, reg, u8RdVal);
                return -1;
        }

        *val = u8RdVal;

        return u8RdVal;
}


Сообщение отредактировал Tarbal - Feb 25 2014, 18:31
Go to the top of the page
 
+Quote Post
Petrovitch
сообщение Feb 27 2014, 11:45
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 25-03-08
Пользователь №: 36 216



Давайте рассмотрим пример с платой BeagleBone. На её разъёмы выведен видеопорт 24bit с сигналами синхронизации HSYNC, VSINC, DE, CLK и порт I2C. И всё это живёт своей жизнью. Мне необходимо подключить МОЙ дисплей, у которого все упомянутые сигналы имеются и для начала отображения по I2C необходимо отправить определённые коды настроек.
1. Как сделать, чтобы порт I2C считался принадлежащим дисплею? Писать свой драйвер? Тогда как? Какой для этого инструментарий необходим, откуда берётся, правила написания и т. д. Может где про это подробно написано, тогда прошу дать ссылки.
2. Можно посмотреть на проблему иначе. Пусть I2C так и остаётся самостоятельным портом, подключенным к дисплею. Об этом ведомо только разработчику. И просто отправлять коды по порту, зная для чего они предназначены. Как Вам такой вариант. Что для этого надо дополнительно сделать?

В любом случае дисплей должен что-либо отображать уже на этапе загрузки u-boot (до uImage!).

Готов экспериментировать на живой плате по шагам.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 27 2014, 13:15
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Petrovitch @ Feb 27 2014, 14:45) *
Давайте рассмотрим пример с платой BeagleBone. На её разъёмы выведен видеопорт 24bit с сигналами синхронизации HSYNC, VSINC, DE, CLK и порт I2C. И всё это живёт своей жизнью. Мне необходимо подключить МОЙ дисплей, у которого все упомянутые сигналы имеются и для начала отображения по I2C необходимо отправить определённые коды настроек.
1. Как сделать, чтобы порт I2C считался принадлежащим дисплею? Писать свой драйвер? Тогда как? Какой для этого инструментарий необходим, откуда берётся, правила написания и т. д. Может где про это подробно написано, тогда прошу дать ссылки.
2. Можно посмотреть на проблему иначе. Пусть I2C так и остаётся самостоятельным портом, подключенным к дисплею. Об этом ведомо только разработчику. И просто отправлять коды по порту, зная для чего они предназначены. Как Вам такой вариант. Что для этого надо дополнительно сделать?

В любом случае дисплей должен что-либо отображать уже на этапе загрузки u-boot (до uImage!).

Готов экспериментировать на живой плате по шагам.


Это делается по разному в зависимости от версии ядра.
Что говорит команда
uname -r


Драйвер I2C уже есть. Надо только создать устройство (это делается по разному в ядрах 2.6 и 3.Х ) и указать ему с каким адресом работать. Какой у вас адрес I2C?
Имейте ввиду, что в этом вопросе имеется неоднозначность. Производители дают эту информацию двумя разными способами. Дело в том, что адрес сдвинут на один бит влево. Некоторые дают его до сдвига, а некоторые два адреса чтения и записи. Это тот же 7-битный адрес, но уже сдвинутый и с битом чтения/записи в обоих состояниях.

Вам надо точно знать к какому из портов I2C вы подключены. Посмотрите по схеме если есть устройства подключенные к тому же порту.


Сообщение отредактировал Tarbal - Feb 27 2014, 13:13
Go to the top of the page
 
+Quote Post
Jury093
сообщение Feb 27 2014, 13:16
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Petrovitch @ Feb 27 2014, 15:45) *
В любом случае дисплей должен что-либо отображать уже на этапе загрузки u-boot (до uImage!).
Готов экспериментировать на живой плате по шагам.


допустим ваш дисплей подключен на интерфейс rgb24 для изображения и i2c для управления настройками..

попробуйте остановить загрузку юбута и наберите
Код
help

Код
i2c help

если на последнюю команду выдаст список подсказок, то в вашем юбуте есть поддержка i2c, тогда открываете исходники юбута и в любое понравившееся место вписываете команды для своего дисплея для настройки по i2c, потом ищите, как включить экран в процессе запуска юбута..

после загрузки линукса, можно утилитой i2cdetect убедится, что экран подключен на i2c шину, и утилитами i2cset, i2cget - порулить регистрами вашего экрана через i2c интерфейс без всяких драйверов..
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 27 2014, 13:30
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



В загрузчике это надо сделать отдельно. Фактически надо делать два раза (и по разному) в ядре и в загрузчике.
Для того чтобы работало в загрузчике вам надо подключиться к той же шине, к которой подключен PMIC. Я уже писал об этом.


Цитата(Jury093 @ Feb 27 2014, 16:16) *
после загрузки линукса, можно утилитой i2cdetect убедится, что экран подключен на i2c шину, и утилитами i2cset, i2cget - порулить регистрами вашего экрана через i2c интерфейс без всяких драйверов..

Утилит может не быть, но всегда сработает:
ls /sys/bus/i2c/devices/
покажет все устройства на шине и их адреса. Вот как это выглядит в моей системе.
0-0008 1-000a 1-0034 1-0054 2-0041 i2c-1
0-003c 1-0010 1-0039 2-0004 i2c-0 i2c-2

Три шины 0, 1 и 2. К ним подключены устройства.
Три шины 0, 1 и 2. К ним подключены устройства.
0-0008 означает , что к шине 0 подключено устройство с 7-битным адресом 0x08, чему соответствуют 8-битные адреса 0x11 и 0x10 для чтения и записи.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 27 2014, 13:36
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(Tarbal @ Feb 27 2014, 17:30) *
Утилит может не быть, но всегда сработает:
ls /sys/bus/i2c/devices/

Насколько я знаю, это покажет только устройства, для которых есть и загружены драйвера. Т.е. занятые адреса. Нет драйвера - нет записи. i2c подсистема самостоятельно не сканирует шину на предмет наличия устройств.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Feb 27 2014, 14:05
Сообщение #30


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Dron_Gus @ Feb 27 2014, 17:36) *
i2c подсистема самостоятельно не сканирует шину на предмет наличия устройств.

именно так..
посканить шины (если их несколько) можно внешней утилитой i2cdetect или самому написать детектилку..
из засад - некоторые чипы не откликаются по шине и с ними надо работать "в слепую"..
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 22:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016