Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

По сигнал /WE (Write Enable – разрешение записи) выбранная микросхема SRAM записывает данные с линий D0 … Dm в ячейку, двоичный адрес которой установлен на линиях A0 … An



Рис.9. Интерфейс микросхемы статического ОЗУ

По сигналу /OE (Output Enable – разрешение выдачи данных) выбранная микросхема SRAM выставляет данные на линии D0 … Dm из ячейки, двоичный адрес которой установлен на линиях A0 … An.

На рис. 10 приведена временная диаграмма цикла записи SRAM. Время установки (setup time) определяет минимальное время для подачи сигнала /WE после установки линий адреса (время необходимое для дешифрации адреса ячейки).

Время сохранения (hold time) определяет минимальное время до очередного изменения адресных линий после снятия сигнала /WE (время необходимое для предотвращения перезаписи данных в другую ячейку).

На рис. 11 приведена временная диаграмма цикла чтения статического ОЗУ.

Рис. 10. Временная диаграмма цикла записи статического ОЗУ

Рис. 11. Временная диаграмма цикла чтения статического ОЗУ

1.5.1. 2. Динамическое ОЗУ

В динамическом ОЗУ (DRAM) в качестве запоминающего элемента используется паразитная емкость pn-перехода, которая через МОП транзистор может быть подключена к схемам чтения или записи. На рис.12 приведена модель динамического ОЗУ, организованного в виде матрицы.

Рис.12. Модель динамического ОЗУ

Конденсатор С может быть заряжен или разряжен, что позволяет говорить о хранении 0 или 1. Электрический заряд конденсатора стекает за несколько десятков миллисекунд, поэтому каждый бит информации должен обновляться (регенерировать) для предотвращения разрушения данных.

Во время выборки строки все соответствующие транзисторы открываются, и конденсаторы строки разряжаются. Токи разряда поступают на входы запоминающих усилителей считывания, формируя на их выходах соответствующие напряжения 0 или 1. Таким образом, и при обращении к строке данные разрушаются. Поэтому перед выборкой следующей строки, данные должны быть перезаписаны из запоминающих усилителей считывания в ранее выбранную строку.

В динамическое ОЗУ на каждый бит требуется один конденсатор и один транзистор, поэтому такое ОЗУ имеет высокую плотность данных. Поэтому MM во многих MPS строится на основе динамического ОЗУ. Однако динамическое ОЗУ работает значительно медленнее. Таким образом, сочетание кэш-памяти на основе статического ОЗУ и MM на основе динамического ОЗУ соединяет в себе преимущества обоих устройств.

Существует несколько типов динамических ОЗУ. Самый старый называется FPM (Fast Page Mode – быстрый страничный режим). Под страницей динамического ОЗУ понимают все множество ячеек памяти, принадлежащих одной строке. На смену FPM пришла EDO (Extended Data Output – память с расширенными возможностями выходов данных) с конвейеризацией адресов и данных, что увеличило пропускную способность памяти.

Оба эти типа динамических ОЗУ являются асинхронными. На рис.13 приведен интерфейс микросхем асинхронных динамических ОЗУ. Первой выбирается строка. Для этого номер строки помещается на адресные выводы А0…Аn. Затем устанавливается сигнал /RAS (Row Address Strob – строб адреса строки). После этого на адресные выводы подается номер столбца и устанавливается сигнал /CAS (Colum Address Strob). И, наконец, сигналы /OE или /WE.

Рис.13. Интерфейс микросхемы асинхронного динамического ОЗУ

Регенерация всех ячеек строки выполняется установкой ее номера на адресных линиях и сигналов /RAS и /CAS (алгоритм CBR – Cas Befor Ras, т.е. /CAS устанавливается чуть раньше /RAS). В течении нескольких миллисекунд необходимо перебрать все строки и вся память будет регенерирована.

На смену асинхронным пришли синхронные динамическим ОЗУ (SDRAM), все действия в которых происходят по фронту или срезу синхронизирующего сигнала CLK. С целью совмещения операций ячейки сгруппированы в несколько банков (обычно 4) – расслоение или чередование (interleaving) памяти. Это дает возможность повысить производительность памяти. На рис.14 приведен интерфейс микросхем SDRAM.

Рассмотрим взаимодействие с SDRAM стандарта JDEC. Ниже приведены

интерфейсные команды этого стандарта.

BANK-ACTIVATE: запоминание адреса строки. Содержимое строки (страница) считывается в запоминающие усилители считывания. Такую стра ницу называют открытой.

MODE-SET: установка параметров SDRAM (передаются через адресныелинии). Скрытый период после сигнала CAS (CAS latency - CL) – задержка выдачи данных после сигнала CAS (1,2,3, … такта). Блочный режим передачи (burst) и длина блока – последовательная передача соседних данных. Длина блока (BL) может быть 1,2,4,8 слов или страница. На рис.15 приведен формат слова параметров. Слово параметров SDRAM устанавливается на линиях адреса и сопровождается установкой сигналов /RAS, /CAS и /WE.

PRECHARGE (SINGLEBANK/ALLBANKS): перезапись данных из усилителей считывания в соответствующую строку. Эта команда должна выполняться всякий раз после записи или чтения, если адрес строки изменяется при следующем доступе. Выполнение команды PRECHARGE при А10=1 приводит к перезаписи выбранной строки во всех банках.

Рис.14. Интерфейс микросхемы синхронного динамического ОЗУ

Рис.15. Формат слова параметров SDRAM

READ: запоминание адреса колонки и передача данных из выбранных усилителей считывания в выходной буфер. В конце блочной передачи выбранная страница остается открытой.

REFRESH: чтение строки во всех банках. Номер строки определяется внутренним регенерационным счетчиком адреса строки. После начала чтения строка автоматически перезаписывается. Все банки перед регенерацией должны быть в состояние PRECHARGE.

Регенерация очередной страницы запускается установкой сигналов /RAS и /CAS (алгоритм CBR).

WRITE: запоминание адреса колонки и передача данных с линий D

в выбранные усилители считывания. Во время каждого последующего тактового импульса при блочной передаче данные запоминаются без дополнительной операции WRITE. В конце блочной передачи выбранная страница остается открытой.

SDRAM поддерживает плотный (back-to-back) страничный режим доступа. Это означает, что страница остается открытой пока доступ вплотную осуществляется к ячейкам в пределах открытой страницы или пока магистраль не начнет выполнять холостые циклы.

SDRAM поддерживает конвейеризацию. Это означает, что доступ к следующим данным может происходить минимум через 0 тактов.

SDRAM поддерживает расслоение банков. Это означает, что если происходит обращение к другой странице в другом банке, то сначала выдается команда BANK-ACTIVATE для новой страницы, а затем PRECHARGE для старой страницы. Это уменьшает накладные расходы, связанные с де активизацией старой страницы.

Существует два варианта перекрытия внутренних банков SDRAM. Первый называют перекрытием страниц. В этом случае адрес ячейки памяти структурируется следующим образом (слева старшая часть адреса):

номер строки – номер банка – номер колонки.

В случае варианта с перекрытием банков адрес ячейки памяти структурируется следующим образом:

номер банка - номер строки – номер колонки.

Первый вариант обеспечивает большую производительность. На рис.16 приведена временная диаграмма чтения блока данных (BL=4, CL=3) при промахе страницы. Сначала де активизируется ранее выбранная страница, затем активизируется новая страница. Установка сигналов /CAS и /DQM запускают чтение четырех рядом расположенных слов.

SDRAM выполняет блочную передачу для каждой транзакции. При чтении, если требуется данных меньше чем длина блока, то инициатор транзакции игнорирует ненужные прочитанные данные. При записи, если требуется записать меньше данных, чем длина блока, инициатор транзакции подавляет запись лишних данных сбросом линий /DQM. На рис.17 приведена временная диаграмма конвейеризованных транзакций чтения после записи к открытой странице

.

Рис.16. Временная диаграмма чтения блока данных (BL=4, CL=3)

Рис.17. Временная диаграмма конвейеризованных транзакций чтения после записи к открытой странице

1.5.2. Постоянное запоминающее устройство (ROM)

PROM (Programmable ROM) — программируемое ПЗУ (ППЗУ), обычно относят к OTPROM (One Time Programmable ROM) — «Однократно Программируемое ПЗУ». К PROM также относят и «Масочное ПЗУ» — вариант OTPROM, который программируется не самим пользователем, а на фабрике в процессе изготовления.

EPROM (Erasable Programmable ROM) — стираемая/программируемая ROM. По-русски иногда называют ПППЗУ («Перепрограммируемое ПЗУ»). Иногда употребляется как синоним UV-EPROM.

EEPROM (Electrically Erasable Programmable ROM) — электрически стираемое перепрограммируемое ПЗУ, ЭСППЗУ.
UV-EPROM (Ultra-Violet EPROM) — ультрафиолетовая EPROM, УФППЗУ. Исторически первая коммерческая разновидность EPROM, операция стирания в которой производится ультрафиолетом через специальное окошко.
Flash memory — первоначально термин придуман для обозначения прогрессивной разновидности EEPROM, в которой чтение/запись для ускорения процесса производятся сразу целыми блоками. Позднее (когда медленная EEPROM исчезла из обращения) стал фактическим синонимом EEPROM и теперь обозначает ее любые разновидности.

На рис.18 представлено устройство элементарной ячейки, лежащей в основе всех современных типов флэш-памяти. Если исключить из нее «плавающий затвор», мы получим самый обычный полевой транзистор — такой же, как тот, что входит в ячейку DRAM. Если подать на управляющий затвор такого транзистора положительное напряжение, он откроется, и через него потечет ток (состояние «логическая единица»).

Рис.18. МОП транзистор с плавающим затвором

На рис.18 изображен именно такой случай, когда плавающий затвор не оказывает никакого влияния на работу ячейки, — такое состояние характерно для «чистой» флэш-памяти, в которую еще ни разу ничего не записывали. Если же разместить на плавающем затворе некоторое количество зарядов — свободных электронов, то они будут экранировать действие управляющего электрода, и такой транзистор вообще перестанет проводить ток. Это состояние — «логический ноль”. Поскольку затвор «плавает» в толще изолятора (двуокиси кремния, SiO2), то сообщенные ему однажды заряды в покое никуда деться не могут. И записанная таким образом информация может храниться десятилетиями (производители обычно дают гарантию 10 лет, но на практике это время значительно больше).

В первых образцах EPROM (UV-EPROM —стирались ультрафиолетом) слой окисла между плавающим затвором и подложкой был достаточно толстым (50 нанометров), и работало все это довольно грубо. При записи на управляющий затвор подавали достаточно высокое положительное напряжение — до 36–40 В (что для микроэлектронной техники считается просто катастрофическим перенапряжением), а на сток транзистора — небольшое положительное. При этом электроны, которые двигались от истока к стоку, настолько ускорялись полем управляющего электрода, что барьер в виде изолятора между подложкой и плавающим затвором просто «перепрыгивали». Такой процесс называется еще инжекцией горячих электронов. Ток заряда при этом достигал миллиампера — можете себе представить, каково было потребление всей схемы, если в ней одновременно заряжать хотя бы несколько тысяч ячеек. И хотя такой ток требовался на достаточно короткое время (хотя с точки зрения быстродействия схемы не такое уж и короткое — миллисекунды), это было крупнейшим недостатком всех старых образцов EPROM-памяти. Еще хуже другое — и изолятор, и сам плавающий затвор долго не выдерживали, постепенно деградируя, отчего количество циклов записи/стирания было ограничено несколькими сотнями, максимум — тысячами. Во многих образцах флэш-памяти (даже более поздних) была предусмотрена специальная схема для хранения карты «битых» ячеек — в точности так, как это делается в жестких дисках. В современных моделях такая карта, кстати, тоже имеется — однако число циклов стирания/записи возросло до сотен тысяч и даже миллионов.

Рассмотрим, как осуществлялось в этой схеме стирание. В упомянутой UV-EPROM при облучении ультрафиолетом фотоны высокой энергии сообщали электронам на плавающем затворе достаточный импульс, чтобы они «прыгали» обратно на подложку самостоятельно, без каких-либо электрических воздействий. В электрически стираемой памяти (EEPROM) использован «квантовый эффект туннелирования Фаулера-Нордхейма». При достаточно тонкой пленке изолятора (10 нм) электроны, если их слегка «подтолкнуть» не слишком высоким напряжением в нужном направлении, могут «просачиваться» через барьер, не перепрыгивая его. Старые образцы EEPROM именно так и работали: запись производилась горячей инжекцией, а стирание — квантовым туннелированием. Оттого они были довольно сложны в эксплуатации. Первые микросхемы EEPROM требовали два, а то и три питающих напряжения, причем подавать их при записи и стирании требовалось в определенной последовательности. Поэтому разработчики предпочитали использовать более дешевую, удобную, скоростную и надежную статическую память (SRAM), пристраивая к ней резервное питание от литиевых батареек, которые были достаточно дешевыми. Компания Dallas Semiconductor выпустила специальный тип NVRAM с батарейкой, встроенной прямо в микросхему.

Превращение EEPROM во Flash происходило по трем разным направлениям. Во-первых, усовершенствовалась конструкция самой ячейки. Для начала избавились от «горячей инжекции». Вместо нее при записи стали также использовать квантовое туннелирование, как и при стирании. Если при открытом транзисторе подать на управляющий затвор достаточно высокое (но значительно меньшее, чем при «горячей инжекции») напряжение, часть электронов, двигающихся через открытый транзистор от истока к стоку, «просочится» через изолятор и окажется на плавающем затворе. Потребление тока при записи снизилось на несколько порядков. Изолятор, правда, пришлось сделать еще тоньше, что обусловило довольно большие трудности с внедрением этой технологии в производство.

Во-вторых, ячейку сделали несколько сложнее, пристроив к ней второй транзистор (обычный), который разделил вывод стока и считывающую шину всей микросхемы. Благодаря этому (вместе с отказом от горячей инжекции) удалось добиться значительного повышения долговечности — до сотен тысяч, а в настоящее время — до миллионов циклов записи/стирания. Кроме того, схемы формирования высокого напряжения и соответствующие генераторы импульсов записи/стирания перенесли внутрь микросхемы, отчего пользоваться такими типами памяти стало несравненно удобнее — они стали питаться от одного напряжения (5 или 3,3 В).

И наконец, в-третьих, изменилась организация доступа к ячейкам на кристалле (NAND и NOR Flash [11, 12].

1.6. Иерархия памяти

Многие приложения требуют значительного количества памяти, больше чем содержится на кристалле микроконтроллера, поэтому встроенные системы используют иерархию памяти, объединяющую различные технологии для увеличения общей емкости, а также для оптимизации стоимости, задержки и потребления энергии.

Обычно относительно небольшого объема SRAM на кристалле процессора используется вместе с памятью DRAM большого объема вне кристалла процессора. Эта память в дальнейшем может быть объединена с памятью третьего уровня, такой как дисковое запоминающее устройство имеющего очень большую емкость, но без произвольного доступа, что увеличивает время записи и чтения. Прикладной программист может и не знать, что память так фрагментирована. Использование рассмотренной выше схемы виртуальной памяти делает эти разнообразные технологии памяти такими, что на взгляд программиста он имеет дело с непрерывным адресным пространством.

Операционная система и/или аппаратные средства обеспечивают механизм трансляции адресов, который преобразует логический адрес в физический адрес доступной технологии памяти. Эта трансляция часто выполняется специализированной частью аппаратуры под названием TLB (translation look-aside buffer или буфер быстрого преобразования), ускоряющей преобразование адресов. Для разработчиков встроенных систем эта техника может создать серьезные проблемы, т.к. трудно предсказать или понять как будет выполняться доступ к большой памяти. Разработчикам встроенных систем обычно необходимо более глубоко понимать системы памяти. чем программистам, создающих программы общего назначения.

1.6.1. Распределение или карта памяти

Карта памяти процессора определяет, как адреса отображаются на аппаратуру. Общий размер адресного пространства ограничивается разрядностью адреса процессора. 32-разрядный процессор, например, может адресовать 2^32 ячеек или 4 Гбайт, полагая, что каждый адрес относится к одному байту. Разрядность адреса обычно совпадает с разрядностью слова (данных) за исключением 8-разрядных процессоров, у которых разрядность адреса обычно выше (16 бит). На рис.19 в качестве примера приведена карта памяти процессора с архитектурой ARM CortexTM - M3.

Рис.19. Карта памяти процессора с архитектурой ARM CortexTM - M3

Эта архитектура Гарвардского типа, поэтому область А может быть доступна по своей магистрали, а области В и D – по своей. Это удваивает полосу пропускания.

Некоторые реализации в кристалле этой архитектуры ограничивают ее карту памяти. Например, микроконтроллер Luminary Micro LM3S8962 имеет 256 KB flash памяти вместо допустимой flash памяти 0.5 GB. Эта память отображается на пространство 0x00000000 - 0x0003FFFF. Оставшееся пространство 0x00040000 - 0x1FFFFFFF осталось резервным. Это означает, что целевой компилятор не будет его использовать.

LM3S8962 имеет 64 KB SRAM, отображенные на 0x20000000 -0x2000FFFF, маленькую область в B. Он также содержит периферию (устройства), доступную через область C (0x40000000 - 0x5FFFFFFF). К этим устройствам относятся таймеры, ADC, GPIO, UART и другие устройства ввода-вывода. Каждое из устройств занимает небольшое число адресов памяти для реализации регистров, отображаемых на память. Процессор микроконтроллера может записывать данные в некоторые из них для конфигурирования устройств или выдачи данных на их выходы. Некоторые из регистров могут быть прочитаны для ввода данных из периферии. Небольшое количество адресов из области магистраль частной периферии используется для доступа к контроллеру прерываний

К LM3S8962 можно подключить дополнительно внешние память DRAM (в область Е) и устройства, такие как LCD дисплей, слот MicroSD и USB интерфейс. При этом остается много неиспользуемого адресного пространства. В архитектуре АРМ введен механизм под названием bit banding (привязка бит), который позволяет через неиспользуемые адреса осуществлять доступ к индивидуальным битам в памяти и периферии.

1.6.2. Блокнотная и кэш память

Многие встроенные системы используют в своем составе память различных технологий. Некоторая память может быть доступна перед другой памятью. Говорят, что эта первая память является закрытой процессором. Например, закрытая память (SRAM) обычно используется для сохранения рабочих данных временно, пока процессор оперирует с ними.

Если закрытая память имеет отдельное множество адресов и программа отвечает за перемещение данных в них или из них и удаленную память, то такую память называют сверхоперативной или блокнотной (scratchpad).

Если закрытая память дублирует данные в удаленной памяти, автоматически копируя их туда и обратно, такую память называют кэш памятью.

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

Пусть процессор поддерживает виртуальную память и оборудован MMU для трансляции адресов, имеет карту памяти как на рис. 18. и пусть некоторому процессу может быть разрешено использовать логические адреса из области D (1 GB). MMU может реализовать кэш в области В, достаточного объема. Когда программа выдает адрес памяти, MMU определяет находится ли он в области В и если да,то транслирует адрес и выполняет выборку. Если нет, то фиксируется промах кэш и MMU управляет выборкой данных из вторичной памяти (область D) в кэш (область В). Если ячейки нет и в области D,то MMU фиксирует ошибку страницы, в результате программное обеспечение управляет перемещением данных из диска в память. Так программа создает иллюзию огромной памяти. Расплата за это - трудность в предсказании времени доступа.

Итак, кэш-память – это быстродействующая память буферного типа, заполняемая с умеренной скоростью из ОП. Кэш-память по сравнению с другими видами памяти MPS имеет минимальное время доступа и используется для хранения только тех данных, которые могут понадобиться CPU в ближайшее время.

В МП находится небольшая кэш-память для команд и небольшая кэш-память для данных (разделенная кэш-память первого уровня). Кэш-память второго уровня расположена вне МП и соединена с ним через высокоскоростную магистраль. Эта кэш-память обычно не является разделенной и содержит смесь данных и команд. Ее размер гораздо больше. Кэш-память третьего уровня – это статическое оперативное запоминающее устройство (ОЗУ) в несколько мегабайтов, работающее гораздо быстрее чем динамическое ОЗУ. Обычно все содержимое кэш-памяти первого уровня находится в кэш-памяти второго уровня, а все содержимое кэш-памяти второго уровня находится в кэш-памяти третьего уровня.

Во всех типах кэш-памяти используется следующая модель. MM разделяется на блоки фиксированного размера, которые называются строками кэш-памяти. Строка кэш-памяти состоит из нескольких последовательных байтов (обычно от 4 до 64). В любой момент несколько строк находятся в кэш-памяти. Когда происходит обращение к кэш-памяти, контроллер кэш-памяти проверяет, есть ли нужное слово в данный момент кэш-памяти. Если есть (попадание), то можно сэкономить время, требуемое на доступ к ОП. Если данного слова в кэш-памяти нет (промах), то какая-либо строка из нее удаляется, а вместо нее помещается нужная строка из MM или из кэш-памяти более низкого уровня.

1.6.2.1. Кэш-память прямого отображения

Кэш-память прямого отображения является самым простым типом кэш-памяти. На рис.20 приведен пример одноуровневой кэш памяти, содержащей 1024 блока по 32 байта.

Рис.20. Кэш-память прямого отображения и формат адреса

Каждый элемент кэш-памяти состоит из трех частей:

1) Поле Tag (бирка) содержит старшие 17 разрядов адреса памяти, из которого поступил блок данных (адрес блока).

2) Поле Valid (действительно) содержит сведения о достоверности данных.

3) Поле Block содержит копию блока данных памяти.

В кэш-памяти прямого отображения данный блок может храниться только в одном месте по номеру блока. Когда процессор выдает адрес памяти, контроллер кэш-памяти выделяет из этого адреса 10 бит номера блока и использует их для поиска в кэш-памяти одного из 1024 элементов. Если этот элемент действителен, то производится сравнение поля Tag адреса и поля Tag кэш-памяти. Если поля равны, то попадание, иначе – промах. В случае попадания слово считывается из кэш-памяти. При промахе или недействительности, блок вызывается из памяти и сохраняется в кэш-памяти, заменяя тот блок, который там был.

1.6.2.2. Ассоциативная по множеству кэш-память

В кэш-памяти прямого отображения одноименные блоки MM конкурируют за право занять одну и ту же область в кэш-памяти. Если программе часто требуются ячейки с адресами 0х00000000 и 0х0000800000, то будут иметь место постоянные конфликты и каждое обращение повлечет за собой замещение нулевого блока. Чтобы разрешить эту проблему, нужно сделать так, чтобы одноименные блоки помещались в нескольких местах (множествах) кэш-памяти.

На рис.21. приведена ассоциативная по множеству кэш-память. Такая память сложнее предыдущей, поскольку требуется проверить все множества, чтобы узнать, есть ли нужный блок. Память для хранения тэгов адресов реализуется как ассоциативная, что позволяет исключить перебор при поиске места блока.

Если нужно поместить новый блок в кэш-память, то какой из старых блоков нужно заместить? Для этого хорошо подходит рассмотренный выше алгоритм LRU.

Обобщим параметры кэш памяти:

m – разрядность адреса памяти;

M = 2^m – величина адресного пространство в байтах;

S = 2^s – число множеств кэш;

E – число линий (входов) в множестве;

B = 2^b – размер блока в байтах;

t = m * s*b – число бит тега;

C – общий размер кэш в байтах.

Таким образом, кэш может быть охарактеризована четверкой (m,S,E,B), а общий размер кэш составляет C = S*E *B байт.

1.6.2.3. Обновление кэш-памяти.

При работе с кэш-памятью одновременно могут существовать две копии одних и тех же данных: одна в кэш, а другая в основной памяти. В MM данные может изменять не только процессор, но и устройства ввода-вывода, работающие по каналу прямого доступа в память. Поэтому необходимо поддерживать их непротиворечивость или когерентность.

В MPS c несколькими МП, разделяющих общую MM, также необходимо поддерживать когерентность, но уже и кэш этих МП.

Рис.21. Ассоциативная по множеству кэш и формат адреса

Во всех решениях контроллер кэш-памяти разрабатывается так, чтобы кэш-память могла перехватывать запросы на магистрали, контролируя все запросы магистрали от других процессоров и устройств ввода-вывода, и предпринимать необходимые действия. Эти устройства называются кэш-памятью с отслеживанием (snooping cashe). Набор правил, которые выполняются кэш-памятью, процессорами и MM, чтобы предотвратить появление различных вариантов данных в нескольких блоках кэш-памяти, формирует протокол когерентности кэширования. Единица передачи и хранения кэш-памяти называется строкой или блоком кэш-памяти (32 или 64 байта).

Самый простой протокол когерентности кэширования называется сквозной записью (write through). В случае промаха кэш-памяти при записи слова, которое было изменено, оно записывается в MM. Строка, содержащая нужное слово, не загружается в кэш-память. В случае попадания при записи кэш обновляется, а слово плюс ко всему записывается в MM. Всегда при обновлении кэш-памяти одновременно обновляется и основная память.

Другой вариант поведения при промахах по записи – загрузка кэш-памяти (политика заполнения по записи – write-allocate). Заполнения по записи эффективно, когда высока вероятность повторного обращения к слову, вызвавшему промах.

В устройствах с отслеживанием все кэши отслеживают все запросы магистрали, и всякий раз, когда записывается слово, оно обновляется в кэш-памяти инициатора запроса, обновляется в MM и удалится из всех остальных кэшей.

1.6.2.4. Протокол когерентности кэширования с обратной записью

При большом количестве процессоров не эффективно каждый раз перезаписывать ОП. Вместо этого используется обратная запись (write back). Используется бит изменения в поле состояния кэша. Этот бит устанавливается, если блок был обновлен новыми данными и является более поздним, чем его оригинальная копия в основной памяти. Перед тем как перезаписать блок в кэш-памяти, контроллер проверяет состояние этого бита. Если он установлен, то контроллер переписывает данный блок и основную память перед загрузкой новых данных в кэш-память.

Один из популярных протоколов с обратной записью MESI. MESI – аббревиатура состояния кэш-памяти:

Invalid – блок кэш-памяти содержит недействительные данные.

Shared - в нескольких кэшах содержаться одинаковые блоки, основная память обновлена.

Exclusive – блок только в этой кэш-памяти, основная память обновлена.

Modified - блок действителен, основная память недействительна, копий блока не существует.

При загрузке процессора все элементы кэш памяти помечаются как недействительные I. При первом считывании из MM нужная строка вызывается в кэш-память и помечается как Е. Другой процессор (процессор 2) может вызвать ту же строку и поместить ее в кэш, но при отслеживании исходный держатель строки (процессор 1) узнает, что он уже не единственный, и объявляет, что у него есть копия. Обе копии помечаются состоянием S.

Процессор 2 производит запись в строку кэш-памяти в состоянии S и помещает сигнал о недействительности на магистраль, сообщая всем другим процессорам, что нужно отбросить свои копии. Соответствующая строка в процессоре 2 переходит в состояние М.

Процессор 3 считывает эту строку. Процессор 2, который в данный момент содержит строку, знает, что копия в MM недействительна, поэтому он передает на магистраль сообщение, чтобы процессор 3 подождал, пока он запишет строку обратно в память. После записи строки в MM процессор 3 вызывает из памяти копию этой строки, и в обоих кэшах строка помечается как S. Затем процессор 2 записывает в эту строку снова, что делает недействительным копию в кэш-памяти процессора 3.

Процессор 1 записывает слово в эту строку. Процессор 2 видит это и передает на шину сигнал, который сообщает процессору 1, что нужно подождать, пока строка не будет записана в MM. После завершения этого действия процессор помечает собственную копию как недействительную, поскольку он знает, что другой процессор собирается изменить ее. Возникает ситуация, в которой процессор 1 записывает что-либо в некэшируемую строку. Если применяется политика write-allocate, строка будет загружена в кэш-память и пометится как М. В противном случае строка в кэш-памяти сохранена не будет.

1.6.2.5. Команды поддержки когерентности памяти

Устройства ввода-вывода MPS, работающее по каналу прямого доступа к MM не содержат кэш-памяти, а следовательно и рассмотренных выше механизмов поддержки когерентности памяти. Вся ответственность ложится на CPU и реализуется программным путем. Для этой цели в системе команд процессора предусмотрены команды flush и invalidate.

Пусть программа процессора формирует данные для отправки через устройство ввода-вывода, помещая их в кэшируемую область MM в виде буфера выходных данных (кэш-память работает в режиме обратной записи). Это означает, что новые данные будут сформированы в кэши, а не в MM. Устройство же ввода-вывода берет данные из MM. Поэтому перед разрешением на передачу, процессор должен переместить подготовленные данные из кэш-памяти в MM, выполнив команду flush. По этой команде данные из кэш-памяти перезаписываются в MM. В команде flush указывается адрес и размер перезаписываемых данных.

Пусть устройство ввода-вывода принимает данные и помещает их во входной буфер MM, минуя процессор. В кэш-памяти процессора могут остаться данные входного буфера от предыдущей обработки, помеченные как действительные. По завершении приема устройство ввода-вывода информирует процессор о готовности входного буфера. Для работы с этими новыми данными процессор должен объявить недействительными строки кэш-памяти, содержащие старые значения входного буфера. Поэтому процессор выполняет команду invalidate для соответствующих строк кэш-памяти. Команда invalidate объявляет недействительными строки кэш, содержащие данные старого входного буфера. В команде invalidate указывается адрес и размер недействительных данных.

1.7. Магистраль микропроцессорной системы

Каждая микросхема процессора содержит набор выводов, через которые происходит обмен информацией с внешним миром. Эти выводы подразделяются на три типа: адресные, информационные (данные) и управляющие, которые и являются основой трех шинной магистрали микросистемы. Эти выводы называют шиной адреса (AB - Address Bus), шиной данных (DB – Data Bus) и шиной управления (CB – Control Bus). Чтобы, например, выбрать команду, CPU помещает на шину адреса адрес команды. Затем формирует сигналы на одной или нескольких линиях шины управления, чтобы сообщить памяти о выполнении операции чтения. В ответ память помещает на шину данных требуемое слово и посылает сигнал о том, что это сделано. Когда CPU получает данный сигнал, он записывает выставленное слово в регистр команд.

Число адресных выводов и число выводов шины данных – два ключевых параметра, определяющих производительность CPU. При наличии m адресных линий можно обратится к 2*m ячейкам памяти. Обычно m=16,20,32,64. CPU, содержащий n линий шины данных, может считывать или записывать n-битное слово за одну операцию. Обычно n=8,16,32,64.

Линии шины управления регулируют и синхронизируют поток данных, а также выполняют другие разнообразные функции. Все шины управления содержат линии питания, “земли” и синхронизирующего сигнала. Остальные выводы разнятся от одной шины к другой. Тем не менее, линии шины управления можно разделить на несколько основных групп:

1. Управление шиной.

2. Прерывание.

3. Арбитраж шины.

4. Состояние.

5. Разное.

1.7.1. Циклы обращения к магистрали

Обмен данными через магистраль выполняется словами или байтами в виде следующих друг за другом обращений. За один цикл обращения к магистрали между CPU, MM и I/O передается от одного до нескольких байт. Существует несколько типовых циклов обмена. Среди них чтение памяти и запись в память. В случае архитектуры гарвардского типа, когда память программ и данных физически разделены, вводится также цикл чтения памяти программ. Рассмотрим простую магистраль со следующим набором сигналов управления в манере Intel:

RD (Read) – строб чтения памяти;

WR (Write) – строб записи в память;

READY – готовность к обмену.

Временные диаграммы передачи данных через магистраль однотипны и имеют вид, представленный на рис. 22. На диаграммах выходные данные памяти истинны в момент окончания строба RD, тогда как формируемые CPU выходные данные в течение действия сигнала WR.

В некоторых случаях, например, когда в MPS используются медленно работающие компоненты или некоторые из модулей еще не готовы к обмену по ряду причин, не зависящих от CPU, длительность стробов WR и RD могут оказаться недостаточными для правильного обмена со стороны компонента. Тогда для организации надежного завершения магистральной операции в состав магистрали вводят специальную линию READY.

В каждом цикле обращения к магистрали перед окончанием строба RD или WR CPU проверяет линию READY. При подтверждении обмена CPU завершает операцию на магистрали, в противном случае он переходит в состояние ожидания подтверждения, в котором остается до установления сигнала READY (рис.23).

 
 


Рис.22. Циклы записи (а) и чтения (б) магистрали

Рис.23. Цикл чтения с подтверждением обмена

Рассмотрим простую магистраль со следующим набором сигналов управления в манере Motorola:

STB – строб операции на магистрали;

W/R – тип операции запись/чтение;

ACK – подтверждение операции.

На рис.24. приведена временная диаграмма цикла чтения в манере Motorola. По сигналу ACK CPU осуществляет прием данных с шины и завершает цикл магистрали.

Рис.24. Циклы чтения с подтверждением обмена в манере Motorola.

1.7.2. Двухшинная магистраль

В CPU с целью сокращения ширины магистрали вводят совмещенную шину адреса/данных (AD), по которой передаются как адреса, так и данные. Этап передачи адресной информации отделен по времени от этапа передачи данных и стробируется специальным сигналом ALE (Address Latch Enable), который включен в состав CB. На рис.25 представлена временная диаграмма работы такой магистрали.

Рис.25. Циклы записи (а) и чтения (б) двухшинной магистрали

Каждый модуль с двухшинной магистралью содержит локальный адресный регистр для запоминания адресной информации по сигналу ALE. Для фиксации адресной информации может быть использован и один общий регистр, в результате MPS с двумя шинами преобразуется в MPS с тремя шинами, как показано на рис.26.

Рис.26. Преобразование магистрали: 1- двухшинная, 2-трехщинная магистраль

1.8. Базовые устройства ввода-вывода встроенных систем

Подсистема ввода-вывода ответственна за связь с устройствами ввода-вывода I/O. Каждое I/O в общем случае состоит из двух частей: одна из них называется контроллером, а другая представляет собой само I/O.

С точки зрения программиста подсистему ввода-вывода можно представить или в виде отдельного пространства ввода-вывода (изолированное пространство ввода-вывода) со своими командами для доступа к нему или в виде определенной части адресного пространства памяти (совмещенное пространство ввода-вывода). В любом случае пространство ввода-вывода организовано в виде набора n-разрядных ячеек – портов (n=8,16,32) и линейно упорядочено.

Между CPU и I/O происходит обмен информацией двух типов: служебной и собственно данных. Служебная информация от CPU инициирует действия, связанные с обменом данных, и представляется с помощью управляющих слов CW (Control Word). Служебные сообщения от I/O, информирующие CPU о его текущем состоянии, называются словами состояния SW (Status Word). В отличие от них данные передаются с помощью слов данных DW (Data Word).

Объем служебной информации, которой обмениваются I/O и CPU, а также ее интерпретация зависят от типа I/O. Для наиболее простых устройств, служебная информация не нужна, а для других – управляющая информация и данные о состоянии УВВ могут иметь значительный объем.

Размер пространства доступа (совокупность портов) в общем случае не зависит от объема информации, которой обмениваются I/O и CPU. Распространена практика последовательной передачи массива информации через один и тот же порт. Это связано не только с экономией пространства ввода-вывода, но и с минимизацией ширины физического интерфейса I/O, а также с его стандартизацией. Существует соглашения об обмене информацией между I/O и CPU, называемые протоколами обмена. Эти протоколы являются основой для разработки драйверов (набор подпрограмм) I/O, организующих обмен данными.

В тех случаях, когда процедуры обмена информацией с I/O инициируются и выполняются непосредственно программой, реализуемой CPU, говорят о программно-управляемом обмене. Программно-управляемый обмен не является единственным типом обмена. Но судя по аппаратным затратам, это наиболее эффективный тип обмена, поэтому он находит самое широкое применение в MPS.

В наиболее простом виде процесс программно-управляемого ввода-вывода выполняется независимо от состояния I/O. Такой вид обмена назван прямым или безусловным. Процессы прямого ввода-вывода в чистом виде возможны только при условии, что I/O всегда готовы к обмену. К тому же они являются составными элементами более сложных процессов программно-управляемого обмена, к числу которых относится условный ввод-вывод. Существует два типа условного ввод-вывод: с занятием цикла (рис.27,а) и совмещенный (рис.27,б).

В первом случае MPS «зависает» в цикле ожидания готовности, тратя на это все процессорное время. Во втором случае, если I/O не готово к обмену, CPU возвращается к основной задаче без выполнения операции ввода-вывода. Однако он может снова проверить готовность УВВ к обмену и при удачном исходе выполнить его.

После завершения операции обмена сигнал готовности I/O должен быть снят и выставлен заново только при новой готовности к обмену. С этой целью I/O следует проинформировать об окончании операции, для чего используется включенный в одно из управляющих слов CW сигнал подтверждения. Протокол обмена служебной информации такого типа называется квитированием. Он обеспечивает надежную асинхронную передачу данных со скоростями, определяемыми I/O.

Рис.27. Процедуры программно-управляемого обмена:

б – условного с занятием цикла: в – условного совмещенного

1.8.1. Порты ввода-вывода общего назначения

Порты ввода-вывода общего назначения (GPIO) - это группы выводов (чаще по 8 линий на порт) через которые μC получает сигналы (будь то аналоговые или цифровые) от внешних устройств (для их последующей обработки): управляет или обменивается данными с внешними устройствами, сигнализирует о проделанной работе и т.д. Режим общего назначения означает запись/чтение двоичных значений на линии порта в отличии от разнообразных альтернативные функции (АФ) каждого вывода. На рис.28 в качестве примера приведена упрощенная электрическая схема одного вывода порта популярного микроконтроллера AVR.

 

Рис.28. Электрическая схема вывода линии порта AVR микроконтроллера

Диоды D1 и D2, предназначены для защиты вывода от напряжений, превышающих напряжение питания (электростатика - ESD и т.п.), а емкость Cpin - это паразитная емкость вывода. Rpu – встроенный подтягивающий (pull up) резистор, который может быть отключен от плюса источника питания полевым транзистором, что предаст линии порта свойство входа с открытым коллектором. Срабатывание ключа К1подключает к выводу порта Pxn двоичный источник или альтернативную функцию. Входной сигнал оценивает пороговый элемент с гистерезисом. Итак, любой вывод μC может быть настроен как на вход, так и на выход, причем читать состояние вывода Pxn можно в любой момент, даже, когда вывод настроен как выход или АФ.

Каждый GPIO имеет регистры данных и конфигурации (управления). Через эти регистры осуществляется доступ по чтению ко входам, доступ по записи к выходам, а также позволяют настраивать индивидуальный вывод как вход или выход, подключать встроенные подтягивающие резисторы (pull up/pull down), входной гистерезис, задавать выходную нагрузочную способность и т.д.

Конфигурация выводов GPIO как вход или выход обычно выполняется через регистр, который называют регистром направления (DDR - Data Direction Register). Запись 1 в соответствующий бит DDR конфигурирует линию порта как выход, а 0 – как вход.

Наряду с величиной выходного напряжения GPIO важным является вытекающий ток при выходе равном «1» и втекающий ток при выходе равном «0». Если выход GPIO управляет входом другого цифрового устройства эти токи обычно очень маленькие (микроамперы), но когда управляет светодиодом (LED), биполярным транзистором (BJT) или реле токи становятся значительными (миллиамперы). Выходной ток GPIO для различных μC распределен в диапазоне 2 – 20 mA.

Рассмотрим подключения различных элементов к GPIO [13]. На рис. 29а показано подключение LED к выходу GPIO, возбуждаемое высоким уровнем сигнала (ток протекает через LED, когда выход имеет высокий уровень напряжения), а на рис. 29в - подключение, возбуждаемое низким уровнем сигнала (ток протекает через LED, когда выход имеет низкий уровень напряжения).

Рис. 29. Подключение светодиода к выходу GPIO

Формула для вычисления значения сопротивления: R = (Vсс – Vled)/Iled,где Vled и Iled - падение напряжения на LED и ток свечения LED соответственно.

На рис. 30 а и в показано подключение p-n-p BJT и n-p-n BJT к выходу GPIO по схеме с общим коллектором соответственно. Подключение на рис. 30а возбуждается высоким уровнем сигнала, при котором ток протекает через нагрузку RL, когда выход имеет высокий уровень напряжения. Подключение на рис. 30в, возбуждается низким уровнем сигнала, при котором ток протекает через нагрузку RL, когда выход имеет низкий уровень напряжения.

Рис. 30. Подключение биполярного транзистора к выходу GPIO

На рис. 31 а и в показано подключение N-канального/P-канального

MOSFET к выходу GPIO возбуждаемое высоким/низким уровнем сигнала соответственно.

Рис. 31. Подключение MOSFET транзистора к выходу GPIO

На рис. 32а показано подключение переключателя входу GPIO с подтягивающем к земле резистором. Входной сигнал является возбуждаемым высоким уровнем. Это означает, что вход принимает напряжение высокого уровня, когда переключатель замыкает контакты.

На рис. 32в показано подключение переключателя входу GPIO с подтягивающем к питанию резистором. Входной сигнал является возбуждаемым низким уровнем. Это означает, что вход принимает напряжение низкого уровня, когда переключатель замыкает контакты.

Рис. 32. Подключение переключателя SW к входу GPIO

1.7.2. Таймер-счетчик

Почти каждый μC имеет в своем составе несколько (иногда очень много) таймеров-счетчиков (для краткости будем говорить таймер, Т/С), занимающих по полезности для встроенных систем второе место после GPIO. Название таймера отражает тот факт, что это устройство может быть сконфигурировано для подсчета регулярных тактовых импульсов (работает как таймер) или нерегулярных импульсов, выражающих некоторые события (работает как счетчик событий).

Обычно таймер содержит предварительный делитель частоты (prescaler), N-разрядный регистр таймера-счетчика (N = 8, 16 или 32), один или более N-разрядный регистр захвата (capture) и один или более N-разрядный регистр сравнения (compare). Так же могут быть регистры управления и статуса для управления и наблюдения за таймером-счетчиком.

Предварительный делитель частоты получает базовую тактовую частоту (это может быть тактовая частота CPU или более высокая или более низкая частота) и делит ее на некоторую величину перед подачей в таймер в соответствии с конфигурацией регистра предварительного делителя частоты. Величины предварительного делителя частоты могут иметь несколько фиксированных значений или значений в диапазоне 1 - 2^P, где P – разрядность предварительного делителя частоты.

Назначение предварительного делителя частоты – обеспечить таймер нужной частотой для получения требуемой разрешающей способности по времени или максимального периода переполнения таймера.

Регистр таймера – это обычно N-разрядный счетчик, работающий на увеличение с возможностями записи или чтения текущего значения, остановкой и сбросом.

Регистр захвата – это регистр, который может автоматически загружаться текущим значением таймера при наступлении некоторого события (обычно изменение значения на некотором входе GPIO). Регистр захвата таким образом используется для получения «моментального снимка» таймера в момент появления события. Событие захвата может генерировать же прерывание. Регистр захвата может также использоваться для измерения интервала между двумя импульсами, определения времени импульса или паузы и определения времени между двумя различными входными сигналами.

Регистры сравнения (иногда называют совпадения) сохраняют величину, с которой постоянно автоматически сравнивается текущее значение таймера. Регистр сравнения используется для фиксации события, когда величина в таймере совпадает с величиной регистра сравнения. Если таймер-счетчик сконфигурирован как таймер, использование регистра сравнения дает возможность генерировать события (выход GPIO изменяется, и/или возникает прерывание, и/или сбрасывается таймер) в известное и точное время. Если таймер-счетчик сконфигурирован как счетчик, регистр сравнения генерирует события при достижении счетчика заданной величины.

1.8.3. Импульсно-кодовая модуляция.

Современные μC имеет в своем составе аппаратные средства, позволяющие формировать сигналы импульсно-кодовой модуляции (PWM - Pulse Width Modulation). Такие сигналы широко используются для управления различными устройствами, например, изменение скорости вращения двигателей постоянного тока, поворот на требуемый угол шагового двигателя, изменение яркости свечения ламп или LED (диммеры).

PWM – это формирование последовательности импульсов прямоугольной формы с постоянным периодом и изменяемой величиной длительности импульсов. Такой сигнал характеризуется коэффициентом заполнения (duty cycle) равным отношению длительности импульса к периоду сигнала в процентах. С изменением коэффициента заполнения меняется среднее значение сигнала PWM и это можно рассматривать как вариант цифро-аналогового преобразования, где цифра это дискретные значения длительности импульса, а аналог – среднее значение напряжения.

Часто реализация функции формирования сигнала PWM ложится на рассмотренные выше таймеры-счетчики μC. Пусть имеется два числа, называемые «нижнее» (BOTTOM) и большее по величине – «верхнее» (TOP). Пусть таймер стартует со значения BOTTOM, затем под действием тактовой частоты он достигает значения TOP и все начинается сначала, как на рис. 33. Получаем сигнал пилообразной формы.

Запишем в регистры сравнения таймера значение COMPARE. Если текущее значение «пилы» меньше чем COMPARE значение выхода GPIO остается низким, иначе высоким, как на рис.34. Сформировался сигнал с коэффициентом заполнения 50%.

Рис. 33. Сигнал пилообразной формы таймера-счетчика

1.8.4. Многоканальный аналого-цифровой преобразователь

Как правило, μC, используемые во встроенных системах, имеет в своем составе многоканальный аналого-цифровой преобразователь (АЦП или ADC). Такой ADC преобразует аналоговый сигнал, поступающий с одного из М входов GPIO, в N-разрядный двоичный код.

На рис. 35 приведена упрощенная структурная схема многоканального ADC. Через Аналоговый MUX (мультиплексор) один и аналоговых входов ADCi подключается к схеме выборки/хранения (S/H), выходное значение которой преобразуется ADC в двоичный код. Преобразование запускается по команде программного обеспечения, возвращающего затем полученный результат.

Рис. 34. Сигнал пилообразной формы, формируемый таймером-счетчиком

Компонент S/H схеме выполняет захват (ключ замкнут конденсатор C_INAD через резистор Z_INAD заряжается до величины входного значения) и хранение величины входного напряжения на время выполнения преобразования (ключ разомкнут и конденсатор C_INAD не имеет возможности быстро разрядится). На время захвата влияет выходное значение источника сигнала: чем оно выше, тем больше времени необходимое для захвата.

Рис.35. Схема многоканального аналого-цифрового преобразователя

Существует большое количество методов преобразования. Базовый принцип, используемый в них, основан на использовании компаратора для определения может или нет, тот или иной бит входить в результат преобразования со значением 1.

К наиболее используемым методам относятся: сравнения с пилообразным сигналом, последовательного приближения (или с поразрядным уравновешиванием) и параллельное прямое преобразования (Flash ADC).

В первом методе цифро-аналоговый преобразователь (ЦАП или DAC) увеличивает напряжение на своем выходе согласно последовательному увеличению значения двоичного N-разрядного счетчика, подключенного к его входу. Как только компаратор зафиксирует совпадение выходного значения DAC и аналогового входа, двоичный счетчик останавливается, сохраняя свое значение как результат преобразования. Этот метод грешен переменным временем преобразования, и оно тем больше чем больше величина входного аналогового сигнала.

Второй метод в среднем быстрее первого, время преобразования постоянно и равно N-тактам. В каждом такте преобразования решается вопрос, какое значение должен принять очередной i-разряд N-разрядного регистра результата на основании сравнения значения выхода DAC, к входу которого подключен регистр результата, и аналогового входа. Вначале преобразования наиболее старший значащий бит регистра последовательного приближения устанавливается в 1, остальные в 0. Это цифровое значение затем преобразуется DAC в аналоговую величину, соответствующую половине максимального входного значения. Если измеряемая входная величина превосходит величину DAC наиболее старший значащий бит регистра последовательного приближения остается в 1, иначе сбрасывается в 0. Этот процесс повторяется со следующим битом. Он останется в 1,если входная величина находится во второй или четвертой четверти диапазона. И так для всех остальных бит.

Третий метод самый быстрый, но требует своего компаратора для каждого уровня квантования, т.е. 2^N-1 компараторов (например, при N=10 необходимо 1023 компаратора). Схема кодирования посредством таблицы истинности преобразует значения выходов компараторов в N-разрядный двоичный код. Поэтому обычно N=8, но это отрицательно сказывается на точности. ADC различных микроконтроллеров могут различаться такими свойствами, как:

– разрешающая способность (разрядность, может быть переменной);

– значением интегральной нелинейности:

– абсолютная погрешность;

– время преобразования (может быть переменным);

– производительность (может быть переменной);

– простой /дифференциальный аналоговый вход, количество входов;

– наличие входного усилителя с переменным коэффициентом усиления;

– допустимый диапазон изменения входного сигнала:

– набор опорных напряжений;

– режимы преобразования (однократный режим, режим с автозапуском, режим свободного хода);

– прерывание по окончанию преобразования;

– наличие механизмов шумоподавления.

1.9. Базовые последовательные интерфейсы ввода-вывода

встроенных систем

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

Последовательный интерфейс организует последовательную передачу и прием между CPU и I/O. Различные последовательные интерфейсы тем как биты данных передаются и принимаются.

Схема последовательной передачи называется симплексной, если поток данных передается и затем принимается только в одном направлении.

Схема последовательной передачи называется полудуплексной, если поток может передаваться и приниматься в одном из двух направлений, только в одном направлении в каждый момент времени.

Схема последовательной передачи называется дуплексной, если поток может передаваться и приниматься в одном из двух направлений одновременно.

Последовательная передача, выполняемая как непрерывный поток с регулярными временными интервалами, определяемыми тактовой частотой CPU, называется синхронной передачей, а с нерегулярными временными интервалами – асинхронной передачей.

.

1.9.1. Асинхронный старт-стопный интерфейс

Устройство, реализующее стартстопную передачу данных, называют UART (Universal Asynchronous Receiver Transmitter). Передатчик разделяет порцию данных на символы (от 4до 8 бит или от 5 до 9 бит на символ). Каждый из символов инкапсулируется в кадр для раздельной передачи. Перед отправкой в линию каждый символ дополняется битом START в начале символа и битом/битами STOP (может бать 1, 1.5 и более бит) в конце символа. На рис. 36 приведена временная диаграмма старт-стопной передачи данных.

Рис. 36 Временная диаграмма старт-стопной передачи данных

При настройке UART назначаются:

– число STOP-битов (регулирует минимальный интервал между соседними символами, обычно выбирают равным значению 1 или 2, реже 1,5 битовых интервала);

– число бит данных (5…8);

– наличие или отсутствие проверочного разряда P (дополнение до четности или нечетности);

– скорость передачи V бит/сек.

Приемник на уровне символа синхронизируется переходом линии из состояния простой (1) в 0 (START-бит). Зная длительность битового интервала T=1/V и формат символа, приемник запускает тактовый генератор и последовательно считывает передаваемые биты, анализируя линию связи посередине битового интервала.

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

Асинхронность передачи вытекает из того, что приемник не знает в какой момент времени поступит очередной символ. Отсутствует единая для всего потока данных синхронизация, т.е. она имеет локальный характер – устанавливается заново всякий раз при обнаружении приемником начала очередного старт-бита.

Через UART к встроенной системе обычно подключаются микросхемы модемов различных беспроводных коммуникационных технологий, GPS-приемники. Это связано с историей возникновения UART как интерфейса для передачи данных между компонентами телекоммуникационного оборудованием DTE (Data Terminal Equipment - оконечное оборудование данных или компьютер) и DCE (data communication equipment - оборудование передачи данных или модем) и являющегося элементом стандарта RS-232.

В этом стандарте вход данных UART называн RxD, а выход TxD и ведены многочисленные служебные сигналы. Сейчас из них используется лишь следующие сигналы. RTS (Request To Send – запрос на передачу данных) и CTS (Clear To Stnd – готовность к передаче данных). Их первоначальное назначение (для отображения запроса и готовности передачи данных от DTE к DCE) в настоящее время зачастую игнорируется – эти сигналы могут альтернативно трактоваться как равноправные признаки готовности устройств DTE и DCE к приему данных от устройства-партнера.

В асинхронном режиме сигналы RTS и CTS обслуживают оба направления передачи данных, что выходит за рамки стандарта и отражает некий “стандарт де-факто”. Поэтому наименования сигналов не соответствуют (и даже противоречат) их назначению. Выходной сигнал RTS теперь рассматривается как готовность DTE принять данные RxD от такого же устройства DTE. Аналогично входной сигнал CTS теперь рассматривается как разрешение на передачу данных для DTE.

На рис.37. приведена схема соединения двух DTE (нуль-модемное соединение). Логика работы такова: передача данных в ту или иную сторону возможна только при условии, что приемник готов эти данные принять. Если обнаружена неготовность приемника, то источник данных приостанавливает работу, ждет появления готовности, возобновляет передачу и т.д. Это – так называемое аппаратное управление потоком данных (hardware flow control)

Современные микроконтроллеры могут содержать несколько UART. Это позволяет достаточно просто реализовывать во встроенных системах коммуникационные функции.

Рис.37. Схема соединения двух DTE

1.9.2. Последовательный интерфейс SPI

SPI (Serial Peripheral Interface) – последовательный синхронный интерфейс предназначенный для связи CPU с компонентами MPS, расположенных в пределах печатной платы, по принципу ведущий-ведомый (Master - Slave), как показано на рис.38.

Через SPI обеспечивается связь с такими компонентами встроенных систем как:

– датчики (температуры, давления, ADC, сенсорный экран);

– управляющие устройства (аудио кодеки, цифровые потенциометры, DAC);

– flash и EEPROM;

– MMC и SD карты.

SPI основан на взаимодействии двух сдвиговых регистров, соединенных в кольцо. Перед началом передачи данные передающих параллельных регистров переписываются в соответствующие сдвиговые регистры. По окончании передачи данные из сдвиговых регистров переписываются в параллельные регистры. На рис.39 приведена временная диаграмма работы интерфейса. Под действием тактовых импульсов генератора ведущего данные из сдвигового регистра ведущего перемещаются в сдвиговый регистр ведомого.

Рис.38. Взаимодействие через интерфейс SPI

Рис.39. Временная диаграмма работы SPI

1.9.3. Интерфейс I2C

Также как и SPI I2C (Inter Integrated Circuit) или TWI (Two-wire Interface – двухпроводный интерфейс) – последовательный синхронный интерфейс предназначенный для связи CPU с компонентами MPS, расположенных в пределах печатной платы, по принципу ведущий-ведомый.

I2C находит применение в устройствах, предусматривающих простоту разработки и низкую себестоимость изготовления при относительно неплохой скорости работы. Через него обеспечивается связь с такими компонентами встроенных систем как:

– модули NVRAM;

– низкоскоростные ADC/DAC;

– регулировка контрастности, насыщенности и цветового баланса мониторов;

– регулировка звука в динамиках;

– управление светодиодами, в том числе в мобильных телефонах;

– чтение информации с датчиков мониторинга и диагностики оборудования, например, CPU или скорость вращения вентилятора охлаждения;

– чтение информации с часов реального времени (кварцевых генераторов);

– управление включением/выключением питания системных компонент;

– информационный обмен между микроконтроллерами;





Дата публикования: 2014-11-03; Прочитано: 1112 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.072 с)...