|
Новый проект на основе прототипа с AM/DM37xx, OMAP-L138, Понимание настроек Linux, uboot, драйверов и всего остального... |
|
|
|
Feb 22 2014, 16:17
|
Участник

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

|
Здравствуйте, уважаемые участники форума!
У меня имеется новый проект, в реализации которого есть большие затруднения. Некая система должна получать на входе видеосигнал по протоколу ВТ.656 (8 bin parallel + clk (27 MHz)). С полученной картинкой необходимо производить различные действия по изменению размеров, регулировкой яркости и т.д. с наложением поверх картинки простой графики. Далее, необходимо передать результирующее изображение на OLED (800х600) либо по тому же протоколу ВТ.656, либо RGB888. Грузиться система должна с FLASH. Это присказка.
На начальном этапе хотелось бы поэкспериментировать на готовом железе, максимально приближенным по архитектуре и возможностям для решения задачи. Речь идёт конечно же об оценочных платах от TI, Embest, LogicPD, CALIXTO, MENTOR. Во всех платах имеются видеовходы, выходы на LCD и кнопки. Но есть проблемы. Эти платы спроектированы под определённую периферию, немного не похожую по интерфейсу с моей. Управление камерой производится по UART, а управление дисплеем по I2C.
В частности, например, чтобы заработал дисплей, необходимо отправить ему серию кодов инициализации по I2C, иначе он не включится. На каком этапе производится инициализация? Я полагаю инициализацией должен заниматься u-boot. Тогда как его настроить?
Прошу знающих людей объяснить мне технологию адаптации нового оборудования в Linux от и до. Что прочитать и т. д. Хочется во всём разобраться самому. Ну и заодно может подскажите на каком конструкторе из выше названных лучше пробовать (с доработками или без).
|
|
|
|
|
Feb 22 2014, 16:47
|
Знающий
   
Группа: Свой
Сообщений: 995
Регистрация: 3-06-05
Пользователь №: 5 713

|
Цитата(Petrovitch @ Feb 22 2014, 19:17)  В частности, например, чтобы заработал дисплей, необходимо отправить ему серию кодов инициализации по I2C, иначе он не включится. На каком этапе производится инициализация? Я полагаю инициализацией должен заниматься u-boot. Тогда как его настроить?
Прошу знающих людей объяснить мне технологию адаптации нового оборудования в Linux от и до. Что прочитать и т. д. Хочется во всём разобраться самому. Ну и заодно может подскажите на каком конструкторе из выше названных лучше пробовать (с доработками или без). Первое требование для разработок "с нуля" при отсутствии опыта - качественная поддержка. Тут техас, пожалуй, вне конкуренции. Для заявленных параметров TMS320DM36x - оптимальный процессор. Полный перечень SDK смотреть здесь - http://www.ti.com/lsds/ti/dsp/video_proces...oolsw.page#kits, подходящая плата - http://www.ti.com/tool/TMDXEVM365. Софт лежит здесь - http://software-dl.ti.com/dsps/dsps_public.../index_FDS.html.
|
|
|
|
|
Feb 23 2014, 07:43
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Petrovitch @ Feb 22 2014, 20:17)  В частности, например, чтобы заработал дисплей, необходимо отправить ему серию кодов инициализации по I2C, иначе он не включится. На каком этапе производится инициализация? Я полагаю инициализацией должен заниматься u-boot. Тогда как его настроить? можно везде, от вас зависит - где проще там и делайте если нет дополнительных условий, например если надо включать чем раньше тем лучше. Цитата Прошу знающих людей объяснить мне технологию адаптации нового оборудования в Linux от и до. Вы даже не представляете что просите - насколько это обширная тема. Разбираться придется с конкретным процессором - насколько понимаю работы по созданию common display framework (панели - часть этого фреймворка) до сих пор не завершены. Например для omap-ов тут посмотрите http://lxr.free-electrons.com/source/drive...2/displays-new/То что вам нужно Цитата Некая система должна получать на входе видеосигнал по протоколу ВТ.656 (8 bin parallel + clk (27 MHz)). С полученной картинкой необходимо производить различные действия по изменению размеров, регулировкой яркости и т.д. с наложением поверх картинки простой графики. Далее, необходимо передать результирующее изображение на OLED (800х600) либо по тому же протоколу ВТ.656, либо RGB888. достаточно просто (для того кто разбирается) сделать на imx5/6 в IPU без лишней суеты с DSP, разве что в Linux нет готового контроля за CSC чтобы яркостью упралять, а новый ioctl слепить чтобы матрицу коэффициентов новую загружать никакого труда не составит.
|
|
|
|
|
Feb 23 2014, 11:17
|
Участник

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

|
Как промежуточный этап для решения задачи хотелось бы использовать готовое "железо" от Embest, LigicPD, CALIXTO и т.д. и ПО, поставляемое вместе с железом. Но ни железо, ни ПО сразу использовать для своей задачи нельзя. Реализация алгоритмов видеообработки пока не рассматриваю, только настройку корректной работы системы.
1. Что необходимо сделать для настройки портов видеовхода и видеовыхода для приёма и передачи сигналов по BT.656?
2. На каком этапе и как производится передача кодов инициализации, чтобы заработали камера и дисплей? Уже на этапе загрузки u-boot дисплей должен иметь возможность отображать информацию. А если это сделать позднее..?
3. На каком конструкторе по Вашему мнению лучше отлаживаться?
4. Как организовать рабочее место с ПО. Что ставить на хосте?
5. Что писать в u-boot, если требуемая мне конфигурация прописывается там и что писать в Linux, если сам Linux (ядро) должен производить отправку кодов инициализации ? Правила написания, компиляции, прошивки.
|
|
|
|
|
Feb 23 2014, 11:36
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Petrovitch @ Feb 23 2014, 15:17)  Как промежуточный этап для решения задачи хотелось бы использовать готовое "железо" от Embest, LigicPD, CALIXTO и т.д. и ПО, поставляемое вместе с железом. Но ни железо, ни ПО сразу использовать для своей задачи нельзя. Это все промежуточное звено - не самое надежное - пофигу кого выберете, главное там процессор и то что разведено Цитата 1. Что необходимо сделать для настройки портов видеовхода и видеовыхода для приёма и передачи сигналов по BT.656? Зависит от процессора Цитата 2. На каком этапе и как производится передача кодов инициализации, чтобы заработали камера и дисплей? Уже на этапе загрузки u-boot дисплей должен иметь возможность отображать информацию. А если это сделать позднее..? ядро Linux - наилучший вариант, какой смысл делать что-то в загрузчике (!), его смысл только базовая конфигурация, то что делают с ним сейчас производители конкретных устройств это просто шиза Цитата 3. На каком конструкторе по Вашему мнению лучше отлаживаться? если отлаживать надо уже загрузоный код - то нахер нужны такие производители Цитата 4. Как организовать рабочее место с ПО. Что ставить на хосте? Linux без вариантов - лучше на данный момент ничего просто не существует, дистрибутив роли особой не играет, но проще будет с Ubuntu Цитата 5. Что писать в u-boot, если требуемая мне конфигурация прописывается там и что писать в Linux, если сам Linux (ядро) должен производить отправку кодов инициализации ? Правила написания, компиляции, прошивки. см. ссылку на код для omap - для других процессоров аналогично, для убута см. biard-файлы для конкретного процессора
|
|
|
|
|
Feb 23 2014, 12:11
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(aaarrr @ Feb 23 2014, 15:54)  Есть смысл: не любят, например, пользователи черный экран при включении. А до его инициализации при традиционном раскладе дело доходит через секунды. Врвнье - могу факты привести http://www.starterkit.ru/html/index.php?na...amp;num=2#21611драйверы убута - это вообще по большей части стрип из линукса. Для ясности - я не против чего-то - я за объективность.
|
|
|
|
|
Feb 23 2014, 13:16
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(aaarrr @ Feb 23 2014, 17:08)  Потрудитесь выражения выбирать, не в кабаке. Да не вопрос - потрудитесь привести опровержение, я же не против - мы не в кабаке Цитата Сказано было - при традиционном раскладе. традиционный расклад - для всех, чаще всего для лохов как ни странно
|
|
|
|
|
Feb 23 2014, 13:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sasamy @ Feb 23 2014, 17:16)  традиционный расклад - для всех, чаще всего для лохов как ни странно Все лохи, а я Д'Артаньян? Цитата(sasamy @ Feb 23 2014, 17:16)  Да не вопрос - потрудитесь привести опровержение, я же не против - мы не в кабаке Спасибо, дружок, но я лучше бисер поберегу.
|
|
|
|
|
Feb 23 2014, 13:23
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(aaarrr @ Feb 23 2014, 17:19)  Все лохи, а я Д'Артаньян? Нет, лохи есть - никуда от них не денешься, я не думал раньше что вы настолько лошара тупой Цитата Спасибо, дружок, но я лучше бисер поберегу. для себя чтоли ?
|
|
|
|
|
Feb 23 2014, 13:26
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sasamy @ Feb 23 2014, 17:23)  Нет, лохи есть - никуда от них не денешься, я не думал раньше что вы настолько лошара тупой Я просто оставлю это на память. Цитата(sasamy @ Feb 23 2014, 17:23)  для себя чтоли ? Конечно  Согласно поговорке его именно что стоит оставить себе.
|
|
|
|
|
Feb 23 2014, 14:44
|
Участник

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

|
Прошу Вас по возможности вернуться к решению конкретных вопросов.
Процессоры, на которых я предполагаю реализацию проекта это либо L138, либо AM3715, либо DM3730.
|
|
|
|
|
Feb 23 2014, 19:14
|

Знающий
   
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Feb 24 2014, 08:18
|
Участник

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

|
Для SAURIS GmbH.
Платы интересные. Только вот выход на LCD через LVDS и никак иначе. Значит на базовой плате необходимо установить преобразователь LVDS->RGB888. На первых порах для макета может и сойдёт. Про загрузку без u-boot можно поподробнее? Какова технология создания драйвера I2C для моего случая?
Что касается L138, то для меня RGB565 вполне достаточно !
|
|
|
|
|
Feb 24 2014, 08:35
|

Знающий
   
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Feb 25 2014, 18:11
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Feb 27 2014, 11:45
|
Участник

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

|
Давайте рассмотрим пример с платой BeagleBone. На её разъёмы выведен видеопорт 24bit с сигналами синхронизации HSYNC, VSINC, DE, CLK и порт I2C. И всё это живёт своей жизнью. Мне необходимо подключить МОЙ дисплей, у которого все упомянутые сигналы имеются и для начала отображения по I2C необходимо отправить определённые коды настроек. 1. Как сделать, чтобы порт I2C считался принадлежащим дисплею? Писать свой драйвер? Тогда как? Какой для этого инструментарий необходим, откуда берётся, правила написания и т. д. Может где про это подробно написано, тогда прошу дать ссылки. 2. Можно посмотреть на проблему иначе. Пусть I2C так и остаётся самостоятельным портом, подключенным к дисплею. Об этом ведомо только разработчику. И просто отправлять коды по порту, зная для чего они предназначены. Как Вам такой вариант. Что для этого надо дополнительно сделать?
В любом случае дисплей должен что-либо отображать уже на этапе загрузки u-boot (до uImage!).
Готов экспериментировать на живой плате по шагам.
|
|
|
|
|
Feb 27 2014, 13:15
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Feb 27 2014, 13:16
|
Знающий
   
Группа: Участник
Сообщений: 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 интерфейс без всяких драйверов..
|
|
|
|
|
Feb 27 2014, 13:30
|
Профессионал
    
Группа: Свой
Сообщений: 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 для чтения и записи.
|
|
|
|
|
Feb 27 2014, 14:05
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(Dron_Gus @ Feb 27 2014, 17:36)  i2c подсистема самостоятельно не сканирует шину на предмет наличия устройств. именно так.. посканить шины (если их несколько) можно внешней утилитой i2cdetect или самому написать детектилку.. из засад - некоторые чипы не откликаются по шине и с ними надо работать "в слепую"..
|
|
|
|
|
Feb 28 2014, 04:13
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
Цитата(Petrovitch @ Feb 27 2014, 14:45)  Давайте рассмотрим пример с платой BeagleBone. На её разъёмы выведен видеопорт 24bit с сигналами синхронизации HSYNC, VSINC, DE, CLK и порт I2C. И всё это живёт своей жизнью. Мне необходимо подключить МОЙ дисплей, у которого все упомянутые сигналы имеются и для начала отображения по I2C необходимо отправить определённые коды настроек. 1. Как сделать, чтобы порт I2C считался принадлежащим дисплею? Писать свой драйвер? Тогда как? Какой для этого инструментарий необходим, откуда берётся, правила написания и т. д. Может где про это подробно написано, тогда прошу дать ссылки. 2. Можно посмотреть на проблему иначе. Пусть I2C так и остаётся самостоятельным портом, подключенным к дисплею. Об этом ведомо только разработчику. И просто отправлять коды по порту, зная для чего они предназначены. Как Вам такой вариант. Что для этого надо дополнительно сделать?
В любом случае дисплей должен что-либо отображать уже на этапе загрузки u-boot (до uImage!).
Готов экспериментировать на живой плате по шагам. раз вы только начинаете со всем этим разбираться , может лучше взять другой дисплей у которого rgb интерфейс единственный ? ничего не нужно ни куда писать "для начала изображения" , подключите к боне без всякого i2c . дисплев таких большинство , и они ничего не стоят по сравнению с теми усилиями которые вы затратите не зная что делать наверняка. ну разве что в учебных целях задача как вы поставили хороша.
|
|
|
|
|
Feb 28 2014, 13:14
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Dron_Gus @ Feb 27 2014, 16:36)  Насколько я знаю, это покажет только устройства, для которых есть и загружены драйвера. Т.е. занятые адреса. Нет драйвера - нет записи. i2c подсистема самостоятельно не сканирует шину на предмет наличия устройств. Я дополнил ответ про использование i2cdetect, которое тоже не увидит устройства, которое не добавлено в систему. Поправлю вас. Драйвер уже есть, но этого мало. Надо объявить устройство. в 2.6 я хорошо знаю как это делается, в 3.Х надо в дереве устройств описывать. С этим я плохо знаком, но поскольку там описано можество подобных устройств, то можно подсмотреть. Да и документы есть. В ядре Линукса есть в том числе два списка на каждую шину. В одном списке зарегистрированные драйвера, а во втором зарегистрированные устройства. Для каждого драйвера и устройства есть "пароль", который обязан совпасть. Именно по совпадению пароля и только по нему устанавливается драйвер для устройства. В том списке, что я показал находятся устройства для которыз использованы только два драйвера. Один для конкретных устройств например 2-0041, что означает, что на i2c шине 2 устройство с адресом 0х41 и второй i2c-1, означающий i2c шина номер 1. Кстати если устройство только подключено к шине и не объявлено в дереве устройств(3.х), к нему можно легко подсоединиться при помощи второго типа драйвера. Если интересно, то могу рассказать как. Так вот наша ситуация это когда драйвер в списке драйверов есть, а устройства в списке устройств нет. Цитата(AndrejM @ Feb 28 2014, 07:13)  раз вы только начинаете со всем этим разбираться , может лучше взять другой дисплей у которого rgb интерфейс единственный ? ничего не нужно ни куда писать "для начала изображения" , подключите к боне без всякого i2c . дисплев таких большинство , и они ничего не стоят по сравнению с теми усилиями которые вы затратите не зная что делать наверняка. ну разве что в учебных целях задача как вы поставили хороша. Я подключал к близкому процессору дисплей по RFBI. Там тоже надо было много писать для конфигурации. I2C устройство подключить очень легко. Проблемы будут попозже, но и они разрешимы.
|
|
|
|
|
Feb 28 2014, 13:34
|
Участник

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

|
Цитата(AndrejM @ Feb 28 2014, 08:13)  раз вы только начинаете со всем этим разбираться , может лучше взять другой дисплей у которого rgb интерфейс единственный ? ничего не нужно ни куда писать "для начала изображения" , подключите к боне без всякого i2c . дисплев таких большинство , и они ничего не стоят по сравнению с теми усилиями которые вы затратите не зная что делать наверняка. ну разве что в учебных целях задача как вы поставили хороша. Да! Я только начинаю в этом разбираться! Но такой дисплей необходим для решения конкретной задачи.
|
|
|
|
|
Feb 28 2014, 16:22
|
Участник

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

|
Цитата(SM @ Feb 28 2014, 18:25)  В загрузчике это вообще не надо никак делать, загрузчику дисплей не нужен, как и его инициализация.
А порулить I2C-устройством можно и из юзерспейса для начала, используя i2c /dev interface (соотв. докуменатция живет в i2c/dev-interface), писать kernel driver можно уже потом, когда понимание придет, что именно писать. Если можно - поподробнее пожалуйста об этом. А вообще давайте представим, что имеется BeagleBone (как прототип конечного устройства), подключенный к хосту через USB и Ethernet. С хоста мы можем увидеть процесс загрузки ВВ и наверное порулить I2C, и остановить загрузку после u-boot и ещё много чего, Но мы НИЧЕГО не увидим на OLED-е пока не отправим на него по I2C набор кодов настройки отображения. Что же тогда делать если хоста не было бы?! На целевой системе он мне не нужен!!! Тогда на каком этапе "прикручивать" драйвер и как его писать? На этапе отладки ПО наверное как можно раньше, а на целевой системе пользователю точно не нужно видеть процесс загрузки, ему и заставки хватит!
|
|
|
|
|
Feb 28 2014, 17:09
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
драйвер пишется и прикручивается при помощи кросс-компиляции на рабочей линукс-машине. Обычном x86 компе. Далее - собирается линукс, делается ядро, корневая ФС, и т.д., все это делается на PC, далее заливается каким то образом (при помощи загрузки платы с СД-карты и последующего копирования в NAND, с изернета, т.п.) в NAND флеш, затем - устройство включается, грузится с нанд и работает само по себе. Без хоста тут - совсем никак. По любому надо как-то делать начальное прошивание платы, и делается это через терминал, как либо подключенный, чаще всего через отладочный COM-порт, туда же ядро и приложения все свои консольные сообщения сыпят. То есть необходимо иметь отладочный КОМ-порт, и возможность загрузки пустой платы либо с SD-карты, либо с изернета, либо еще как.
Дисплей устройства нужен ТОЛЬКО для отображения информации конечного приложения, работающего с дисплеем. Все остальное работает или само по себе, или через ком-порт.
|
|
|
|
|
Mar 1 2014, 22:19
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(Tarbal @ Mar 2 2014, 01:32)  А именно смотрит в той директории, что я указал. не знаю, что там за "директории", но просто и без затей: Код root@arm9260:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: 70 -- -- -- -- -- -- -- на 0x68 rtc часы.. (UU означает, что адрес под контролем драйвера) на 0x70 atmega8
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|