Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Буклет Лабораторні роботи МСТЗІ

.pdf
Скачиваний:
70
Добавлен:
12.02.2016
Размер:
6 Мб
Скачать
☆

DS1991 – містить вбудовані ID та енергонезалежну статичну пам’ять, розділену на 3 сегменти по 384 біти. Доступ до кожного сегменту пам’яті як для читання так і для запису вимагає пред’явлення 64-бітного пароля сторінки. При невірному вказані пароля читання сторінки супроводжується видачею випадковою цифрової послідовності. Запис сторінки при невірному паролі неможливий. Таким чином, пристрій DS1991 забезпечує захист інформації у вбудованій енергонезалежній пам’яті від несанкціонованого зчитування або запису, що є достатнім для випадків, коли електронний носій застосовується для зберігання конфіденційної інформації, криптографічних ключів, паролів доступу.

Всистемах електронної комерції використовується пристрійDS1961/3S – електронний гаманець з посиленою автентифікацією. Крім енергонезалежної захищеної пам’яті об’ємом 4096 біт пристрій містить 512-бітний блок обчислення 160-бітного коду автентифікації повідомлення та генерації ключів доступу до сторінок пам’яті за алгоритмом SHA-1.

Всистемах комп’ютерної безпеки використовуючи iButton можна заблокувати доступ до

комп’ютера, жорсткого диску або клавіатури. Також ID код, записаний в iButton, використовується для захисту доступу до електронної пошти, окремих файлів та каталогів. У глобальних та локальних мережах пристроїiButton типу DS1961S, DS1963S застосовуються в якості засобів автентифікації віддалених користувачів.

Пристрої DS1954, DS1957 з алгоритмами криптографічного захисту можуть бути використані як носії електронного підпису, цифрових сертифікатів, паролів доступу, тощо.

Інтерфейс 1- Wire

Обмін даними з iButton проводиться через однопровідний інтерфейс 1-Wire. Інформація в цьому інтерфейсі передається по єдиному провідникові, тобто шина даних – однопровідна, при цьому суттєво зменшується вартість інтерфейсу. Взаємодія пристроїв через однопровідний інтерфейс організована за принципом Ведучий(Master) – Ведений (Slave). При цьому зчитуючий пристрій (мікроконтролер) завжди Master, а пристрої iButton – Slave.

Живлення мікросхеми iButton отримують з провідника даних, заряджаючи внутрішній конденсатор в моменти, коли на шині немає обміну даними. Максимальна швидкість передачі інформації по інтерфейсу1-Wire 16.3 Кбіт/сек достатня для забезпечення обміну даними у момент торкання контактного пристрою.

Протокол інтерфейсу 1-Wire забезпечує можливість роботи з багатьмаiButton, підключеними паралельно до лінії даних, у так званій мережіMICROLAN (Рис. 3). Команди інтерфейсу 1-Wire дозволяють визначити ID всіх iButton, підключених в даний момент до лінії і потім працювати з конкретним пристроєм, перевівши інші в режим очікування. Управління лінією даних і видачу команд проводить керуючий пристрій (Master), в якості якого може використовуватися МК або персональний комп’ютер (ПК).

Рис. 3. Схема організації мережі MICROLAN

Апаратно інтерфейс з пристроямиiButton реалізується на МК, лінії вводу-виводу яких можуть працювати в режимі відкритого стоку(це зокрема і МКAVR). У цьому випадку достатньо вибрану для підключення до iButton лінію порту вводу/виводу підключити до додатного полюсу джерела живлення через підтягуючий(pull-up) резистор з рекомендованим номіналом 5.1 кОм (Рис. 4).

Для підключення iButton до персонального комп’ютера випускаються адаптери та програмні драйвери, що перетворюють сигнали стандартних портів комп’ютера(RS232, LPT і USB) в сигнали 1-Wire і навпаки.

Далі будемо розглядати інтерфейс 1-Wire на прикладі пристрою iButton типу DS1990A.

80

Рис. 4. Підключення iButton до МК

DS1990А містить записаний лазером 64-бітний номер, який включає в себе 8-бітний код сімейства (для DS1990А рівний 01h), унікальний 48 бітний ідентифікаційний номер та8-бітну контрольну суму (CRC). Обмін даними здійснюється через інтерфейс 1-Wire (Рис. 5).

а) б) в)

Рис. 5. Конструкція корпусу (а), зовнішній вигляд (б) та зчитувачі (в) для мікросхеми

DS1990А

Інтерфейс 1-Wire є однопровідним. Це означає, що всі команди і дані передаються по двонаправленій лінії даних відносно спільного провідника в послідовному коді. Оскільки в інтерфейсі не передбачено ніяких синхронізуючих сигналів, всі команди і дані мають строго регламентований часовий формат, недотримання якого приводить до спотворення інформації.

В протоколі інтерфейсу існує три основних часових :цикли ініціалізації (або виявлення), цикл читання біту і цикл запису біту.

Цикл ініціалізації (виявлення) є початковим циклом будь-якого інформаційного обміну з пристроями iButton. В цьому циклі Master-пристрій опитує лінію, визначаючи присутність на ній одного або декількох пристроївiButton. Цикл ініціалізації завжди починається з видачі Master-пристроєм (МК) низького логічного рівня тривалістю tRSTL не менше 480 мкс (цей сигнал називається імпульсом скиду – Reset Pulse) – Рис. 6.

Рис. 6. Часова діаграма циклу ініціалізації на 1-Wire шині

81

Після посилки сигналу ініціалізаціїMaster-пристрій переводить лінію на прийом. Якщо до лінії підключений пристрій iButton, він виявляє від’ємний імпульс тривалістю більше 480 мкс

і після паузи tPDH тривалістю від15 до 60 мкс виробляє нульовий імпульс розпізнавання (Presence Pulse) tPDL тривалістю від 60 до 240 мкс. Цей імпульс сприймається Master-пристроєм і повідомляє йому про те, що на лінії присутній мінімум один пристрійiButton. Наступний цикл може початися не раніше ніж через 180 мкс після завершення імпульсу розпізнавання і переходу лінії в високий стан.

У всіх сеансах обміну байти завжди передаються починаючи з молодшого розряду. Цикли запису і читання бітів мають певну тривалість, яку називають тривалістю слоту

або часовим сегментом. Тривалість слоту може знаходитись в межах від 60 до 120 мкс. Кожен слот читання або запису починається з переключення сигнальної лінії з високого на низький логічний рівень (від’ємного фронту), яке ініціюється Master-пристроєм.

Запис 1 в iButton полягає у формуванні Master-пристроєм на сигнальній лінії низького логічного рівня тривалістю tW1L від 1 до 15 мкс, а потім відновленні лінії у високий логічний рівень на час, який залишився до завершення вибраної тривалості слота. При цьому iButton визначає стан сигнальної лінії в інтервалі від 15-ї до 60-ї мкс слоту (номінально 30 мкс) – Рис. 7.

Після кожного слоту читання або запису необхідна пауза tREC тривалістю не менше 1 мкс. Це необхідно для заряджання внутрішнього конденсатора, який забезпечує живлення iButton.

Рис. 7. Часова діаграма запису 1 на 1-Wire шині

Запис 0 в iButton полягає у формуванні Master-пристроєм на сигнальній лінії низького логічного рівня тривалістю tW0L мінімум на 1 мкс менше тривалості слота. При цьому iButton визначає стан сигнальної лінії в інтервалі від 15-ї до 60-ї мкс слота (номінально 30 мкс) – Рис. 8.

Рис. 8. Часова діаграма запису 0 на 1-Wire шині

Читання біту зiButton починається з синхронізуючого сигналуMaster-пристрою tRL тривалістю від 1 до 15 мкс. Після цього Master-пристрій звільняє лінію і переходить в стан прийому. Далі стан лінії встановлюється пристроєм iButton. Master-пристрій повинен проаналізувати стан лінії в інтервалі від завершення стробуючого імпульсу(переднього фронту) до 15 мкс. Середній час утримання сигналу пристроємiButton становить приблизно 45 мкс. Slave-пристрій, тобто iButton, передає високим логічним рівнем біт рівний 1, а низьким логічним рівнем – біт рівний 0 (Рис. 9).

82

// Для підключення iButton використовується PORTB // Вивід 2 – РВ2

Рис. 9. Часова діаграма читання на 1-Wire шині

Взаємодія iButton DS1990A і МК починається у момент торкання iButton лінії даних. При цьому виконується наступна послідовність : дійMaster, постійно знаходячись в режимі очікування, проводить ініціалізацію системи, посилаючи імпульс скидання і чекає у відповідь імпульс, вказуючий на присутність iButton. Після того, як Master-пристрій визначив присутність

на лінії мікросхеми iButton, він може передавати команду читання ПЗПRead ROM. Команда читання ПЗП має код 33h або F0h. Для цього Master-пристрою потрібно здійснити 8 циклів запису відповідних біт.

Прийнявши команду читання ПЗП iButton передає восьмибітний код типу пристрою, 48бітний серійний номер і 8 бітну контрольну суму. Часові інтервали для бітів що приймаються формує Master-пристрій, тобто йому потрібно виконати 64 цикли читання.

Правильність прийнятих даних перевіряється Master-пристроєм з допомогою контрольної

суми, що представляє собою контрольні розряди циклічного коду з твірним поліномом P(x) = x8 + x5 + x 4 +1 згідно правил декодування циклічних кодів.

Компілятор CodeVisionAVR має спеціальну бібліотеку функцій для роботи з інтерфейсом 1-Wire. Прототипи цих функцій знаходяться у файлі1wire.h, який має бути включений у програму директивою #include. Перед використанням директиви #include потрібно вказати порт та вивід до якого підключений пристрій iButton наступним чином:

#asm

.equ __w1_port=0x18

.equ __w1_bit=2 #endasm

#include <1wire.h>

Оскільки інтерфейс 1-Wire для коректного функціонування вимагає формування точних часових інтервалів, переривання під час виконання функцій з бібліотеки1wire.h мають бути заборонені. Також потрібно точно вказати тактову частоту МК у налаштуваннях проекту в полі меню Project|Configure|C Compiler|Code Generation|Clock.

У бібліотеку 1wire.h входять такі функції:

unsigned char w1_init(void) – пошук пристроїв iButton на шині 1-Wire. Функція повертає 1, якщо iButton знайдено та 0 – якщо ні.

unsigned char w1_read(void) – зчитує 1 байт з шини 1-Wire.

unsigned char w1_write(unsigned char data) – записує 1 байт по шині 1-Wire. Повертає 1, якщо процес запису завершився успішно та 0 в протилежному випадку.

unsigned char w1_search(unsigned char cmd, void *p) – ця функція повертає кількість пристроїв iButton підключених до інтерфейсу 1-Wire. Якщо пристроїв не знайдено – повертає 0. Байт cmd містить код команди (для DS1990A має бути F0h) для пристрою iButton. Вказівник р вказує на масив в ОЗП (SRAM), в якому в перших 8 байтах буде записаний зчитаний 64-бітний ідентифікатор (ID) пристрою iButton, а в дев’ятому байті – біт статусу, який повертають деякі типи мікросхем iButton.

83

Інтерфейс І2С

Вирішуючи завдання сполучення цифрових пристроїв фірмоюPhilips був розроблений інтерфейс Inter-Integrated Circuit Bus (I2C, ай-ту-сі). Він відноситься до інтерфейсів з послідовним способом передачі даних, і характеризується надзвичайною простотою реалізації.

Інтерфейс І2С або його повний аналог TWI (Two Wire Interface) дозволяє об’єднати разом до 128 різних пристроїв з допомогою двонаправленої шини, яка складається з двох ліній: лінії

2

тактового сигналу SCL та двонаправленої лінії данихSDA. Згідно специфікації інтерфейсу ІС виводи SCL та SDA повинні бути підтягнуті до напруги живлення VCC з допомогою резисторів з типовим номіналом 5.1 кОм (Рис. 10).

Рис. 10. Типова конфігурація І2С шини

Один з пристроїв, підключених до шиниI2C, має статус ведучого (Master), решта - веденого (Slave). Master-пристроєм переважно виступає МК. Саме він задає основний потік даних на шині, адресує Slave-пристрої, формує необхідні часові інтервали, тактовий сигнал на

SCL і т.д.

Протоколом роботи шини I2C передбачено:

§Формування Master-пристроєм умови початку обміну (умова START);

§Передача послідовності з семи розрядів адреси Slave-пристрою;

§Транзакція читання або запису 8-бітних даних;

§Отримання Master-пристроєм бітів підтвердження передачі адреси та даних;

§Формування біта підтвердження після прийому даних;

§Формування Master-пристроєм умови закінчення обміну (умова STOP).

Принципи обміну даними через інтерфейс I2C

Оскільки шина I2C є послідовною, всі дані передаються по лінії SDA побітно. Кожний біт, що передається, супроводжується тактовим імпульсом на лінії SCL. Причому сигнал на лінії SDA повинен бути стабільним на протязі всього часу, поки на лініїSCL присутній сигнал логічної 1. Звідси випливає наступне правило організації протоколу шини: зміна інформації на лінії SDA може відбуватися тільки при нульовому стані лінії SCL (Рис. 11). Єдиним виключенням з цього правила є два особливих стани шини I2C – START та STOP.

Рис. 11. Формування сигналів на лініях SDA і SCL

Шина I2C в пасивному стані має на лініях SDA і SCL високі рівні сигналу. Для розпізнання початку і кінця передачі в специфікацію шини введені умовиSTART і STOP, які зображені на Рис. 12. Умова START скорочено позначається “S”, а умова STOP – ”P”.

Умови START та STOP формуються Master-пристроєм відповідно на початку і в кінці передачі даних. Якщо Master-пристрій хоче почати передачу нового блоку даних без втрати/відновлення контролю над шиною, він може сформувати умову START до формування

умови STOP. Сформований таким чином стан називаєтьсяREPEATED START, а шина вважається зайнятою до наступного формування умовиSTOP (така поведінка майже нічим не

84

відрізняється від поведінки після формування умови START).

Рис.12. Умови START, STOP та REPEATED START

Умови START та STOP формуються шляхом зміни рівня сигналу на лінії SDA при високому рівні на лінії SCL. Стану START відповідає зміна рівня на лінії SDA з 1 на 0, а стану STOP – навпаки, з 0 на 1.

Формат адресного пакету

Кожний пристрій на шині 2ІС має свою адресу. Коли Master-пристрій хоче ініціювати передачу даних, він передає адресу пристрою, з яким буде проводитися обмін.

2

Всі адресні пакети, які передаються по шині ІС, мають довжину 9 біт. Пакет містить 7- бітну адресу SLA (першим передається старший ),бітбіт напрямку передачіR/W і біт підтвердження ACK (Acknowledge). Біт напрямку передачіR/W визначає, чи буде Masterпристрій читати дані з Slave-пристрою (R/W=1) чи записувати в нього (R/W=0).

Всі пристрої на шині слідкують за переданою по шині адресою і порівнюють її зі своєю. При розпізнаванні Slave-пристроєм своєї адреси він повинен сформувати біт підтвердження ACK, шляхом видачі на лінію SDA сигналу низького рівня під час 9-го тактового імпульсу. Якщо Slave-пристрій з певних причин не може обслужити запитMaster-пристрою, він повинен під час 9-го тактового імпульсу утримувати на лінії сигнал високого рівня – NACK (No

Acknowledge). Біт ACK скорочено позначається “А”, біт NACK - “ A ”.

Формат пакету даних

Всі пакети даних, які передаються по шині2СІ, також мають довжину 9 біт. Пакет складається з байту даних(першим передається старший біт) і біту підтвердженняACK. Генерація тактового сигналу і формування умов START і STOP здійснюється Master-пристроєм. Приймач повинен після прийому кожного байту формувати біт підтвердженняACK шляхом видачі на лінію SDA сигналу низького рівня під час9-го тактового імпульсу. Якщо приймач отримав останній байт або з якихось інших причин не може продовжувати прийом даних, він повинен під час 9-го тактового імпульсу утримувати на лінії сигнал високого рівня– NACK. Не одержавши підтвердження від приймача Master може припинити передачу даних, сформувавши умову STOP.

На практиці кожний цикл обміну через інтерфейс І2С складається з наступних етапів:

1.Формування умови START.

2.Передача адресного пакету SLA+ R/W.

3.Передача одного або декількох пакетів даних.

4.Формування умови STOP.

Коли немає передачі даних, реалізується режим очікування: лінії SCL та SDA підтягнуті резисторами до високого рівня напруги. Процес обміну по шині І2С відтворений на Рис. 13.

Рис. 13. Передача даних через інтерфейс І2С

85

Більшість сучасних пристроїв з інтерфейсом І2С можуть працювати з тактовою частотою до 400 кГц і більше, коли мікросхеми встановлені на одній платі недалеко одна від одної. При з’єднаннях проводами краще обмежитися частотами до100 кГц, а при довгих лініях зв’язку частоту обміну слід понизити до 10-30 кГц.

Програмування роботи з годинником реального часу

В СКД для фіксації часу настання певних подій використовують мікросхеми годинників реального часу (англ. RTC - Real Time Clock). Ці мікросхеми мають власне резервне джерело

живлення і тому продовжують працювати навіть

при зникненні

напруги

живлення самого

модуля управління СКД.

 

 

 

В якості годинника реального часу можна використати мікросхемуDS1307 фірми Dallas

2

DS1307 видає

наступну

інформацію:

Semiconductor з ІС інтерфейсом. Годинник/календар

секунди, хвилини, години, дні, числа, місяці і роки (з врахуванням високосних років до2100 року). Мікросхема DS1307 містить також 56 байт пам’яті SRAM для довільного використання користувачем. Адреса і дані передаються послідовно через двонаправлену шину І2С (Рис. 14).

DS1307 має вбудовану схему

контролю живлення, яка виявляє

втрату

основного

живлення і автоматично перемикається на резервне живлення(споживаючи не більше 500 нА).

В якості резервного джерела живлення переважно використовується

батарея

типорозміру

CR2032 номіналом 3 В. ГРЧ потребує

підключення кварцового резонатора з резонансною

частотою 32768 Гц та ємністю навантаження 12.5 пФ.

Рис. 14. Блок-схема ГРЧ DS1307 та розташування виводів мікросхеми

Призначення виводів мікросхеми DS1307 подано в Табл. 1.

 

 

 

 

Табл. 1

№

Вивід

Призначення

 

 

 

 

 

 

 

1

X1

Виводи для підключення кварцового резонатора з частотою32.768

кГц. Схема

2

X2

внутрішнього тактового генератора розроблена для роботи з кварцовим резонатором,

 

що має вхідну ємність 12.5 пФ.

 

 

 

 

 

 

 

 

 

 

Резервне живлення. Вхід для будь-якої стандартної літієвої батареї 3 В або іншого

 

3

VBAT

джерела енергії. Для нормальної

роботиDS1307 необхідно, щоб напруга батареї

 

знаходилась в діапазоні2.0...3.5 В. Якщо резервне живлення не використовується

 

 

 

вивід повинен бути заземлений.

 

 

 

4

GND

Земля.

 

 

 

5

SDA

Serial Data Input/Output - вхід/вихід даних для двопровідного послідовного інтерфейсу

 

І2С. Вивід SDA вимагає зовнішнього підтягуючого резистора.

 

 

6

SCL

Serial Clock Input - вхід тактових

імпульсів. Використовується для

синхронізації

 

даних в І2С інтерфейсі.

 

 

 

86

 

 

Square Wave/Output Driver – вихід прямокутних імпульсів. Коли біт SQWE

7

SWQ/OUT

встановлений в 1, на виводі SQW/OUT формуються прямокутні імпульси з однією з

чотирьох частот: 1 Гц, 4 кГц, 8 кГц, 32 кГц. Вивід SQW/OUT вимагає зовнішнього

 

 

підтягуючого резистора. SQW/OUT працює як при живленні від VBAT , так і від VCC .

8

 

Напруга живлення +5 В. Коли напруга живлення вище 1.25 * VBAT, DS1307 доступний

 

 

для читання і запису даних. Коли до пристрою підключена батарея на 3 В, і VCC стає

 

V

нижче, ніж 1.25 * VBAT , читання і запис мікросхеми заборонені, але функція відліку

 

CC

часу продовжує працювати. Як тільки значення VCC стає меншим ніж VBAT , ОЗП і

 

 

 

 

ГРЧ перемикаються на батарейне живлення VBAT .

Карта адрес для ГРЧ і регістрів ОЗП представлена уТабл. 2. Регістри ГРЧ розміщенні в комірках пам’яті з адресами– від 00h до 07h. Регістри ОЗП розміщенні в комірках з адресами від 08h до 3Fh. Інформація в регістрах часу та дати представлена в двійково-десятковому коді.

Табл. 2

Регістри зберігання часу та ОЗП DS1307

Адреса

Біт7

Біт 6

 

Біт 5

 

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

Функція

Значення

00H

СН

 

 

 

10 Seconds

 

 

Seconds

 

Seconds

00-59

01H

0

 

 

 

10 Minutes

 

 

Minutes

 

Minutes

00-59

02H

0

12

 

 

10 Hour

 

10

 

 

 

 

 

1-12

 

 

 

 

 

 

 

 

Hours

 

Hours

+AM/PM

 

 

 

 

 

 

 

Hour

 

 

24

 

 

PM/AM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00-23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

03H

0

0

 

 

0

 

 

 

0

 

Day

 

Day

01-07

04H

0

0

 

 

 

10 Date

 

Date

 

Date

01-31

05H

0

0

 

 

0

 

 

10

 

Mounth

 

Mounth

01-12

 

 

 

 

Mounth

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

06H

 

 

10 Year

 

 

 

Year

 

Year

00-99

07H

Out

0

 

 

0

 

 

SQWE

0

0

RS1

RS0

Control

-

08H-3FH

 

 

 

 

 

 

 

 

 

 

 

 

 

RAM 56x8

00H-FFH

Біт 7: CH (Сlock Halt) регістра секунд Seconds (адреса 0х00) включає або виключає внутрішній генератор мікросхеми DS1307. Якщо СН=0, генератор працює і відлік часу ведеться, якщо СН=1 – генератор зупинений і відлік часу не ведеться, проте дані в ОЗП і регістрах зберігаються. Після подачі живлення стан цього біту є невизначеним, тому під час ініціалізації обов’язково потрібно записати в цей біт 0.

Формат регістру управління мікросхемою Control (адреса 0х07) представлений в Табл. 3.

Табл. 3

Біт 7

Біт 6

Біт 5

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

OUT

0

0

SQWЕ

0

0

RS1

RS0

Біт 7: OUT (Output Control) – задає рівень сигналу на виводі SQW/OUT в неактивному стані (коли SQWЕ=0). Якщо OUT=0, на виході SQW/OUT постійно присутній логічний 0, якщо

OUT=1 – логічна 1.

Біт 4: SQWЕ (Square Wave Enable) – якщо цей біт рівний 1, то на виводі SQW/OUT формується послідовність прямокутних імпульсів з частотою, яка задається бітами RS1RS0.

Біти 1. 0: RS1, RS0 (Rate Select) – задають частоту прямокутних імпульсів, що формуються на виводі SQW/OUT відповідно до Табл. 4.

Табл. 4

RS1

RS0

Вивід SQW/OUT

SQWЕ

OUT

0

0

1 Гц

1

Х

0

1

4.096 кГц

1

Х

1

0

8.192 кГц

1

Х

1

1

32.768 кГц

1

Х

Х

Х

0

0

0

87

Х

Х

1

0

1

Мікросхема DS1307 виступає як Slave-пристрій на шиніI2C з адресою 1101000. Після передачі адреси пристрою передається адреса регістру для обміну даними(див. Табл. 2). При кожному послідовному зверненні до внутрішніх регістрів DS1307 вказівник адреси автоматично інкрементується, тому немає необхідності кожен раз передавати адресу регістра.

Протокол обміну даними з ГРЧ DS1307

Цикл запису даних в DS1307

Цикл читання даних в DS1307

Цикл запису і читання даних

Компілятор CodeVisionAVR має спеціальну бібліотеку функцій для роботи з інтерфейсом I2C. Ці функції розглядають мікроконтролер якMaster, а периферійні пристрої– як Slave. Прототипи цих функцій знаходяться у файліi2c.h, який має бути включений у програму директивою #include. Перед використанням директиви #include потрібно вказати порт та виводи МК підключені до шини I2C (SCL, SDA) наступним чином:

#asm

.equ __i2c_port=0x18

// Для інтерфейсу I2C використовується PORTB

.equ __sda_bit=3

// SDA = PB3

.equ __scl_bit=4

// SCL = PB4

#endasm

 

#include <i2c.h>

 

У бібліотеку i2c.h входять такі функції:

void i2c_init(void) – ініціалізує інтерфейс I2C. Ця функція повинна бути викликана перед використанням решти функцій бібліотеки i2c.h.

unsigned char i2c_start(void) – формує умову START на шині I2C. Повертає 1, якщо шина вільна і 0, якщо шина I2C зайнята.

88

void i2c_stop(void) – формує умову STOP на шині I2C.

unsigned char i2c_read(unsigned char ack) – повертає 1 байт зчитаний з шини I2C. Параметр ack задає стан прапорця підтвердження: ack=0 – формується біт NACK, ack=1 – формується біт

ACK.

unsigned char i2c_write(unsigned char data) – записує 1 байт data по шині I2C. Повертає 1,

якщо Slave-пристрій відповів бітом ACK і 0 якщо NACK.

Якщо, наприклад, потрібно ініціалізувати ГРЧ DS1307 датою19.07.10 і часом 18:30:26, то відповідна функція може виглядати таким чином:

void RTC_Init(void)

 

{

// Формуємо умову START на шині І2С

i2c_start();

i2c_write(0xd0);

// Передаємо адресу ГРЧ та вказуємо операцію запису (R/W=0)

i2c_write(0x00);

// Передаємо адресу регістра з якого почнемо запис: 0х00 (Seconds)

i2c_write(0х26);

// Записуємо у регістр Seconds 26 у 2-10 коді і включаємо ГРЧ

i2c_write(0х30);

// Записуємо у регістр Minutes 30 у 2-10 коді

i2c_write(0x18);

// Записуємо у регістр Hours 18 у 2-10 коді та задаємо формат 24 год

i2c_write(0x01);

// Записуємо у регістр Day значення 1 - понеділок

i2c_write(0х19);

// Записуємо у регістр Date 19 у 2-10 коді

i2c_write(0x07);

// Записуємо у регістр Mounth 07 у 2-10 коді

i2c_write(0x10);

// Записуємо у регістр Year 10 у 2-10 коді

i2c_write(0x00);

// Записуємо у регістр Control: вивід SQW/OUT неактивний, нульовий

i2c_stop();

// Формуємо умову STОР на шині І2С

};

 

Інтерфейс SPI

Послідовний периферійний інтерфейсSPI (Serial Peripheral Interface) розроблений для високошвидкісної передачі даних фірмоюMotorola (США) і дає змогу одночасно приймати і передавати 8-бітні дані. Шина SPI складається з трьох основних ліній: лінії синхронізації (SCLK), яка задає швидкість передачі бітів і двох ліній для передачі даних: від ведучого (Master)

до веденого (Slave) – MOSI (Master Out/Slave In) та від веденого до ведучого – MISO (Master In/Slave Out). В інтерфейсі SPI відсутнє поняття адреси, тому для виборуSlave-пристрою, як правило, використовується четверта лінія – вибору веденого SS (Slave Select) – Рис. 15.

Значення швидкості обміну через інтерфейсSPI не стандартизовані і можуть досягати у деяких мікросхем десятків Мбіт. /Існує велика кількість периферійних пристроїв, які підключаються до МК через інтерфейсSPI: давачі фізичних величин(температури, тиску, прискорення і т..п), АЦП, ЦАП, цифрові потенціометри, модулі енергонезалежної пам’яті (MMC/SD-карти, мікросхеми EEPROM-пам’яті) та ін.

Рис. 15. Схема передачі даних по інтерфейсу SPI

Два 8-бітні регістри (джерела і приймача) утворюють єдиний регістр зсуву, з’єднаний в кільце лініями MISO і MOSI. З кожним тактовим імпульсом SCLK з Master-пристрою по лінії MOSI починають виштовхуватися біти, одночасно витісняючи з Slave-пристрою біти по лінії MISO. Через 8 тактів регістри повністю обміняються інформацією між собою(Рис. 16). Таким чином, запис (у Slave) і читання (з Master) фактично представляють собою одну операцію: якщо

89