Автор работы: Пользователь скрыл имя, 17 Января 2012 в 14:29, курсовая работа
В настоящее время только Philips производит более 150 наименований I2C-совместимых устройств, функционально предназначенных работы в электронном оборудовании различного назначения. В их числе ИС памяти, видеопроцессоров и модулей обработки аудио- и видео-сигналов, АЦП и ЦАП, драйверы ЖК-индикаторов, процессоры со встоенным аппаратным контроллером I2C шины и многое другое.
Введение 5
1 Шина управления I2C 10
2 Исследование драйвера 14
Заключение 15
Список использованных источников 16
Если «Slave» не подтверждает получение байта адреса или данных, «Master» должен прервать передачу, сформировав сигнал STOP.
При
передаче данных от «Slave» к «Master»,
«Master» формирует сигналы
Для
задержки передачи данных «Slave» может
установить логический нуль, указывая
«Master» о необходимости
Передача
данных от «Master» к
«Slave»
Чтение
данных из «Slave»
Использование
сигнала повторного START
для обращения
к «Slave»
Режим Multi-«Master»
Протокол передачи данных I2C позволяет иметь более одного «Master» на шине. Для разрешения конфликтов на шине при инициализации передачи используются функции арбитража и синхронизации.
Арбитраж
Арбитраж
выполняется на линии SDA при высоком
уровне линии SCL. Устройство, которое
формирует на линии SDA высокий уровень
когда другое передает низкий, теряет
право брать «Master» и должно перейти в режим
«Slave». «Master», потерявший инициативу на
шине, может формировать тактовые импульсы
до конца байта, в котором потерял свойства
ведущего.
Синхронизация
Синхронизация
на шине происходит после выполнения
арбитража по отношению к сигналу
SCL. При переходе сигнала SCL с высокого
уровня в низкий, все заинтересованные
устройства начинают отсчитывать длительность
низкого уровня. Затем устройства начинают
переводить уровень SCL из низкого в высокий
согласно требуемой скорости передачи
данных. После перехода уровня из низкого
в высокое состояние, заинтересованные
устройства отсчитывают длительность
высокого уровня. Первое устройство, которое
переведет сигнал SCL в низкий уровень,
определяет параметры тактового сигнала.
Для исследования была выбрана версия ядра 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 /* ------------------------------
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(
98 extern s32 i2c_smbus_write_byte_data(
Информация о работе Исследование драйвера ядра Linux для шины I2C