Перейти к содержанию
    

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

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

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

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

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

 

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

 

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В загрузчике это надо сделать отдельно.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

резонно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я дополнил ответ про использование i2cdetect, которое тоже не увидит устройства, которое не добавлено в систему.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Согласен.

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

Изменено пользователем Tarbal

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...