Исследование драйвера ядра Linux для шины I2C

Автор работы: Пользователь скрыл имя, 17 Января 2012 в 14:29, курсовая работа

Краткое описание

В настоящее время только Philips производит более 150 наименований I2C-совместимых устройств, функционально предназначенных работы в электронном оборудовании различного назначения. В их числе ИС памяти, видеопроцессоров и модулей обработки аудио- и видео-сигналов, АЦП и ЦАП, драйверы ЖК-индикаторов, процессоры со встоенным аппаратным контроллером I2C шины и многое другое.

Содержание работы

Введение 5
1 Шина управления I2C 10
2 Исследование драйвера 14
Заключение 15
Список использованных источников 16

Содержимое работы - 1 файл

kyrsovik.doc

— 337.00 Кб (Скачать файл)
ify">       При передаче данных после каждого переданного  байта приемник должен подтвердить  получение байта сигналом ACK.

       Если  «Slave» не подтверждает получение  байта адреса или данных, «Master»  должен прервать передачу, сформировав  сигнал STOP.

       При передаче данных от «Slave» к «Master», «Master» формирует сигналы подтверждения  приема данных ACK. Если «Master» не подтвердит приема байта, «Slave» прекращает передачу данных, «отпуская» линию SDA. После этого «Master» может сформировать сигнал STOP.

       Для задержки передачи данных «Slave» может  установить логический нуль, указывая «Master» о необходимости ожидания. После «отпускания» линии SCL передача данных продолжается. 

       Передача  данных от «Master» к  «Slave» 

       Чтение  данных из «Slave» 

       Использование сигнала повторного START для обращения  к «Slave» 

       Режим Multi-«Master»

       Протокол  передачи данных I2C позволяет иметь более одного «Master» на шине. Для разрешения конфликтов на шине при инициализации передачи используются функции арбитража и синхронизации.

       Арбитраж

       Арбитраж  выполняется на линии SDA при высоком  уровне линии SCL. Устройство, которое  формирует на линии SDA высокий уровень когда другое передает низкий, теряет право брать «Master» и должно перейти в режим «Slave». «Master», потерявший инициативу на шине, может формировать тактовые импульсы до конца байта, в котором потерял свойства ведущего. 

       Синхронизация

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

       2 Исследование драйвера

       Для исследования была выбрана версия ядра 2.6.15.6. Драйвер шины PCI состоит из следующих основных файлов: drivers/i2c/i2c_core.c и include/linux/i2c.h. А также файлы drivers/i2c/i2c-dev.c и include/linux/i2c-dev.h.

Заключение

       В процессе выполнения курсовой работы были изучены структура и технология разработки драйверов для ОС GNU/Linux, устройство и функционирование шины I2c, повсеместно используемой в персональных компьютерах, рабочих станциях и серверах, а также в компактных компьютерах типа КПК, для установки всевозможных устройств таких как LCD-дисплеи, сенсоры и тому подобное.

Список  использованных источников

  1. Максвелл  Скотт "Ядро Linux в комментариях": Пер. с англ. - К.: Издательство "ДиаСофт", 2000.- 488 с.
  2. Гук М.Ю. Аппаратные средства IBM PC. Энциклопедия. 2-е изд. - СПб.: Питер, 2004. - 923 с.: ил.
  3. Гук М.Ю. Дисковая подсистема ПК. - Спб.: Питер, 2001. - 336 с.: ил.
  4. Кулаков В. Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е изд. - СПб: Питер, 2003. - 848 с.: ил.
  5. Кулаков В. Программирование дисковых подсистем (+дискета). - Спб.: Питер, 2002. - 768 с.: ил.
  6. Зубков С.В. Assembler для DOS, Windows и UNIX. - М.: ДМК Пресс, 2000. - 608 с.: ил.
  7. The Linux Kernel Module Programming Guide - http://gazette.linux.ru.net/rus/articles/lkmpg.html
  8. Шина управления I2C - http://library.espec.ws/article.php?article=51
  9. Цифровая шина I2C - http://www.data-chip.ru/n/id/64.html
  10. Описание шины I2C - http://www.itt-ltd.com.ua/reference/ref_i2c.html

Приложение  А. Листинг драйвера I2C. Файл i2c.h

    1 /* -------------------------------------------------------------------------

    2 */

    3 /*                                       */

    4 /* i2c.h - definitions for the i2c-bus interface                 */

    5 /*                                       */

    6 /* -------------------------------------------------------------------------

    7 */

    8 /*   Copyright (C) 1995-2000 Simon G. Vogl

    9

   10     This program is free software; you can redistribute it and/or modify

   11     it under the terms of the GNU General Public License as published by

   12     the Free Software Foundation; either version 2 of the License, or

   13     (at your option) any later version.

  14

   15     This program is distributed in the hope that it will be useful,

   16     but WITHOUT ANY WARRANTY; without even the implied warranty of

   17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

   18     GNU General Public License for more details.

   19

   20     You should have received a copy of the GNU General Public License

   21     along with this program; if not, write to the Free Software

   22     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            */

   23 /* -------------------------------------------------------------------------

   24 */

   25

   26 /* With some changes from Kyцsti Mдlkki <kmalkki@cc.hut.fi> and

   27    Frodo Looijaard <frodol@dds.nl> */

   28

   29 #ifndef _LINUX_I2C_H

   30 #define _LINUX_I2C_H

   31

   32 #include <linux/module.h>

   33 #include <linux/types.h>

   34 #include <linux/i2c-id.h>

   35 #include <linux/mod_devicetable.h>

   36 #include <linux/device.h>   /* for struct device */

   37 #include <linux/sched.h>    /* for completion */

   38 #include <asm/semaphore.h>

   39

   40 /* --- For i2c-isa ---------------------------------------------------- */

   41

   42 extern void i2c_adapter_dev_release(struct device *dev);

   43 extern struct device_driver i2c_adapter_driver;

   44 extern struct class i2c_adapter_class;

   45 extern struct bus_type i2c_bus_type;

   46

   47 /* --- General options ------------------------------------------------ */

   48

   49 struct i2c_msg;

   50 struct i2c_algorithm;

   51 struct i2c_adapter;

   52 struct i2c_client;

   53 struct i2c_driver;

   54 union i2c_smbus_data;

   55

   56 /*

   57 * The master routines are the ones normally used to transmit data to

   58 devices

   59 * on a bus (or read from them). Apart from two basic transfer functions to

   60 * transmit one message at a time, a more complex version can be used to

   61 * transmit an arbitrary number of messages without interruption.

   62 */

   63 extern int i2c_master_send(struct i2c_client *,const char* ,int);

   64 extern int i2c_master_recv(struct i2c_client *,char* ,int);

   65

   66 /* Transfer num messages.

   67 */

   68 extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int

   69                         num);

   70

   71 /*

   72 * Some adapter types (i.e. PCF 8584 based ones) may support slave

   73                        behaviuor.

   74 * This is not tested/implemented yet and will change in the future.

   75 */

   76 extern int i2c_slave_send(struct i2c_client *,char*,int);

   77 extern int i2c_slave_recv(struct i2c_client *,char*,int);

   78

   79

   80

   81 /* This is the very generalized SMBus access routine. You probably do not

   82    want to use this, though; one of the functions below may be much easier,

   83    and probably just as fast.

   84    Note that we use i2c_adapter here, because you do not need a specific

   85    smbus adapter to call this function. */

   86 extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr,

   87                            unsigned short flags,

   88                            char read_write, u8 command, int size,

   89                            union i2c_smbus_data * data);

   90

   91 /* Now follow the 'nice' access routines. These also document the calling

   92   conventions of smbus_access. */

   93

   94 extern s32 i2c_smbus_write_quick(struct i2c_client * client, u8 value);

   95 extern s32 i2c_smbus_read_byte(struct i2c_client * client);

   96 extern s32 i2c_smbus_write_byte(struct i2c_client * client, u8 value);

   97 extern s32 i2c_smbus_read_byte_data(struct i2c_client * client, u8 command);

   98 extern s32 i2c_smbus_write_byte_data(struct i2c_client * client,

Информация о работе Исследование драйвера ядра Linux для шины I2C