|
|
  |
i2c в uclinux, кто знает, как работать с сабжем? |
|
|
|
Jun 3 2009, 13:28
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола. Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux.
|
|
|
|
|
Jun 3 2009, 19:48
|
Знающий
   
Группа: Свой
Сообщений: 726
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 394

|
Цитата(Carolinus @ Jun 3 2009, 17:28)  кто знает, как работать с сабжем? гугл мало информации дает. Знаю, что в ядре есть драйвер протокола. Если можно, пример исходников (инициализация устройств, запись, чтение и пр.) Или ссылки, где можно про это почитать. Короче, буду благодарен любой информации по сабжу и его использованию в uclinux. Подключаем устройство и пользуем. Проблем практически нет  Под какой платформой хотите использовать I2C? Какое устройство надо подключить? В исходниках ядра практически все есть. Все уровни: там и драйвер для нужной платформы, и драйвер I2C, и драйвер для устройства. Если драйвера под платформу нет - пишем по аналогии с существующими. Если нет драйвера для устройства - вкуриваем даташит для девайса и исходники драйверов, которые уже есть в ядре.
|
|
|
|
|
Jun 4 2009, 05:52
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
Цитата(faa @ Jun 3 2009, 23:48)  Подключаем устройство и пользуем. Проблем практически нет  Под какой платформой хотите использовать I2C? Какое устройство надо подключить? В исходниках ядра практически все есть. Все уровни: там и драйвер для нужной платформы, и драйвер I2C, и драйвер для устройства. Если драйвера под платформу нет - пишем по аналогии с существующими. Если нет драйвера для устройства - вкуриваем даташит для девайса и исходники драйверов, которые уже есть в ядре. Под арм7. Нужно подключить фискальную память и эклз Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать.
|
|
|
|
|
Jun 4 2009, 07:01
|
Знающий
   
Группа: Свой
Сообщений: 726
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 394

|
Цитата(Carolinus @ Jun 4 2009, 09:52)  Под арм7. Нужно подключить фискальную память и эклз Хотелось бы, если можно, пример работы: инициализация, чтение/запись, закрытие. Или где это можно почитать. У процессора есть такой интерфейс? Если нет - то только через дерганье ногами GPIO. Причем стандарт I2C, ЕМНИП, требует наличие открытого коллектора. Все остальное в ядре. Там все просто и понятно. Под linux-ом будет крутиться, под хRTOS какой-нибудь или самописная системка будет? ЗЫ: Для конкретных советов мало исходной информации. ЗЫЗЫ: Правильно заданный вопрос содержит в себе 90% ответа.
|
|
|
|
|
Jun 4 2009, 07:58
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
Цитата(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 я услышал тройку дней назад. А сильно нужно, чтоб девайс работал. Спросить тоже особо не у кого.
|
|
|
|
|
Jun 4 2009, 08:16
|
Частый гость
 
Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787

|
Цитата(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, практически там уже все написано, просто добавишь свои устройства.
|
|
|
|
|
Jun 4 2009, 08:31
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
Цитата(Ivan_Kov @ Jun 4 2009, 12:16)  Руслан, для того чтобы узнать как настраивается i2c нужно прочитать несколько страниц из user manual для lpc2468, уверяю тебя работа с i2c не сложнее работы uart. После понимания работы контроллера i2c, имеет смысл ознакомится с исходным кодом драйвера i2c, практически там уже все написано, просто добавишь свои устройства. Вань, чтением всего этого я как раз сейчас и занимаюсь. Я хочу собрать как можно больше информации обо всем этом. Я спрашивал КОНКРЕТНЫЕ примеры работы с устройствами, потому что имея их на руках + маны + код драйвера, разобраться ПРОЩЕ И БЫСТРЕЕ.
|
|
|
|
|
Jun 4 2009, 08:43
|
Частый гость
 
Группа: Свой
Сообщений: 174
Регистрация: 30-10-06
Из: г. Курск
Пользователь №: 21 787

|
Цитата(Carolinus @ Jun 4 2009, 12:31)  Ну какие примеры? Открываешь устройство (ф-ция open("/dev/i2cX",...)), пишешь/читаешь, закрываешь.
|
|
|
|
|
Jun 4 2009, 08:49
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
что я и спрашивал. спасибо за ответ.
|
|
|
|
|
Jun 5 2009, 08:25
|
Группа: Участник
Сообщений: 14
Регистрация: 4-05-08
Пользователь №: 37 256

|
Цитата(faa @ Jun 4 2009, 16:09)  ioctl(..) еще может понадобиться  ЗЫ: процы с ядром arm7 тоже разные бывают - есть совсем убогие, а есть очень навороченные - чего в них только нет ( MMU, МАС, контроллер TFT и т.п.). lpc 2468 про ioctl можно поподробнее?
|
|
|
|
|
Jun 5 2009, 20:54
|
Знающий
   
Группа: Свой
Сообщений: 726
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 394

|
Цитата(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 или еще как). это все упрощенно - на сам деле все немного веселее  А ioctl позволяет кроме "стандартных" операций (открыть, закрыть, прочитать, записать) добавить специфические операции (функции) для устройства (с параметрами - если надо), ну и естественно пользовать их (операции) из программы user-а (из неядреного пространства).
Сообщение отредактировал faa - Jun 5 2009, 21:08
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|