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

i2c в uclinux

кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола.

Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux.

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


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

кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола.

Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux.

 

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

 

Под какой платформой хотите использовать I2C? Какое устройство надо подключить?

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

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


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

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

 

Под какой платформой хотите использовать I2C? Какое устройство надо подключить?

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

 

Под арм7. Нужно подключить фискальную память и эклз

Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать.

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


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

Под арм7. Нужно подключить фискальную память и эклз

Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать.

У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO.

Причем стандарт I2C, ЕМНИП, требует наличие открытого коллектора.

Все остальное в ядре. Там все просто и понятно.

Под linux-ом будет крутиться, под хRTOS какой-нибудь или самописная системка будет?

ЗЫ: Для конкретных советов мало исходной информации.

ЗЫЗЫ: Правильно заданный вопрос содержит в себе 90% ответа.

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


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

У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO.

Причем стандарт I2C, ЕМНИП, требует наличие открытого коллектора.

Все остальное в ядре. Там все просто и понятно.

Под linux-ом будет крутиться, под хRTOS какой-нибудь или самописная системка будет?

ЗЫ: Для конкретных советов мало исходной информации.

ЗЫЗЫ: Правильно заданный вопрос содержит в себе 90% ответа.

 

интерфейс есть, порт торчит, дрова в ядре есть. Ось я в сабже указал (ucLinux). Пишу на C/C++

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

вопросы: в системе в /dev есть устройства i2c0, i2c1, i2c2, У устройства есть, как я понял из описания протокола, свой ид.

Почему порт один, а в /dev 3 устройства? Это устройства с тремя разными идями, висящие на одном порту? или на плате есть 3 порта, из которых выведен наружу только один?

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

Как открыть устройство? Тупо fopen('/dev/i2c0'...) или нужно подключать какой-нить .h файл со спец. функциями? Как читать из устройства? например, для ком-порта мы заполняем структуру termios, в которой, в частности, описываем, сколько байт должно быть принято, сколько ждать, если порт не отвечает. Есть ли что-то аналогичное для i2c?

 

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

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


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

интерфейс есть, порт торчит, дрова в ядре есть. Ось я в сабже указал (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, практически там уже все написано, просто добавишь свои устройства.

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


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

Руслан, для того чтобы узнать как настраивается i2c нужно прочитать несколько страниц из user manual для lpc2468, уверяю тебя работа с i2c не сложнее работы uart.

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

 

Вань, чтением всего этого я как раз сейчас и занимаюсь.

Я хочу собрать как можно больше информации обо всем этом. Я спрашивал КОНКРЕТНЫЕ примеры работы с устройствами, потому что имея их на руках + маны + код драйвера, разобраться

ПРОЩЕ И БЫСТРЕЕ.

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


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

Ну какие примеры?

Открываешь устройство (ф-ция open("/dev/i2cX",...)), пишешь/читаешь, закрываешь.

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


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

Ну какие примеры?

Открываешь устройство (ф-ция open("/dev/i2cX",...)), пишешь/читаешь, закрываешь.

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

 

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

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

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


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

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

 

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

 

lpc 2468

про ioctl можно поподробнее?

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


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

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 или еще как).

 

это все упрощенно - на сам деле все немного веселее :)

 

А ioctl позволяет кроме "стандартных" операций (открыть, закрыть, прочитать, записать) добавить специфические операции (функции) для устройства (с параметрами - если надо), ну и естественно пользовать их (операции) из программы user-а (из неядреного пространства).

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

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


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

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

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

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

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

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

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

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

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

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