Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Розділ 3. Мікроконтролери.

Підсистеми і основні робочі модулі у


МК
Тема 3.11. Інтерфейси передачі інформації в мікроконтролерах

Розглянемо типові інтерфейси передачі інформації, які застосовуються


у мікропроцесорній техніці. Серед них окремо можна виділити наступні:
послідовний UART (USART) інтерфейс, послідовний периферійний SPI,
послідовний двопровідний TWI.

14.1. Послідовний UART інтерфейс


Мікропроцесорні системи можуть мати у своєму складі два варіанти
реалізації послідовного каналу передачі інформації:
• вбудований універсальний послідовний асинхронний
прийомо-передатчик (UART);
• універсальний послідовний синхронно/асинхронний
прийомо-передатчик (USART).
Окремі моделі мікроконтролерів та мікропроцесорних систем можуть
мати навіть одразу два таких канали передачі інформації одночасно.
Інтерфейс UART (USART) призначений для обміну даними між
мікропроцесорною системою (мікроконтролером) і будь-яким зовнішнім
пристроєм. Протокол UART (USART) є досить поширеним протоколом
послідовної передачі інформації. Такий протокол, зокрема, використовує і
послідовний порт комп'ютера (COM-порт). Як наслідок, за допомогою UART
(USART) можна організовувати лінію зв'язку між МПС та ПК, так само як і
між двома мікропроцесорними системами.

Рис. 14.1. Підключення ліній передачі інформації по UART

Для обміну даними протокол UART (USART) використовує дві


інформаційні лінії: RxD (Receiver) та TxD (Transmitter). Лінія RxD
використовується для прийому інформації, а лінія TxD для її передачі
відповідно. Для організації належної передачі інформації між двома
пристроями через UART, лінія RxD одного пристрою повинна підключатись
до лінії TxD іншого (рис. 14.1). В іншому випадку, без такого підключення,
процес передачі даних не відбудеться.
Передача інформації у UART-інтерфейсі може бути синхронною і
асинхронною. При синхронній передачі інформації відбувається синхронна
передача окремих бітів даних за допомогою тактових імпульсів. Такий вид
передачі інформації часто використовується на рівні друкованих плат, а також
для реалізації обміну між різними інтегрованими блоками у
мікропроцесорній системі та периферійними схемами (наприклад, при
обробці відеосигналу).
При асинхронній передачі інформації по UART-інтерфейсу
надсилається не тактовий імпульс, а спеціальні старт-біт і стоп-біт. Вони
визначають початок і завершення передачі та іноді мають назву “слово
даних”. Візуалізація процесу асинхронної передачі інформації по UART
показана на рис 14.2.

Рис. 14.2. Приклад передачі інформації у асинхронному режимі через


UART-інтерфейс

Основною сферою застосування асинхронної передачі даних є


комунікація між МПС, що знаходяться не на одній друкованій платі, а
розділені в просторі. Прикладом такої ситуації є зв’язок ПК з принтером або
модемом, регістратором даних, тощо.
Варто зазначити, що у модулях UART пакет даних може бути семи,
восьми або дев'яти розрядним. Водночас, USART працює із довжиною пакету
від п’яти до дев’яти розрядів. Окрім того, модулі UART (USART) можуть
продукувати та контролювати парність розряду. Для роботи з UART
передбачені три види переривань, запит на активацію яких генерується при
настанні наступних подій: «передача завершена», «регістр даних передавача
пустий» і «прийом завершено». Керування роботою UART виконується за
допомогою спеціальних службових регістрів:
● UCR (UART Control Register) - регістр керування роботою UART;
● USR (UART Status Register) - регістр стану UART;
● UDR (UART I/O Data Register) - регістр даних UART.

Швидкість передачі інформації у інтерфейсі визначається спеціальним


внутрішнім програмованим дільником та частотою тактового генератора
МПС. Коефіцієнт дільника може змінюватися від 2 до 65536. Швидкість
передачі залежить від вмісту регістра UBRR та визначається за формулою
(14.1)
𝑓𝐶𝐿𝐾
𝐵𝐴𝑈𝐷 = 16·(𝑈𝐵𝑅𝑅+1)
(14.1)

Де BAUD - швидкість передачі (що вимірюється в бодах), 𝑓𝐶𝐿𝐾 -


тактова частота процесора, 𝑈𝐵𝑅𝑅 - вміст регістру швидкості передачі (від 0
до 4095).
Для належної роботи послідовного каналу передачі інформації та
обміну даними із зовнішніми пристроями коефіцієнт дільника та частоту
тактового генератора підбирають таким чином, щоб отримати одну зі
стандартних швидкостей передачі інформації, на якій може працювати UART
інтерфейс, а саме: 2400, 4800, 9600, 14400, 19200 або 28800 біт за секунду.
UART-інтерфейс реалізований таким чином, щоб мати можливість
відстежувати і сигналізувати про нештатні ситуації, такі як: переповнення
буферу даних, помилку кадрування, неправильний старт-біт, тощо. Для
зменшення ймовірності збоїв в UART-модулях реалізована також функція
фільтрації завад і шумів. А оскільки завжди існує ризик деякого відсоткового
відхилення від стандартної швидкості передачі інформації, що призводить до
зниження захищеності лінії передачі від перешкод, то не рекомендується
вибирати швидкості передачі, при яких похибка перевищуватиме 1%.

14.2. Послідовний периферійний SPI інтерфейс


Це спеціальний інтерфейс передачі інформації розроблений спеціально
для зв'язку декількох МПС одночасно між собою. Канал SPI (рис. 14.3)
використовує для передачі даних три інформаційних лінії: MISO (Master
Input / Slave Output), MOSI (Master Output / Slave Input) та SCK (джерело
тактового сигналу), а також одну лінію керування (вибору підлеглого
пристрою) SS (Slave Select).

Рис. 14.3. Приклад передачі інформації у асинхронному режимі через


UART-інтерфейс

Варто зазначити, що SPI інтерфейс має двояке призначення, адже з


його допомогою можна організувати обмін інформацією не лише між двома
МПС, але й між мікропроцесорною системою та будь-яким периферійним
пристроєм, що має у своєму складі SPI. Прикладом таких пристроїв можуть
бути: цифрові потенціометри, датчики температури, ЦАП / АЦП, зовнішні
Flash та П3П, тощо.
Другим призначенням SPI інтерфейсу є програмування
мікроконтролерів. Саме через такий канал передачі інформації здійснюється
послідовне програмування пам'яті програм та внутрішньої EEPROM
мікропроцесорної системи (або мікроконтролера). Перевагою програмування
МПС через SPI є те, що такий спосіб дозволяє програмувати мікросхему, не
виймаючи її із приладу (його друкованої плати). Такий спосіб програмування
МПС має назву внутрішньосхемне програмування.
Умовою успішного внутрішньо-схемного програмування МПС через
SPI є обов’язкова відсутність інших сигналів на виводах, що служать лініями
передачі інформації у SPI інтерфейсі. Такі лінії повинні бути вимкнені і
використовуватись лише у момент програмування. Зазвичай у друкованій
платі мікропроцесорного пристрою що піддається програмуванню
передбачають спеціальний роз'єм до якого підключається спеціальний SPI -
программатор.
Керування роботою SPI виконується за допомогою набору службових
регістрів:
● SPCR (SPI Control Register) - регістр керування роботою SPI;
● SPSR (SPI Status Register) - регістр стану SPI;
● (SPI I/O Data Register) - регістр даних SPI - SPDR.
В процесі синхронної передачі інформації за допомогою послідовного
периферійного інтерфейсу (SPI) мікропроцесор зазвичай працює у режимі
ведучого пристрою (Master). Водночас, один або декілька пристроїв з якими
здійснюється процес обміну даними працюють у режимі так званих,
підлеглих пристроїв (Slave). Оскільки мікропроцесор є ведучим пристроєм,
то саме він визначає активну частину обміну інформацією, визиваючи
передачу даних і керуючи загальним процесом. В свою чергу, підлеглий
пристрій самостійно не може бути активним. Він приймає і передає дані
лише тоді, коли виконується його активація керуючим пристроєм по лінії SS.
Ведучий пристрій також забезпечує генерування тактових імпульсів по
вихідній лінії SCK. Для підлеглого пристрою лінія SCK є входом, через який
отримуються тактові сигнали від Master-пристрою.
Якщо підлеглий пристрій було активовано по лінії SS, то починається
обмін інформацією за наступним алгоритмом: Master записує байт даних у
здвиговий регістр даних SPDR. З кожним тактовим імпульсом на виході SCK
Master переміщує один біт даних на вихід MOSI, а Slave одночасно у
зворотному напрямку передає один біт на вхід MISO ведучого пристрою
(рис. 14.4).

Рис. 14.4. Приклад передачі інформації по інтерфейсу SPI


Таким чином, за один цикл SPI (вісім тактових імпульсів SCK) Master і
Slave обмінюються одним байтом інформації. По завершенню процесу
передачі даних в регістрі стану інтерфейсу SPI встановлюється спеціальний
прапор. Він вказує на завершення процесу і викликає запит на переривання
(якщо переривання дозволене у системі). По інтерфейсу SPI до
мікропроцесорної системи можна підключати одночасно декілька підлеглих
пристроїв, проте брати участь в обміні інформацією буде лише той, на вхід
SS якого буде подано сигнал логічного нуля (рис. 14.5).

Рис. 14.5. Приклад підключення декількох підлеглих пристроїв до одного


ведучого по інтерфейсу SPI

Підлеглі пристрої у SPI можуть працювати як на прийом так і на


передачу відносно ведучого пристрою, або ж лише на передачу чи лише на
прийом.

14.3. Послідовний двопровідний TWI (I2C) інтерфейс

Це канал передачі інформації що є аналогом шини І2С фірми Philips,


який є досить розповсюдженим у різних системах управління побутовою та
промисловою технікою. TWI - інтерфейс дозволяє об'єднати разом, в одній
системі до 128 пристроїв одночасно, підключивши їх до однієї двопровідної
шини. TWI - інтерфейс дозволяє обмінюватися інформацією між провідним
пристроєм, яким зазвичай є мікропроцесорна система, і будь-яким зовнішнім
пристроєм, підключеним до двопровідної І2С мережі. Водночас, провідний
(ведучий) пристрій може як передавати інформацію на підлеглий пристрій,
так і приймати дані з нього. Наявність TWI - інтерфейсу дозволяє
застосовувати МПС у системах керування телевізорів, дисплеїв на рідких
кристалах, мікросхемах Flash-пам'яті, тощо.
Лінії шини І2С мають наступні назви: SCL (лінія тактового сигналу) та
SDA (лінія передачі даних). У TWI - інтерфейсі також використовується
Master і Slave режим, де такти генерує лише Master - пристрій, а Slave
підтверджує прийом байту інформації. На фізичному рівні прийом та
передача здійснюється шляхом встановлення лінії у логічний “0”, а у
початковий стан логічної “1” система повертається самостійно, внаслідок
застосування “підтягуючих” резисторів (рис. 14.6).

Рис. 14.6. Приклад підключення декількох пристроїв по TWI-інтерфейсу

Застосування резисторів у схемі є обов’язковим, а їх номінал


визначатиме наскільки швидко буде відновлюватись початковий стан лінії до
якого вони підключені. Чим вищим є номінал резистору, тим довше
триватиме відновлення лінії і падатиме швидкість передачі інформації.
Оптимальним номіналом резистору вважається 10 кОм. Зазвичай I2C -
інтерфейс працює або у повільному режимі (зі швидкістю 10кбіт/с), або у
швидкому (100 кбіт/с). Однак, швидкість передачі інформації по TWI можна
плавно змінювати, навіть до нуля.
Процес передачі інформації у TWI-інтерфейсі (рис. 14.7) складається із
трьох основних етапів: стартової посилки, бітів інформації та
стоп-посилки. Тип посилки визначає і рівень сигналу, що надсилається на
шину.

Рис. 14.7. Приклад передачі інформації по TWI-інтерфейсу

Після старту передача одного біта інформації відбувається по


тактовому імпульсу. Тобто, коли лінія SCL знаходиться в стані логічного
нуля, Мaster або Slave виставляють біт на SDA та після цього відбувається
відпускання SCL і зчитування біта інформації на Master або Slave пристрої.
Як наслідок, протокол передачі інформації не залежить від часових
інтервалів, а обмежується лише тактовими бітами. Покроковий алгоритм
передачі заключається в наступному:
● Початок передачі визначається Start послідовністю (спад по SDA
при високому рівні на SCL);
● При передачі інформації від Master до Slave, ведучий пристрій
генерує такти на SCL і видає біти на SDA. Підлеглий пристрій
зчитує момент, коли SCL переводиться у стан логічної “1”.
● При передачі інформації від Slave до Master, ведучий пристрій
генерує такти на SCL і спостерігає за процесом зчитування даних
на лінії SDA. Водночас, підлеглий пристрій при переведенні SCL
в стан логічного “0”, виставляє на SDA біт, який в подальшому
Master зчитує, при переведенні SCL у високий логічний рівень.
● Кінець передачі, що визначається Stop-послідовністю (при
високому рівні на SCL лінія SDA переходить з низького на
високий рівень).

Будь-які зміни на шині даних в момент прийому інформації можуть


відбуватись лише при наявності низького логічного рівня на лінії SCL. Коли
на SCL знаходиться високий логічний рівень - це свідчить про процес
зчитування інформації. Якщо ж стан лінії SDA змінюється при наявності
високого логічного рівня на SCL - це свідчить про наявність службових
команд START або STOP.
Розглянемо призначення бітів інформації, що передаються по
TWI-інтерфейсу. На відміну від SPI, І2С протокол передачі інформації
передбачає роботу із розумною адресною структурою.Тут дані надходять
пакетами (рис. 14.8), кожен з яких складається із дев'яти біт (8 біт даних та
один біт “підтвердження/не підтвердження прийому”).

Рис. 14.8. Структура службового пакету для TWI-інтерфейсу

Перший пакет, що надсилається від ведучого до підлеглого пристрою


включає його фізичну адреса і біт напрямку передачі інформації. Тобто,
сама адреса складається із семи бітів, а восьмий біт - визначає що робитиме
Slave на наступному байті - буде приймати або передавати інформацію.
Дев'ятим бітом виступає так званий “біт підтвердження” ACK.
Якщо Slave “побачив” свою адресу і зчитав її повністю, то на дев'ятому
такті він надішле на лінію SDA логічний нуль, згенерувавши при цьому ACK
(тобто, фактично, надіславши на Master відповідь “Зрозумів!”). В свою чергу
Master, помітивши біт ACK розуміє, що робочий процес виконується успішно
і його можна продовжувати. Якщо ж Slave є неактивним (пропущена адреса,
неправильно прийнятий байт, тощо) то на дев'ятому такті лінія SDA не
змінить свій стан і генерування ACK не відбуватиметься. У такому випадку,
з’являється біт NACK, при виявленні якого Master не буде продовжувати
процес.
Після надсилання першого (адресного) пакету до шини
надсилатимуться інформаційні пакети у напрямку, який було задано у біті
R/W (Read або Write, відповідно) адресного пакету. На рис. 14.9 показано
приклад структури характерної для запису (Write) та зчитування інформації
(Read).

Рис. 14.9. Структура інформаційного пакету для TWI-інтерфейсу

Як видно з рис. 14.9, структури пакетів є майже ідентичними, однак у


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

You might also like