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

 
 
> Новый проект на основе прототипа с AM/DM37xx, OMAP-L138, Понимание настроек Linux, uboot, драйверов и всего остального...
Petrovitch
сообщение Feb 22 2014, 16:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 от и до. Что прочитать и т. д. Хочется во всём разобраться самому. Ну и заодно может подскажите на каком конструкторе из выше названных лучше пробовать (с доработками или без).
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 44)
HardJoker
сообщение Feb 22 2014, 16:47
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 22 2014, 21:16
Сообщение #3


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

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



u-boot настраивает много чего. Однако в той версии, что я работал только один контроллер i2c доступен. Тот к которому подключен PMIC подключите свой дисплей к нему или настраивайте уже в ядре Линукса.
Мы вам безусловно поможем, но вы обдумайте свою проблему и задайте вопросы поконкретнее.
Вы имеете последовательность команд для записи их в ваш дисплей, чтобы правильно его настроить?

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

Это все в отрыве от того, что надо для обработки видео. Вам надо иметь DSP или какое другое железо для обработки видео.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 07:43
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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 слепить чтобы матрицу коэффициентов новую загружать никакого труда не составит.
Go to the top of the page
 
+Quote Post
Petrovitch
сообщение Feb 23 2014, 11:17
Сообщение #5


Участник
*

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



Как промежуточный этап для решения задачи хотелось бы использовать готовое "железо" от Embest, LigicPD, CALIXTO и т.д. и ПО, поставляемое вместе с железом. Но ни железо, ни ПО сразу использовать для своей задачи нельзя.
Реализация алгоритмов видеообработки пока не рассматриваю, только настройку корректной работы системы.

1. Что необходимо сделать для настройки портов видеовхода и видеовыхода для приёма и передачи сигналов по BT.656?

2. На каком этапе и как производится передача кодов инициализации, чтобы заработали камера и дисплей? Уже на этапе загрузки u-boot дисплей должен иметь возможность отображать информацию. А если это сделать позднее..?

3. На каком конструкторе по Вашему мнению лучше отлаживаться?

4. Как организовать рабочее место с ПО. Что ставить на хосте?

5. Что писать в u-boot, если требуемая мне конфигурация прописывается там и что писать в Linux, если сам Linux (ядро) должен производить отправку кодов инициализации ? Правила написания, компиляции, прошивки.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 11:36
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 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-файлы для конкретного процессора
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 11:54
Сообщение #7


Гуру
******

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



Цитата(sasamy @ Feb 23 2014, 15:36) *
ядро Linux - наилучший вариант, какой смысл делать что-то в загрузчике (!), его смысл только базовая конфигурация, то что делают с ним сейчас производители конкретных устройств это просто шиза

Есть смысл: не любят, например, пользователи черный экран при включении. А до его инициализации при традиционном раскладе дело доходит через секунды.
Но это касается конечного продукта, конечно, а не отладочной платформы.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 12:11
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(aaarrr @ Feb 23 2014, 15:54) *
Есть смысл: не любят, например, пользователи черный экран при включении. А до его инициализации при традиционном раскладе дело доходит через секунды.


Врвнье - могу факты привести

http://www.starterkit.ru/html/index.php?na...amp;num=2#21611

драйверы убута - это вообще по большей части стрип из линукса. Для ясности - я не против чего-то - я за объективность.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 13:08
Сообщение #9


Гуру
******

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



Цитата(sasamy @ Feb 23 2014, 16:11) *
Врвнье - могу факты привести

Потрудитесь выражения выбирать, не в кабаке.

Сказано было - при традиционном раскладе. Тюнинг ядра и старт без u-boot'а со скоростного носителя к нему не относятся.
На mx28 делал лого в u-boot'е - получается меньше 0.2 с от включения.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 13:16
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(aaarrr @ Feb 23 2014, 17:08) *
Потрудитесь выражения выбирать, не в кабаке.


Да не вопрос - потрудитесь привести опровержение, я же не против - мы не в кабаке

Цитата
Сказано было - при традиционном раскладе.


традиционный расклад - для всех, чаще всего для лохов как ни странно
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 13:19
Сообщение #11


Гуру
******

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



Цитата(sasamy @ Feb 23 2014, 17:16) *
традиционный расклад - для всех, чаще всего для лохов как ни странно

Все лохи, а я Д'Артаньян?

Цитата(sasamy @ Feb 23 2014, 17:16) *
Да не вопрос - потрудитесь привести опровержение, я же не против - мы не в кабаке

Спасибо, дружок, но я лучше бисер поберегу.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 13:23
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(aaarrr @ Feb 23 2014, 17:19) *
Все лохи, а я Д'Артаньян?



Нет, лохи есть - никуда от них не денешься, я не думал раньше что вы настолько лошара тупой

Цитата
Спасибо, дружок, но я лучше бисер поберегу.


для себя чтоли ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 13:26
Сообщение #13


Гуру
******

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



Цитата(sasamy @ Feb 23 2014, 17:23) *
Нет, лохи есть - никуда от них не денешься, я не думал раньше что вы настолько лошара тупой

Я просто оставлю это на память.

Цитата(sasamy @ Feb 23 2014, 17:23) *
для себя чтоли ?

Конечно sm.gif Согласно поговорке его именно что стоит оставить себе.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Feb 23 2014, 13:36
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



[quote name='aaarrr' date='Feb 23 2014, 17:26' post='1238690']
Я просто оставлю это на память.
[quote/]

Как ни странно - но вы были единственный человек на кого у меня была надежда на этом вонючем форуме, сейчас просто идите ВСЕ нахер.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 23 2014, 13:38
Сообщение #15


Гуру
******

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



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

Зачем же так? Я, кстати, очень уважаю Вас как профессионала. Но вот манера общения иной раз раздражает.
Go to the top of the page
 
+Quote Post
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
AndrejM
сообщение Feb 28 2014, 04:13
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 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 . дисплев таких большинство , и они ничего не стоят по сравнению с теми усилиями которые вы затратите не зная что делать наверняка. ну разве что в учебных целях задача как вы поставили хороша.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 28 2014, 13:14
Сообщение #32


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

Группа: Свой
Сообщений: 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 устройство подключить очень легко. Проблемы будут попозже, но и они разрешимы.
Go to the top of the page
 
+Quote Post
Petrovitch
сообщение Feb 28 2014, 13:34
Сообщение #33


Участник
*

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



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



Да! Я только начинаю в этом разбираться! Но такой дисплей необходим для решения конкретной задачи.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 28 2014, 14:25
Сообщение #34


Гуру
******

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



Цитата(Tarbal @ Feb 27 2014, 17:30) *
В загрузчике это надо сделать отдельно.


В загрузчике это вообще не надо никак делать, загрузчику дисплей не нужен, как и его инициализация.

А порулить I2C-устройством можно и из юзерспейса для начала, используя i2c /dev interface (соотв. докуменатция живет в i2c/dev-interface), писать kernel driver можно уже потом, когда понимание придет, что именно писать.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 28 2014, 15:45
Сообщение #35


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

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



Цитата(SM @ Feb 28 2014, 17:25) *
В загрузчике это вообще не надо никак делать, загрузчику дисплей не нужен, как и его инициализация.

А порулить I2C-устройством можно и из юзерспейса для начала, используя i2c /dev interface (соотв. докуменатция живет в i2c/dev-interface), писать kernel driver можно уже потом, когда понимание придет, что именно писать.


резонно
Go to the top of the page
 
+Quote Post
Petrovitch
сообщение Feb 28 2014, 16:22
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 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 набор кодов настройки отображения. Что же тогда делать если хоста не было бы?! На целевой системе он мне не нужен!!!

Тогда на каком этапе "прикручивать" драйвер и как его писать? На этапе отладки ПО наверное как можно раньше, а на целевой системе пользователю точно не нужно видеть процесс загрузки, ему и заставки хватит!
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 28 2014, 17:09
Сообщение #37


Гуру
******

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



драйвер пишется и прикручивается при помощи кросс-компиляции на рабочей линукс-машине. Обычном x86 компе. Далее - собирается линукс, делается ядро, корневая ФС, и т.д., все это делается на PC, далее заливается каким то образом (при помощи загрузки платы с СД-карты и последующего копирования в NAND, с изернета, т.п.) в NAND флеш, затем - устройство включается, грузится с нанд и работает само по себе. Без хоста тут - совсем никак. По любому надо как-то делать начальное прошивание платы, и делается это через терминал, как либо подключенный, чаще всего через отладочный COM-порт, туда же ядро и приложения все свои консольные сообщения сыпят. То есть необходимо иметь отладочный КОМ-порт, и возможность загрузки пустой платы либо с SD-карты, либо с изернета, либо еще как.

Дисплей устройства нужен ТОЛЬКО для отображения информации конечного приложения, работающего с дисплеем. Все остальное работает или само по себе, или через ком-порт.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 28 2014, 17:21
Сообщение #38


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

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



Как без регистарции устройства иметь к нему доступ из пространства пользователя.

1. Подсоединяете ваше устройство к одной из шин. скажем к шине N, где N 0, 1, 2 ... сколько у вас шин имеется в налиции.
2. Берете пример из документации. Он находится в коде ядра:
Documentation/i2c/dev-interface
Копируете код себе, изменяете адрес устройства и номер шины. Вы можете написать программу, которая может добираться до вашего устройства даже без регистрации его в кернеле.


adapter_nr - I2C bus. то самое число N

I2C_SLAVE - your devise's 7-bit address

Сообщение отредактировал Tarbal - Feb 28 2014, 17:26
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Mar 1 2014, 17:02
Сообщение #39


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

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



Цитата(Tarbal @ Feb 28 2014, 17:14) *
Я дополнил ответ про использование i2cdetect, которое тоже не увидит устройства, которое не добавлено в систему.

i2cdetect как раз увидит. Т.к. проиводит сканирование. Что, кстати, следует из названия. Драйвер иметь не обязательно. Устройство может быть не обьявленно.
Аналогично с утилитами i2cget i2cset.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 1 2014, 21:32
Сообщение #40


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

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



Цитата(Dron_Gus @ Mar 1 2014, 20:02) *
проиводит сканирование.

А именно смотрит в той директории, что я указал.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Mar 1 2014, 22:19
Сообщение #41


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 2 2014, 15:59
Сообщение #42


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

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



просто и без затей:
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
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 2 2014, 17:41
Сообщение #43


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

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



Сравниваем что проще и незатейливее

The program 'i2cdetect' is currently not installed. You can install it by typing:
sudo apt-get install i2c-tools
$ i2cdetect -y 0
Error: Could not open file `/dev/i2c-0': Permission denied
Run as root?
$ sudo i2cdetect -y 0
Error: Could not open file `/dev/i2c-0': No such device or address
$ sudo i2cdetect -y 1
Error: Could not open file `/dev/i2c-1': No such device or address
$ sudo i2cdetect -y 2
Error: Could not open file `/dev/i2c-2': No such device or address


$ ls /dev/i2*
/dev/i2c-0 /dev/i2c-1 /dev/i2c-2 /dev/i2c-3 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6 /dev/i2c-7


$ ls /sys/bus/i2c/devices/
i2c-0 i2c-1 i2c-10 i2c-11 i2c-12 i2c-13 i2c-14 i2c-15 i2c-16 i2c-2 i2c-3 i2c-4 i2c-5 i2c-6 i2c-7 i2c-8 i2c-9

Сообщение отредактировал Tarbal - Mar 2 2014, 17:45
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Mar 3 2014, 10:36
Сообщение #44


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

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



Как можно сравнивать "что проще", если два этих метода делают разные вещи?
Топикстартер не увидит свое i2c устройство, если просто сделает ls /sys/bus/i2c/devices/, потому что для него нет драйвера. И не сможет проверить правильность подключения своего устройства к i2c, пока не напишет драйвер.


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


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

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



Цитата(Dron_Gus @ Mar 3 2014, 14:36) *
Как можно сравнивать "что проще", если два этих метода делают разные вещи?
Топикстартер не увидит свое i2c устройство, если просто сделает ls /sys/bus/i2c/devices/, потому что для него нет драйвера. И не сможет проверить правильность подключения своего устройства к i2c, пока не напишет драйвер.


Согласен.
Мое сообщение номер 38 показывает способ работать с устройством без драйвера.

Сообщение отредактировал Tarbal - Mar 5 2014, 14:49
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 - 11:18
Рейтинг@Mail.ru


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