Jump to content

    

Новый проект на основе прототипа с AM/DM37xx, OMAP-L138

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

1. Как сделать, чтобы порт I2C считался принадлежащим дисплею? Писать свой драйвер? Тогда как? Какой для этого инструментарий необходим, откуда берётся, правила написания и т. д. Может где про это подробно написано, тогда прошу дать ссылки.

2. Можно посмотреть на проблему иначе. Пусть I2C так и остаётся самостоятельным портом, подключенным к дисплею. Об этом ведомо только разработчику. И просто отправлять коды по порту, зная для чего они предназначены. Как Вам такой вариант. Что для этого надо дополнительно сделать?

 

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

 

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

 

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

Share this post


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

 

Я дополнил ответ про использование i2cdetect, которое тоже не увидит устройства, которое не добавлено в систему. Поправлю вас. Драйвер уже есть, но этого мало. Надо объявить устройство. в 2.6 я хорошо знаю как это делается, в 3.Х надо в дереве устройств описывать. С этим я плохо знаком, но поскольку там описано можество подобных устройств, то можно подсмотреть. Да и документы есть.

 

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

В том списке, что я показал находятся устройства для которыз использованы только два драйвера.

Один для конкретных устройств например 2-0041, что означает, что на i2c шине 2 устройство с адресом 0х41 и второй i2c-1, означающий i2c шина номер 1. Кстати если устройство только подключено к шине и не объявлено в дереве устройств(3.х), к нему можно легко подсоединиться при помощи второго типа драйвера. Если интересно, то могу рассказать как.

 

Так вот наша ситуация это когда драйвер в списке драйверов есть, а устройства в списке устройств нет.

 

 

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

 

Я подключал к близкому процессору дисплей по RFBI. Там тоже надо было много писать для конфигурации. I2C устройство подключить очень легко. Проблемы будут попозже, но и они разрешимы.

 

Share this post


Link to post
Share on other sites
раз вы только начинаете со всем этим разбираться , может лучше взять другой дисплей у которого rgb интерфейс единственный ? ничего не нужно ни куда писать "для начала изображения" , подключите к боне без всякого i2c . дисплев таких большинство , и они ничего не стоят по сравнению с теми усилиями которые вы затратите не зная что делать наверняка. ну разве что в учебных целях задача как вы поставили хороша.

 

 

Да! Я только начинаю в этом разбираться! Но такой дисплей необходим для решения конкретной задачи.

Share this post


Link to post
Share on other sites
В загрузчике это надо сделать отдельно.

 

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

 

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

Share this post


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

 

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

 

резонно

Share this post


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

 

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

 

 

Если можно - поподробнее пожалуйста об этом.

 

А вообще давайте представим, что имеется BeagleBone (как прототип конечного устройства), подключенный к хосту через USB и Ethernet. С хоста мы можем увидеть процесс загрузки ВВ и наверное порулить I2C, и остановить загрузку после u-boot и ещё много чего, Но мы НИЧЕГО не увидим на OLED-е пока не отправим на него по I2C набор кодов настройки отображения. Что же тогда делать если хоста не было бы?! На целевой системе он мне не нужен!!!

 

Тогда на каком этапе "прикручивать" драйвер и как его писать? На этапе отладки ПО наверное как можно раньше, а на целевой системе пользователю точно не нужно видеть процесс загрузки, ему и заставки хватит!

Share this post


Link to post
Share on other sites

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

 

Дисплей устройства нужен ТОЛЬКО для отображения информации конечного приложения, работающего с дисплеем. Все остальное работает или само по себе, или через ком-порт.

Share this post


Link to post
Share on other sites

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

 

1. Подсоединяете ваше устройство к одной из шин. скажем к шине N, где N 0, 1, 2 ... сколько у вас шин имеется в налиции.

2. Берете пример из документации. Он находится в коде ядра:

Documentation/i2c/dev-interface

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

 

 

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

 

I2C_SLAVE - your devise's 7-bit address

Edited by Tarbal

Share this post


Link to post
Share on other sites
Я дополнил ответ про использование i2cdetect, которое тоже не увидит устройства, которое не добавлено в систему.

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

Аналогично с утилитами i2cget i2cset.

Share this post


Link to post
Share on other sites
проиводит сканирование.

А именно смотрит в той директории, что я указал.

Share this post


Link to post
Share on other sites
А именно смотрит в той директории, что я указал.

не знаю, что там за "директории", но просто и без затей:

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

Share this post


Link to post
Share on other sites

просто и без затей:

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

Share this post


Link to post
Share on other sites

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

 

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

Edited by Tarbal

Share this post


Link to post
Share on other sites

Как можно сравнивать "что проще", если два этих метода делают разные вещи?

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

Share this post


Link to post
Share on other sites
Как можно сравнивать "что проще", если два этих метода делают разные вещи?

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

 

Согласен.

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

Edited by Tarbal

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this