Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: i2c в uclinux
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Carolinus
кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола.
Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux.
faa
Цитата(Carolinus @ Jun 3 2009, 17:28) *
кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола.
Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux.


Подключаем устройство и пользуем. Проблем практически нет smile.gif

Под какой платформой хотите использовать I2C? Какое устройство надо подключить?
В исходниках ядра практически все есть. Все уровни: там и драйвер для нужной платформы, и драйвер I2C, и драйвер для устройства. Если драйвера под платформу нет - пишем по аналогии с существующими. Если нет драйвера для устройства - вкуриваем даташит для девайса и исходники драйверов, которые уже есть в ядре.
Carolinus
Цитата(faa @ Jun 3 2009, 23:48) *
Подключаем устройство и пользуем. Проблем практически нет smile.gif

Под какой платформой хотите использовать I2C? Какое устройство надо подключить?
В исходниках ядра практически все есть. Все уровни: там и драйвер для нужной платформы, и драйвер I2C, и драйвер для устройства. Если драйвера под платформу нет - пишем по аналогии с существующими. Если нет драйвера для устройства - вкуриваем даташит для девайса и исходники драйверов, которые уже есть в ядре.


Под арм7. Нужно подключить фискальную память и эклз
Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать.
faa
Цитата(Carolinus @ Jun 4 2009, 09:52) *
Под арм7. Нужно подключить фискальную память и эклз
Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать.

У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO.
Причем стандарт I2C, ЕМНИП, требует наличие открытого коллектора.
Все остальное в ядре. Там все просто и понятно.
Под linux-ом будет крутиться, под хRTOS какой-нибудь или самописная системка будет?
ЗЫ: Для конкретных советов мало исходной информации.
ЗЫЗЫ: Правильно заданный вопрос содержит в себе 90% ответа.
Carolinus
Цитата(faa @ Jun 4 2009, 11:01) *
У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO.
Причем стандарт I2C, ЕМНИП, требует наличие открытого коллектора.
Все остальное в ядре. Там все просто и понятно.
Под linux-ом будет крутиться, под хRTOS какой-нибудь или самописная системка будет?
ЗЫ: Для конкретных советов мало исходной информации.
ЗЫЗЫ: Правильно заданный вопрос содержит в себе 90% ответа.


интерфейс есть, порт торчит, дрова в ядре есть. Ось я в сабже указал (ucLinux). Пишу на C/C++
насколько я понял, ид устройства зашивается в драйвер. т.е. нужно либо переписывать, либо писать свой, так?
вопросы: в системе в /dev есть устройства i2c0, i2c1, i2c2, У устройства есть, как я понял из описания протокола, свой ид.
Почему порт один, а в /dev 3 устройства? Это устройства с тремя разными идями, висящие на одном порту? или на плате есть 3 порта, из которых выведен наружу только один?
Как мне начать обмен с устройством, т.е. проинициализировать его, указать, например, скорость? или скорость задана жестко и менять ее нельзя?
Как открыть устройство? Тупо fopen('/dev/i2c0'...) или нужно подключать какой-нить .h файл со спец. функциями? Как читать из устройства? например, для ком-порта мы заполняем структуру termios, в которой, в частности, описываем, сколько байт должно быть принято, сколько ждать, если порт не отвечает. Есть ли что-то аналогичное для i2c?

Просто слово i2c я услышал тройку дней назад. А сильно нужно, чтоб девайс работал. Спросить тоже особо не у кого.
Ivan_Kov
Цитата(Carolinus @ Jun 4 2009, 11:58) *
интерфейс есть, порт торчит, дрова в ядре есть. Ось я в сабже указал (ucLinux). Пишу на C/C++
насколько я понял, ид устройства зашивается в драйвер. т.е. нужно либо переписывать, либо писать свой, так?
вопросы: в системе в /dev есть устройства i2c0, i2c1, i2c2, У устройства есть, как я понял из описания протокола, свой ид.
Почему порт один, а в /dev 3 устройства? Это устройства с тремя разными идями, висящие на одном порту? или на плате есть 3 порта, из которых выведен наружу только один?
Как мне начать обмен с устройством, т.е. проинициализировать его, указать, например, скорость? или скорость задана жестко и менять ее нельзя?
Как открыть устройство? Тупо fopen('/dev/i2c0'...) или нужно подключать какой-нить .h файл со спец. функциями? Как читать из устройства? например, для ком-порта мы заполняем структуру termios, в которой, в частности, описываем, сколько байт должно быть принято, сколько ждать, если порт не отвечает. Есть ли что-то аналогичное для i2c?

Просто слово i2c я услышал тройку дней назад. А сильно нужно, чтоб девайс работал. Спросить тоже особо не у кого.


Руслан, для того чтобы узнать как настраивается i2c нужно прочитать несколько страниц из user manual для lpc2468, уверяю тебя работа с i2c не сложнее работы uart.
После понимания работы контроллера i2c, имеет смысл ознакомится с исходным кодом драйвера i2c, практически там уже все написано, просто добавишь свои устройства.
Carolinus
Цитата(Ivan_Kov @ Jun 4 2009, 12:16) *
Руслан, для того чтобы узнать как настраивается i2c нужно прочитать несколько страниц из user manual для lpc2468, уверяю тебя работа с i2c не сложнее работы uart.
После понимания работы контроллера i2c, имеет смысл ознакомится с исходным кодом драйвера i2c, практически там уже все написано, просто добавишь свои устройства.


Вань, чтением всего этого я как раз сейчас и занимаюсь.
Я хочу собрать как можно больше информации обо всем этом. Я спрашивал КОНКРЕТНЫЕ примеры работы с устройствами, потому что имея их на руках + маны + код драйвера, разобраться
ПРОЩЕ И БЫСТРЕЕ.
Ivan_Kov
Цитата(Carolinus @ Jun 4 2009, 12:31) *

Ну какие примеры?
Открываешь устройство (ф-ция open("/dev/i2cX",...)), пишешь/читаешь, закрываешь.
Carolinus
что я и спрашивал. спасибо за ответ.
faa
Цитата(Ivan_Kov @ Jun 4 2009, 12:43) *
Ну какие примеры?
Открываешь устройство (ф-ция open("/dev/i2cX",...)), пишешь/читаешь, закрываешь.

ioctl(..) еще может понадобиться smile.gif

ЗЫ: процы с ядром arm7 тоже разные бывают - есть совсем убогие, а есть очень навороченные - чего в них только нет ( MMU, МАС, контроллер TFT и т.п.).
Carolinus
Цитата(faa @ Jun 4 2009, 16:09) *
ioctl(..) еще может понадобиться smile.gif

ЗЫ: процы с ядром arm7 тоже разные бывают - есть совсем убогие, а есть очень навороченные - чего в них только нет ( MMU, МАС, контроллер TFT и т.п.).


lpc 2468
про ioctl можно поподробнее?
faa
Цитата(Carolinus @ Jun 5 2009, 12:25) *
lpc 2468
про ioctl можно поподробнее?

Драйверов в linux для I2C (см. исходники ядра) как минимум три уровня (грубо и для простоты картины) - поддержка интерфейса I2C процессора, сам протокол, драйвер устройства-клиента.
Например:

/drivers/i2c/busses/i2c-ep93xx.c - процессор - поддержка со стороны процессора (1-й уровень - дрыгаем ногами GPIO)

/drivers/i2c/algos - сам протокол (2-й уровень -протокол обмена по i2c)

/drivers/i2c/chips/eeprom.c - клиент (устройство) - 3-й уровень (поддержка устройства-клиента)
или
/drivers/rtc/rtc-isl1208.c и /drivers/rtc/rtc-dev.c - клиент (isl1208 -3-й уровень) и переход -> rtc - другой класс-тип устройства
в результате имеем /dev/rtc - где устройство isl1208 есть таймер реального времени (/dev/rtc), подключенный по I2C, и user-у абсолютно индеферентно, каким образом этот RTC пристегнут (I2C, SPI или еще как).

это все упрощенно - на сам деле все немного веселее smile.gif

А ioctl позволяет кроме "стандартных" операций (открыть, закрыть, прочитать, записать) добавить специфические операции (функции) для устройства (с параметрами - если надо), ну и естественно пользовать их (операции) из программы user-а (из неядреного пространства).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.