Jump to content

    
Sign in to follow this  
Carolinus

i2c в uclinux

Recommended Posts

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

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

Share this post


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

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

 

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

 

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

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

Share this post


Link to post
Share on other sites
Подключаем устройство и пользуем. Проблем практически нет :)

 

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

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

 

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

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

Share this post


Link to post
Share on other sites
Под арм7. Нужно подключить фискальную память и эклз

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO.

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

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

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

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

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

 

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

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

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

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

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

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

 

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

Share this post


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

Share this post


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

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

 

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

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

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

Share this post


Link to post
Share on other sites
Ну какие примеры?

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

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

 

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

Edited by faa

Share this post


Link to post
Share on other sites
ioctl(..) еще может понадобиться :)

 

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

 

lpc 2468

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

Share this post


Link to post
Share on other sites
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-а (из неядреного пространства).

Edited by faa

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this