Трансівер PDI відповідає за обробку сигналів послідовного інтерфейсу на фізичному рівні. Трансівер утворений двонаправленим напівдуплексним синхронним послідовним приймачем і передавачем (ідентичний USART в режимі USRT). Трансівер підтримує можливості виявлення початку посилки, помилок в посилці, генерації паритету, виявлення помилок паритету і виявлення колізій.
PDI доступний через два висновки:
- PDI_CLK: вхід синхронізації PDI (висновок Reset).
- PDI_DATA: вхід / вихід PDI (висновок Test).
Крім цих двох висновків, у зовнішнього програматора / відладчика і мікроконтролера необхідно з'єднати лінії VCC і GND. Типове підключення показано на малюнку 29.2.
Малюнок 29.2. Підключення до інтерфейсу PDI
Інша частина даного розділу орієнтована на виробників засобів програмування мікроконтролерів XMEGA.
29.3.1. дозвіл роботи
Перед тим як використовувати трансивер PDI необхідно дозволити його роботу. Для цього, спочатку необхідно перевести лінію PDI_DATA в високе стан на час, який більше мінімальної тривалості зовнішнього імпульсу скидання (тривалість зовнішнього імпульсу скидання уточніть в документації на мікроконтролер). В результаті такої операції, відключається функція скидання у висновку Reset (за умови, що ця функції не була відключена перш fuse-бітом).
Черговим дією, спрямованою на дозвіл роботи PDI, є утримання лінії PDI_DATA в високому стані протягом 16 циклів PDI_CLK (16 наростаючих фронтів). Перший цикл PDI_CLK повинен з'явитися з затримкою не більше 100 мкс після відключення функції скидання у висновку Reset. Якщо ця вимога не виконати, функція скидання виведення Reset буде автоматично відновлено і послідовність дозволу роботи PDI доведеться повторити заново.
Після виконання всіх описаних дій, PDI включається в роботу і готовий до прийому інструкцій. Послідовність дозволу роботи показана на малюнку 29.3.
На виведення PDI_DATA є внутрішній підтягаючий до мінуса резистор, який активізується одночасно з PDI.
Малюнок 29.3. Послідовність дозволу роботи PDI
Якщо частота синхронізації на лінії PDI_CLK виявиться меншою приблизно 10 кГц, це буде сприйматися як неактивність лінії синхронізації і призведе до відключення PDI і відновлення функції скидання у висновку Reset (PDI_CLK), але за умови, що функція скидання була відключена fuse-бітом. Якщо в процесі вирішення роботи виникнуть надмірні затримки, послідовність дозволу роботи PDI доведеться почати заново.
Зі сказаного випливає, що мінімальна частота програмування дорівнює приблизного 10 кГц.
29.3.3. Формат посилки і символи
Інтерфейс PDI використовує фіксований формат посилки. Послідовна посилка утворена 8 бітами даних, старт-бітом, стоп-бітами і бітом паритету.
Малюнок 29.4. Формат посилки інтерфейсу PDI
Передбачено три символи: DATA, BREAK і IDLE. Символ BREAK генерується передачею 12 біт низького рівня. Символ IDLE дорівнює за тривалістю 12 бітам високого рівня. Обидва символи, BREAK і IDLE, можуть бути довше за тривалістю, ніж 12 біт.
Малюнок 29.5. Символи і тимчасові діаграми інтерфейсу PDI
29.3.4. Послідовні передача і прийом
Трансівер PDI може працювати або в режимі передачі (TX), або в режимі прийому (RX). За замовчуванням він працює в режимі RX, чекаючи прийом старт-біта.
Програматор і PDI працюють синхронно з сигналом PDI_CLK, який генерує програматор. Залежність між фронтами імпульсів синхронізації і вибіркою або зміною даних фіксована. Як показано на малюнку 29.6 висновок даних (або з програматора, або з PDI) завжди відбувається по падаючому фронту PDI_CLK, а вибірка даних - по наростаючому фронті PDI_CLK.
Малюнок 29.6. Зміна і вибірка даних
29.3.5. Послідовна передача даних
Після ініціації передачі даних (контролером PDI), передавач передає зрушенням по лінії PDI_DATA старт-біт, біти даних, біт паритету і два стоп-біта. Швидкість передачі задається сигналом PDI_CLK. У режимі передачі, біти IDLE (одиничні біти) автоматично передаються для заповнення пауз, утворених в процесі передачі символів DATA. При виявленні в ході передачі колізії, вихідний драйвер відключається, а інтерфейс переходить в режим прийому RX. чекаючи надалі символ BREAK.
29.3.5.1. Виявлення конфліктів управління і колізій
Щоб уникнути конфліктів управління, коли і PDI і програматор намагаються одночасно керувати лінією PDI_DATA), передбачений механізм виявлення колізій. Цей механізм полягає в способі управління виводу даних інтерфейсу PDI на лінію PDI_DATA. Як показано на малюнку 7, драйвер виходу активізується тільки тоді, коли необхідно змінити стан виходу (з 0 в 1 або з 1 в 0). Це означає, що, якщо поспіль передаються два або більше біт з одним і тим же значенням, для передачі цього значення драйвер активний лише під час першого циклу синхронізації. Після закінчення першого циклу відбувається відключення драйвера і надалі його вихід знаходиться в високоімпедансних стані, а за підтримку встановленого рівня на лінії PDI_DATA аж до моменту чергової активізації драйвера відповідає схема адаптивної підтяжки.
Малюнок 29.7. Управління висновком даних на лінію PDI_DATA з використанням адаптивної підтяжки
Ситуація, коли програматор і PDI одночасно керують лінією PDI_DATA, показана на малюнку 29.8. Можливість визначити коректність рівня, присутнього на лінії PDI_DATA, інтерфейс PDI отримує в тих випадках, коли поспіль передається два або більше біт з одним і тим же значенням. Колізія виявляється, якщо програматор перевів лінію PDI_DATA в стан, який протилежно очікуваному інтерфейсом PDI станом.
Малюнок 29.8. Виявлення конфліктів управління і колізій на лінії PDI_DATA
Якщо ж PDI буде передавати чергування одиниць і нулів, то колізію можна буде виявити, тому що драйвер виходу буде постійно активний, виключаючи можливість виконання опитування лінії PDI_DATA. Проте, кожна посилка містить як мінімум одну послідовність двох однакових біт (поодинокі стоп-біти) і, тому, при передачі кожної посилки колізія може бути виявлена як мінімум один раз.
29.3.6. послідовний прийом
Після виявлення старт-біта, приймач переходить до прийому 8 біт даних за допомогою зсувного регістру. Якщо прийнятий біт паритету НЕ дорівнює паритету прийнятих біт даних, виникає помилка паритету. Якщо один або обидва стоп-біти рівні нулю, виникає помилка посилки. Якщо біт паритету має коректне значення і помилка посилки не виявлено, прийняті біти даних стають доступними для зчитування PDI-контролером в паралельному форматі.
29.3.6.1. Виявлення символу BREAK
Коли PDI знаходиться в режимі передачі, переданий программатором символ BREAK буде інтерпретований не як символ BREAK, а як колізія передачі даних. Якщо ж PDI працює в режимі прийому, символ BREAK буде розпізнаватися за призначенням. При передачі двох поспіль символів BREAK (повинні бути відокремлені одним або більшим числом одиничних біт), останній символ BREAK буде завжди розпізнаватися за призначенням, незалежно від того, в режимі читання або передачі спочатку знаходився PDI.
29.3.7. зміна напрямку
Для забезпечення коректності тимчасової діаграми полудуплексной передачі, передбачений простий механізм захисного інтервалу (Guard Time), який вступає в дію при кожній зміні напрямку передачі інтерфейсу PDI. Коли PDI перемикається з режиму прийому в режим передачі, перед передачею старт-біта вставляються додаткові біти IDLE, кількість яких задається користувачем. Мінімальна затримка переходу з режиму RX в режим TX дорівнює двом циклам IDLE. Збільшити тривалість такої затримки можна записом відповідного значення в біти GUARDTIME регістра управління контролера PDI. Значення за замовчуванням біт GUARDTIME призводить до максимального збільшення затримки на 128 біт.
Малюнок 29.9. Зміна напрямку PDI шляхом вставки біт IDLE
Програматор втрачає управління над лінією PDI_DATA в точці, де цільової PDI переходить з режиму RX в режим TX. Введення захисного інтервалу дозволяє зробити менш критичною дану фазу передачі. Якщо програматор переходить з режиму RX в режим TX, то перед передачею старт-біта повинен бути вставлений мінімум один біт IDLE.