Контроллеры последовательного ввода/вывода
Наличие в составе 8-разрядного МК модуля контроллера последовательного ввода/ вывода стало настолько обычным явлением, что лишь самые простые, маловыводные МК в корпусах DIP16 и DIP20 не имеют портов последовательного обмена. При анализе структуры более сложных 8-разрядных МК отчетливо прослеживается тенденция наличия в их составе двух контроллеров последовательного обмена, а в некоторых новейших моделях - даже трех (серия AZ семейства НС08 фирмы «Motorola»). Задачи, которые решаются средствами модуля контроллера последовательного ввода/вывода, могут быть условно разделены на три группы:
1)связь встраиваемой МП-системы с системой управления верхнего уровня: промышленным компьютером, программируемым контроллером, офисным компьютером; наиболее часто для этих целей используются интерфейсы RS-232C и RS-485; в настоящее
время все более широкую популярность приобретает интерфейс USB;
2)связь с внешними по отношению к МК периферийными ИС встраиваемой МП-системы, а также с датчиками физических величин с последовательным выходом; для этих
целей используются интерфейсы SPI, I2C, а также нестандартные протоколы обмена;
3)интерфейс связи с локальной сетью в мультимикропроцессорных системах; в системах с числом МК до пяти обычно используют сети на основе интерфейсов PC, RS-232C,
RS-485 с собственными сетевыми протоколами верхнего уровня; в более сложных системах все более популярным становится протокол CAN.
С точки зрения инженера-схемотехника, упомянутые типы интерфейсов последовательной связи отличаются: режимом передачи данных (синхронный или асинхронный), форматом кадра (число бит в посылке при передаче байта полезной информации) и временными диаграммами сигналов на линиях (уровни сигналов и положение фронтов при переключениях). Число линий, по которым происходит передача в последовательном коде, обычно равно двум (PC, RS-232C, RS-485, CAN) или трем (SPI, некоторые нестандартные синхронные протоколы). Последнее позволяет спроектировать модули контроллеров последовательного обмена таким образом, чтобы с их помощью на аппаратном уровне можно было бы реализовать несколько типов последовательных интерфейсов. При этом режим передачи (синхронный или асинхронный) и формат кадра поддерживаются на уровне логических сигналов, а реальные физические уровни сигналов, характерные для каждого типа интерфейса, получают с помощью специальных ИС, которые носят название приемопередатчиков, конверторов, трансиверов.
В состав 8-разрядных МК различных фирм производителей входят следующие модули контроллеров последовательных интерфейсов:
• модуль последовательного универсального интерфейса USI (Universal Serial Interface); входит в состав МК семейства AVR фирмы «Atmel»; может поддерживать протоколы асинхронного обмена для интерфейсов RS-232, RS-422 и RS-485, а также синхронные протоколы интерфейсов SPI и I2C;
• модуль универсального асинхронного интерфейса UART (Universal Asynchronous Receiver and Transmitter); поддерживает протоколы асинхронного обмена интерфейсов RS-232, RS-422 и RS-485;
• модуль универсального асинхронного интерфейса SCI (Serial Communication Interface); характерен для МК фирмы «Motorola»; входит в состав 8-разрядных МК семейств НС05, НС11 и НС08; является функциональным аналогом модулей типа UART, т. е. Поддерживает протоколы асинхронного обмена для интерфейсов RS-232, RS-422 и RS-485;
• модуль последовательного синхронного интерфейса SPI (Serial Peripheral Interface); поддерживает протокол синхронного обмена в стандарте SPI; интерфейс SPI был предложен фирмой «Motorola», поэтому контроллер SPI входит в состав большого числа моделей МК семейств НС05, НС11 и НС08. В МК других производителей протокол SPI обычно реализуется в качестве альтернативного одним из модулей контроллеров последовательных интерфейсов;
• модуль синхронного последовательного интерфейса PC (Inter Integrated Circuit); входит в состав 8-разрядных МК фирмы «Pfilips» и «Microchip»; следует заметить, что для МК «Microchip» характерна реализация аппаратными средствами одного и того же модуля протоколов SPI и PC;
• модуль контроллера CAN (Control Aria Network); присутствует в 8-разрядных МК семейства НС08 фирмы «Motorola», МК семейства С500 фирмы «Infineon», семейства 89 фирмы «Pfilips»; поддерживает стандартные протоколы обмена CAN сетей;
• модуль контроллера USB (Universal Serial Bus); поддерживает новый стандарт периферийного интерфейса вычислительной техники USB.
Протоколы интерфейсов локальных сетей на основе МК - I2C и CAN - отличает более сложная логика работы. То же можно сказать и о новом стандарте периферийного интерфейса USB. Поэтому контроллеры CAN и USB интерфейса всегда выполняются в виде самостоятельного модуля, аппаратные средства которого ориентированы на поддержку соответствующих протоколов обмена. Интерфейс I2C с возможностью работы как в ведущем, так и ведомом режиме, также обычно поддерживается специальным модулем (модуль последовательного порта в МК 89С52 фирмы «Philips»). Но если реализуется только ведомый режим PC, то в МК PIC16 «Microchip» он успешно сочетается с SPI: настройка одного и того же модуля на один из протоколов осуществляется путем инициализации.
Следует заметить, что одноименные модули контроллеров последовательных интерфейсов даже одной фирмы-производителя имеют отличия в реализации для разных семейств МК. Так, аппаратные средства контроллера SCI в составе МК семейства НС08 диагностируют большее количество ошибок на линии, чем одноименные контроллеры в составе семейства НС05. И естественно, отличаются одноименные модули в МК различных фирм. Однако эти отличия преимущественно сводятся к различию регистров специальных функций, которые обслуживают модуль. Меньше затрагивают алгоритмы функционирования одноименных модулей. И, по определению, все аналогичные модули обязательно реализуют на аппаратном уровне логику протокола обмена выбранного интерфейса. Поэтому при рассмотрении данной темы целесообразно остановиться именно на протоколах обмена. По режиму обмена информацией интерфейсы подразделяют на симплексные, полудуплексные, дуплексные, мультиплексные. В интерфейсах с симплексным режимом обмена информацией возможна лишь однонаправленная передача информации от одного абонента к другому. Соответственно и буферы приемника и передатчика информации выполнены однонаправленными. В интерфейсах с полудуплексным режимом обмена в произвольный момент времени может производиться либо только прием, либо только передача данных между двумя абонентами, буферы приемопередатчика каждого из абонентов связи выполнены двунаправленными. В интерфейсах с дуплексным режимом обмена в любой произвольный момент времени может производиться одновременный прием и передача данных между двумя абонентами. Линии приема и передачи информации физически разделены, соответственно контроллер обмена каждого абонента имеет два вывода (приемника и передатчика), и буферы этих выводов однонаправленные. В интерфейсах с мультиплексным режимом обмена в каждый момент времени может осуществляться прием или передача данных между парой любых абонентов сети.
Среди большого множества различных типов встроенных контроллеров последовательного обмена, которые входят в состав тех или иных 8-разрядных МК, сложился стандарт «де-факто» - модуль UART (Universal Asynchronous Receiver and Transmitter).
В переводе с английского UART - универсальный асинхронный приемопередатчик. Однако многие из модулей UART кроме асинхронного режима обмена способны также реализовать простейший режим синхронной передачи данных. Поэтому более правильным с точки зрения терминологии было бы именовать эти модули USART (Universal Synchronous/Asynchronous Receiver and Transmitter) - универсальный синхронно/асинхронный приемопередатчик. Такой термин тоже существует, но пользуются им редко.
Не все производители МК используют термин UART для обозначения типа модуля контроллера последовательного обмена. Так, в МК фирмы «Motorola» модуль асинхронной приемопередачи, который поддерживает те же режимы асинхронного обмена, что и UART, принято называть SCI (Serial Communication Interface). Следует отметить, что модуль типа SCI обычно реализует только режим асинхронного обмена, однако МК фирмы «Motorola» традиционно имеют в своем составе два модуля последовательного обмена: модуль SCI с возможностью реализации только протоколов асинхронной приемопередачи для интерфейсов RS-232C, RS-422A, RS-485 и модуль контроллера синхронного интерфейса в стандарте SPI.
Модуль типа UART в максимальной конфигурации обычно реализует два типа протокола обмена в асинхронном режиме (кадр длиною в 10 бит или в 11 бит) и два типа протокола в синхронном режиме (трехпроводный полнодуплексный обмен или двухпроводный полудуплексный обмен). Упрощенная структура модуля типа UART приведена на рис. 4.19.
Модуль состоит из двух независимых подсистем: передатчика (Transmitter) и приемника (Receiver), поэтому возможен режим одновременной передачи и приема информации в последовательном коде. Основу каждой подсистемы составляют сдвиговый регистр и параллельный регистр буфера данных. Обращение к буферу данных приемника и передатчика осуществляется по одному и тому же адресу, но при выполнении операции записи данные будут помещены в буфер передатчика TDBUF, операции чтения -данные будут считаны из буфера приемника RDBUF.
Передача данных от МК к другому устройству инициируется посредством записи байта данных в регистр TDBUF.
Если работа передатчика разрешена (бит ТЕ в регистре управления модулем равен 1), то аппаратные средства модуля загружают содержимое TDBUF в сдвиговый регистр и под управлением генератора скорости обмена биты из сдвигового регистра, начиная с младшего DO, последовательно передаются на вывод TxD МК. По завершении передачи байта данных устанавливается бит TI, который информирует МК о том, что буфер передатчика пуст и в него могут быть загружены новые данные для передачи. Бит TI генерирует запрос на прерывание, если прерывания от передатчика в МК разрешены. Бит TI может также быть считан программно.
Если работа приемника разрешена (бит RE в регистре управления модулем равен 1), то после распознавания стартового бита аппаратные средства приемника преобразуют данные, которые поступают на вход RxD в последовательном коде, в параллельный код. После завершения приема последнего бита в сдвиговом регистре приемника находится принятый байт данных, который автоматически переносится в регистр RDBUF. Одновременно устанавливается в «1» флаг завершения приема RI. Бит RI может быть считан под управлением программы, а если прерывания от приемника разрешены, то генерируется запрос на прерывание. В процессе выполнения подпрограммы прерывания принятый байт данных считывается из регистра данных приемника RDBUF в память МК. Сразу после копирования байта данных из сдвигового регистра в RDBUF приемник может начать формирование следующего байта данных, отдельные биты которого продолжают поступать на вход RxD. Однако необходимо, чтобы центральный процессор МК успел считать данные из буферного регистра RDBUF до завершения формирования в сдвиговом регистре следующего принятого байта. Если этого не произошло, то возникшая аварийная ситуация в модулях UART разрешается различными путями. В модулях SCI фирмы «Motorola» запись следующего принятого байта в буферный регистр данных не производится и устанавливается флаг ошибки OR (Overrun). Этот флаг наравне с триггером RI может генерировать запрос на прерывание от приемника. В модулях МК Intel MSC-51 и ему полностью аналогичных такая защита отсутствует: следующий принятый байт затирает предыдущий в регистре RDBUF.
Для повышения достоверности приема каждого разряда аппаратные средства модуля UART считывают уровень сигнала на входе RxD три раза в течение интервала присутствия бита. Значение бита, которое будет занесено в младший разряд сдвигового регистра приемника, определяется мажоритарным способом: по принципу два из трех. Модули SCI сообщают пользователю о наличии шума на линии приема: если не все три значения при приеме любого из битов кадра совпали, то устанавливается флаг NF (Noise Error). В модулях UART MK Intel MSC-51 такая защита не предусмотрена.
Подсистемы приемника и передатчика модуля UART не являются полностью автономными. Скорость обмена и формат кадра асинхронной приемопередачи назначаются в процессе инициализации модуля одинаковыми для приемника и для передатчика. Модули UART различных МК предоставляют неодинаковые возможности по регулированию скорости обмена. В МК Intel MSC-51 допускается плавное регулирование с дискретностью, равной периоду частоты тактирования таймера. Для задания скорости обмена используется один из каналов модуля таймера. Напротив, модуль SCI МК Motorola не использует ресурсы модуля таймера для этих целей. Такой подход, с одной стороны, имеет преимущество по экономии использования ресурсов МК, однако, с другой стороны, не позволяет задать произвольное соотношение между частотой обмена и собственной частотой кварцевого резонатора генератора синхронизации МК. Последнее накладывает ограничения на выбор частоты кварцевого резонатора, если скорость обмена в разрабатываемом устройстве должна соответствовать стандартному ряду.
Все модули типа UART предусматривают два типа кадров асинхронного обмена, На рис. 4.20 представлена временная диаграмма 10-битового кадра: 8 бит данных передаются вслед за стартовым битом, начиная с младшего DO, завершает передачу стоповый бит
Логические уровни для передачи стартового бита (низкий) и стопового бита (высокий) формируются аппаратными средствами передатчика. Приемник распознает начало передачи нового кадра по изменению уровня сигнала на входе RxD с высокого, который может длиться сколь угодно долго, на низкий. Передаваемая в кадре полезная информация длиною в один байт может кодироваться абсолютно произвольно. Но может быть использовано и стандартное решение, при котором информация кодируется семью битами D6 - DO, старший бит D7 используется для контроля правильности приема. С этой целью передающий МК кодирует бит паритета D7 из условия четного (контроль на четность) или нечетного (контроль на нечетность) числа единиц в передаваемом слове, а принимающий МК производит проверку принятого кода в соответствии с выбранным способом кодирования. Если число единиц в байте данных соответствует выбранному способу кодирования, т. е. четное (нечетное), то передача считается успешной.
Следует заметить, что не все модули UART 8-разрядных МК имеют опции автоматического формирования бита паритета и не контролируют принятое слово на четность или нечетность аппаратными средствами. Поэтому при необходимости эти операции должны быть реализованы программными средствами. Рассмотренный 10-битовый формат кадра наиболее часто используется при организации связи встраиваемой МП системы с системой управления верхнего уровня.
Временная диаграмма 11-битового кадра асинхронного обмена представлена на рис. 4.21: 9 бит данных обрамляются одним стартовым и одним стоповым битом. При формировании 9-разрядного слова для передачи сначала старший разряд 08 помещается в бит Т8 одного из регистров управления модулем, а затем младшие разряды 07 - DO записываются в обычном порядке в регистр TDBUF. При приеме 9-разрядного слова младшие биты D7 - DO размещаются в регистре RDBUF, старший бит D8 передается в разряд R8 одного из регистров управления. Рассматриваемый формат представления кадра обычно используется для организации протокола обмена верхнего уровня в локальных сетях на основе нескольких МК. С этой же целью в модулях UART реализован специальный режим ожидания с механизмом пробуждения (Wake-up).
На рис. 4.22 приведена структура такой локальной сети. Один из МК в этой сети является ведущим, все остальные - ведомыми. В каждый момент времени обмен возможен между ведущим и одним из ведомых, обмен между двумя ведомыми не реализуется. Инициатором обмена всегда является только ведущий. Обмен производится пакетами, каждый из которых включает не менее трех 11-битовых кадров. Первый кадр определяет адрес ведомого МК, с которым будет производиться обмен. Бит D8 этого кадра должен быть равен «1».
Следующий кадр используются для обмена данными с выбранным ведомым.
Рис. 4.22.Структура локальной сети микроконтроллера
Бит D8 этих кадров должен быть установлен в «0». Последний кадр пакета обмена должен содержать 11 нулевых битов. Так как подобная последовательность не может быть сформирована в результате записи в регистр буфера передатчика TDBUF нулевого слова | (необходимо также обнулить стоповый бит), то для ее воспроизведения предусмотрена специальная опция формирования сигнала «Break». В модулях SCI для ее реализации необходимо установить бит SBK (Send Break) в одном из регистров управления. Обмен между ведущим и ведомым происходит в следующем порядке.
• В исходном состоянии приемники всех ведомых МК находятся в состоянии ожидания.
В этом состоянии прием байта данных осуществляется, но принятое слово переписывается в буферный регистр RDBUF с одновременной установкой в «1» флага завершения приема RI только в том случае, если бит D8 этого слова равен «1». Остальные слова с признаком D8 = 0 игнорируются.
• Ведущий МК посылает всем ведомым одновременно первый кадр пакета обмена. Раз-ряды D7 - DO этого кадра содержат адрес ведомого, бит D8 равен «1».
• Все ведомые МК принимают это 9-разрядное слово, и, поскольку разряд D8 кадра равен «1», приемник модуля UART каждого МК выходит из состояния ожидания. Формируется запрос на прерывание. Подпрограмма обработки этого прерывания сравнивает принятый адрес с собственным адресом в локальной сети. Если адреса совпадают, т. е. ведущий будет производить обмен именно с этим ведомым, то МК ожидает
передачи от ведомого следующего кадра. Если адреса не совпадают, то МК посредством специального бита управления переводит приемник модуля UART снова в режим ожидания. Тогда все следующие кадры пакета обмена этим МК восприняты не будут, поскольку они содержат нулевой разряд D8.
• Ведущий МК передает ведомому необходимое число байтов, сопровождая каждый из них признаком данных D8 = 0. При необходимости ведущий принимает данные от ведомого. О завершении обмена ведущий информирует ведомый посылкой сигнала «Break».
• Ведомый в ответ на сигнал «Break» переводит приемник модуля UART в состояние ожидания. Локальная сеть приведена в исходное состояние и готова к передаче нового пакета.
Кроме рассмотренных режимов асинхронного обмена, многие из модулей UART поддерживают режим синхронной приемопередачи. Так, вМКМЗС-51 контроллер последовательного интерфейса реализует полудуплексный обмен в синхронном режиме, при котором импульсы синхронизации выдаются на линию TxD, данные передаются или принимаются по линии RxD (см. 4.2.7). Важно отметить, что при синхронном обмене модуль UART МК MSC-51 может работать только в ведущем режиме, т. е. именно этот модуль формирует импульсы синхронизации независимо от направления обмена. Модуль SCI МК МС68НС705В16 (модуль типа UART) реализует симплексный синхронный обмен, при котором возможно только одно направление передачи данных: из МК к периферийной ИС.
Большинство МК фирмы «Motorola» имеют в своем составе контроллер последовательного интерфейса SPI (Serial Peripheral Interface). Стандарт SPI предложен фирмой «Motorola». Он предназначен для связи МК с периферийными устройствами МП системы. Наиболее часто эти устройства расположены на одной плате с МК, реже - это вынесенные пульты управления, индикаторные панели и т. п.
Рис. 4.23.Сопряжение МК с периферийными ИС посредством интерфейса SPI
В качестве периферийных устройств могут использоваться как простейшие сдвиговые регистры, так и сложные периферийные ИС со встроенными контроллерами управления, такие как ЦАП, сигма-дельта АЦП с цифровой фильтрацией, последовательные запоминающие устройства типа FLASH или EEPROM, энергонезависимые ОЗУ и т. д. В редких случаях интерфейс SPI используется для обмена данными между несколькими МК системы.
На рис. 4.23 представлена структурная схема сопряжения МК и двух периферийных ИС с использованием интерфейса SPI. В рассматриваемом примере МК является ведущим устройством, он инициирует обмен при передаче информации между МК и одной из периферийных ИС. Каждая из периферийных ИС является устройством ведомым. SPI- шина представлена тремя общими линиями связи (MISO, MOSI, SCK) и двумя линиями выбора ведомого устройства (SS1, SS2), которые индивидуальны для каждой периферийной ИС:
MOSI - линия передачи данных от ведущего к ведомому (Master Output Slave Input); MISO - линия передачи данных от ведомого к ведущему (Master Input Slave Output);
SCK-линия сигнала стробирования данных;
SS1 и SS2-линии сигналов выбора ведомого устройства.
Как видно из рис. 4.23, образованная на основе интерфейса SPI мини-сеть относится к классу магистрально-радиальных. Линии передачи данных и линия синхронизации являются примером шинной организации, а линии выбора ведомого устройства - элемент системы радиального типа. Перед началом обмена (рис. 4.24) ведущее устройство отмечает одно ведомое устройство, с которым будет производиться обмен. Для этого на линии выбора устройства SSi устанавливается низкий активный уровень сигнала. Затем ведущее устройство последовательно выставляет на линию MOSI восемь бит информации, сопровождая каждый бит сигналом синхронизации SCK Ведомое устройство дешифрирует переданный байт информации и определяет, в каком направлении будет производиться дальнейший обмен. Если ведомое устройство должно принимать информацию, то ведущее устройство, не снимая сигнала выбора ведомого SSi, продолжит передачу по линии MOSI. Если ведомое устройство должно передавать информацию, то оно активизирует линию MISO и в ответ на каждый импульс синхронизации от ведущего будет выставлять один бит информации. Длина посылки обмена в общем случае не ограничена, но для правильной работы модуля SPI должна составлять целое число байтов. Завершение обмена также инициируется ведущим посредством установки в неактивное состояние сигнала выбора ведомого SSi.
Для подключения к SPI-шине встроенный контроллер SPI имеет четыре вывода: MOSI, MISO, SCK, SS. Модули контроллеров SPI фирмы «Motorola» могут работать как в ведущем, так и в ведомом режимах. Скорость приема и передачи определяется частотой тактирования межмодульных магистралей МК fBUS: в ведущем режиме скорость обмена не может превышать /gus/2, в ведомом режиме максимальная скорость обмена равна fgus.Поэтому для МК семейства НС05 максимальная скорость обмена в ведущем режиме составляет 1 Мбит/с, в ведомом - 2 Мбит/с. Аналогичные показатели для МК семейства НС08 соответственно 4 и 8 Мбит/с.
При работе встроенного контроллера в ведущем режиме к выводу MOSI подключается выходная линия данных, а к MISO - входная. При работе в ведомом режиме выводы меняются ролями. Вывод SCK является выходом, если контроллер SPI работает в ведущем режиме, и входом, если - в ведомом. В системах с несколькими ведущими устройствами все выводы SCK соединяются вместе. То же делается с выводами MOSI и MISO. На время отсутствия связи буферы выводов встроенного контроллера SPI переводятся в высокоимпедансное состояние. Последнее позволяет избежать конфликтов на шине SPI. В противном случае несколько выводов MISO ведомых устройств одновременно были бы активными, что не позволило бы ведущему устройству произвести прием достоверной информации.
Вывод SS встроенного контроллера SPI используется в зависимости от того, в каком режиме работает данное устройство. При работе в ведомом режиме при подаче высокого уровня сигнала на вход SS устройство игнорирует сигналы SCK и удерживает вывод MISO в высокоимпедансном состоянии. Если же в ведомом режиме работы на входе SS установлен низкий логический уровень, то буферы линий MOSI и SCK разворачиваются на ввод, линия MISO - на вывод. При работе в ведущем режиме вывод SS может быть использован как обычная линия вывода. В системах со сложной логикой работы этот вывод может использоваться как вход сигнала обнаружения ошибки для индикации состояния шины в случаях, если более чем одно устройство пытается стать ведущим.
Схема управления контроллера SPI интерфейса позволяет выбрать один из двух протоколов обмена и полярность импульсов синхронизации SCK. При работе в ведущем режиме возможно также программно выбрать частоту импульсов синхронизации.
Два бита регистра управления любого контроллера SPI интерфейса определяют временную диаграмму обмена по шине SPI:
1) бит СРНА назначает протокол обмена;
2} бит CPOL определяет полярность сигнала синхронизации SCK.
В соответствии с комбинацией битов CPHA:CPOL принято различать четыре режима работы интерфейса SPI. Комбинации CPHA:CPOL = 00 соответствует режим 0, комбинации CPHA:CPOL =11— режим 3. Встроенный контроллер SPI МК позволяет программно настраивать режим SPI в процессе инициализации, в то время как периферийные ИС реализуют один или два режима SPI, которые определяются их техническим описанием. Наиболее часто это режимы 0 и 3.
На рис. 4.25 представлены временные диаграммы сигналов для протокола передачи СРНА = 0. Для сигнала SCK приводятся две диаграммы, различающиеся полярностью сигнала.
Первая соответствует режиму 0, вторая - режиму 1. Диаграммы относятся как к ведущему, так и к ведомому устройству, поскольку выводы MISO и MOSI ведущего соединены с аналогичными выводами ведомого. Сигнал SS подается только на ведомое устройство. Поэтому вывод SS у ведущего остается незадействованным и его диаграмма не представлена, но имеется в виду, что она соответствует неактивному состоянию. Встроенные контроллеры SPI выполнены таким образом, что длина посылки составляет один байт, что и отражено на временных диаграммах.
Начало обмена рассматриваемого протокола определяется установкой сигнала выбора ведомого SS в активное состояние SS = 0. При направлении передачи от ведущего к ведомому первый перепад сигнала синхронизации SCK используется ведомым устройством для запоминания очередного бита во внутреннем сдвиговом регистре контроллера SPI. Ведущий выставляет очередной бит посылки на линии MOSI по каждому четному фронту сигнала SCK. При передаче данных от ведомого к ведущему старший бит передаваемого байта должен быть выставлен ведомым на линию MISO сразу после изменения уровня сигнала SS = 0. По первому фронту SCK уровень сигнала на линии MISO будет запомнен в младшем разряде сдвигового регистра ведущего устройства. По этой причине сигнал на линии выбора ведущего должен быть возвращен в неактивное состояние SS = 1 после передачи каждого байта в любом направлении. Тогда передача каждого нового байта будет сопровождаться предварительной
установкой SS в «0»
Начало обмена для протокола опции СРНА = 1 (рис. 4.26) определяет первое изменение уровня сигнала на линии SCK после установки сигнала выбора ведомого SS в активное состояние SS = 0. При передаче данных от ведущего к ведомому и в обратном направлении все нечетные перепады SCK вызывают выдвижение очередного бита посылки из сдвигового регистра передатчика на линию. Каждый четный перепад используется для записи этого бита в сдвиговый регистр приемника. Сигнал выбора ведомого может оставаться в активном состоянии SS = 0 в течение передачи нескольких байт информации. Это несколько упрощает логику программного драйвера SPI.
Рассмотренные протоколы обмена не имеют различий по скорости и надежности передачи информации. Выбор протокола диктуется периферийным устройством. В некоторых случаях полярность и фаза сигнала SCK изменяются между передачами для того, чтобы обеспечить связь с устройствами, имеющими различный протокол. Пример контроллера SPI рассмотрен в п. 4.3.9.
Интерфейс I2C является двухпроводным последовательным интерфейсом, разработанным фирмой «Philips Corporation».
Основными свойствами интерфейса PC являются следующие:
• двунаправленная передача данных между главными и подчиненными устройствами;
• многоабонентская шина (центрального главного узла в сети может не быть);
• арбитраж между одновременно передающими устройствами без разрушения целостности передаваемых данных;
• последовательная тактовая синхронизация позволяет приборам с различными скоростями передачи битов осуществлять связь через одну последовательную шину;
• последовательная тактовая синхронизация может использоваться в качестве механизма квитирования установления связи, чтобы приостанавливать и возобновлять последовательную передачу.
Магистраль интерфейса I2C использует две линии для передачи информации между приборами:
1)SDA - двунаправленную линию данных;
2)SCL - линию сигнала стробирования данных.
Типовая конфигурация PC-шины показана на рис. 4.27.
В протоколе интерфейса I 2C каждое устройство имеет адрес. Когда ведущее устройство желает инициировать передачу данных, оно передает адрес устройства, с которым будет производить обмен. Все устройства на шине следят за выставляемым на шину адресом и сравнивают его с собственным адресом. Вместе с адресом передается бит направления передачи R/W, который определяет, будет ли ведущий читать из ведомого или будет писать в него. При R/W = 0 реализуется режим записи в ведомое устройство. При R/W = 1 реализуется режим чтения из ведомого устройства. Интерфейс I2C поддерживает два формата передачи адреса. Простейший - 7-битный формат с битом R/W в младшем разряде передаваемого байта (рис. 4.28). Более сложным является 10-битный формат.
В зависимости от направления передачи возможны два типа обмена данными для I 2C шины.
1.Передача данных от главного передатчика к подчиненному приемнику. Первый байт,передавае-
мый передатчиком, является адресом подчиненного приемника. Затем следует несколько байтов данных. Подчиненный приемник возвращает бит подтверждения после каждого принятого байта.
2.Передача данных от подчиненного передатчика к главному приемнику. Первый байт
(адрес подчиненного передатчика) передается главным устройством. Затем подчиненный передатчик возвращает бит подтверждения. Следующие несколько байтов данных
передаются подчиненным устройством главному. Главное устройство возвращает бит
подтверждения после каждого принятого байта, кроме последнего. В конце последнего
принятого байта возвращается «нет подтверждения».
Когда нет передачи данных, реализуется режим ожидания: линии тактирования SCL и данных SDA приведены подтягивающими резисторами к высокому уровню логического сигнала.
Ведущее (главное) устройство генерирует все последовательные синхроимпульсы и условия START и STOP, определяющие начало и конец передачи данных. Условие START определяется как переход SDA из высокого уровня в низкий при высоком уровне SCL, а условие STOP - как переход SDA из низкого уровня в высокий при высоком уровне SCL (рис. 4.29). Ввиду такого способа определения условий START и STOP при передаче данных линия SDA может изменять свое состояние только при низком уровне SCL.
Модуль контроллера интерфейса 12С, который удовлетворяет спецификации 12С-шины и поддерживает два вышеперечисленных типа передачи данных, может работать в следующих четырех режимах.
1.Режим главного передатчика. Последовательный вывод данных через выход SDA
передатчика, в то время как на выходе SCL передатчика формируются последовательные синхроимпульсы. Первый переданный байт содержит адрес подчиненного приемного устройства (7 бит) и бит направления данных R/W = 0. В этом случае говорят, что
передается «W». Таким образом, первый переданный байт представляет собой адрес
подчиненного приемника плюс «W». Последовательные данные передаются по 8 бит.
После отправки каждого байта главный передатчик ожидает от подчиненного устройства
бит подтверждения ASK. Условия START и STOP формируются ведущим (главным)
устройством для указания начала и конца сеанса последовательного обмена посылкой,
состоящей в общем случае из нескольких байтов.
2.Режим главного приемника. Первый переданный приемником байт содержит адрес подчиненного передающего устройства (7 бит) и бит направления данных R/W = 1.
В этом случае говорят, что передается «R». Таким образом, первый переданный приемником байт представляет собой адрес подчиненного передатчика плюс «R». Последовательные данные передаются по линии SDA от ведомого (подчиненного) устройства
к ведущему (главному), в то время как импульсы синхронизации на линии SCL формирует ведущий. Последовательные данные передаются по 8 бит. После того, как ведущий
(главный) принял очередной байт, он выставляет на линию сигнал подтверждения приема ASK. Сигналы START и STOP формируются ведущим.
3.Режим подчиненного приемника. Последовательные данные и синхроимпульсы передаются по линиям SDA и SCL на одноименные входы подчиненного приемника. После
того, как принят каждый байт, приемник анализирует наличие на линии бита подтверждения ASK, который формирует передатчик. Условия START и STOP формируются передатчиком. Распознавание адреса выполняется аппаратными средствами модуля приемника
после приема адреса подчиненного устройства и бита направления.
4. Режим подчиненного передатчика. Первый байт принимается и обрабатывается
подчиненным передатчиком так же, как и в режиме подчиненного приемника. Однако бит
направления в принятом байте будет указывать, что направление обмена должно быть
изменено на обратное. Далее последовательные данные передаются по линии SDA
с одноименного выхода подчиненного (ведомого) передатчика, в то время как синхроимпульсы принимаются им по входу SCL от главного приемника. После передачи каждого
байта подчиненный передатчик анализирует наличие на линии бита подтверждения ASK.
Условия START и STOP формирует главный приемник.
В подчиненном режиме аппаратные средства контроллера PC-интерфейса осуществляют поиск своего собственного подчиненного адреса или адреса общего вызова. Если детектируется один из этих адресов, запрашивается прерывание. Когда микроконтроллер желает, чтобы шина стала главной, аппаратные средства ожидают, пока шина освободится. Возможное функционирование в качестве подчиненного при этом не прерывается. Если арбитраж шины потерян в главном режиме, то соответствующий контроллер PC переключается в подчиненный режим немедленно и может детектировать свой собственный подчинённый адрес
Разработанный в середине 1980-х фирмой «Bosch» для систем управления узлами автомобиля, протокол CAN (Controller Area Network - сеть контроллеров) является последовательным протоколом высокоскоростной и высоконадежной передачи данных в широковещательном (broadcast) режиме в мультимастерной среде. Удачное сочетание низкой стоимости подключения, простоты и надежности с доступностью элементной базы и инструментальных средств разработки - одни из основных достоинств CAN-технологии. Положения стандарта, закрепленные в используемой на сегодня спецификации 2.0А/В фирмы «Bosch» и международном стандарте ISO 11898, соответствуют двум начальным уровням (физическому и канальному) 7-уровневой модели взаимодействия открытых систем ISO/OSI. Ряд оригинальных технических решений, реализованных при разработке протокола, наилучшим образом позволили сориентировать его на решение задач контроля и управления.
Структура CAN-сети представлена на рис. 4.30. Шинная топология, являющаяся основой CAN, требует наличия механизма адресации узлов, однако в CAN нет адресов как таковых: сообщение принимается всеми узлами. Любое передаваемое сообщение имеет определяющий его содержание уникальный идентификатор (ID), на основании которого каждый узел фильтрует «свои» сообщения и «решает», реагировать или нет на сообщение, транслируемое в данный момент. Неоспоримыми преимуществами отсутствия адресации являются теоретически неограниченное число узлов и простота их добавления и отключения.
|
с 18-битным расширением) с теоретически возможным числом типов сообщений более 536 млн. Фреймы, соответствующие стандартному и расширенному форматам сообщений, приведены на рис. 4.31.
Бит RTR (Remote Transmission Request - запрос передачи данных) для фрейма должен иметь доминантный уровень. В расширенном формате фрейма бит SRR (Substitute Remote Request) с рецессивным уровнем заменяет следующий (в стандартном формате) за 11-разрядным идентификатором бит RTR. Бит распознавания формата фрейма IDE (ID Extension) имеет доминантный уровень для стандартного формата фрейма и рецессивный -для расширенного. Биты r0 и r1 - резервные.
В поле управления (Control Field) содержится 4-разрядный код, задающий длину поля данных (0-8 байт) - DLC - Data Lenght Code. Поле контрольной суммы CRC Field включает в себя контрольную сумму сообщения (15 бит) и бит-разделитель. В поле подтверждения АСК (Acknowledgement) передающий узел всегда выставляет рецессивный уровень. В случае, если передача прошла успешно, приемный узел сигнализирует об этом установкой в этом поле доминантного уровня.
Начинается фрейм доминантным битом SOF (Start of Frame), служащим также для синхронизации битового потока, а заканчивается семью битами рецессивного уровня поля EOF (End of Frame) и 3-битным того же уровня промежутком между фреймами.
Для исключения потери синхронизации при передаче длинной последовательности одинаковых битов в пределах полей начала фрейма, арбитража, управления, данных и контрольной суммы используется битстаффинг - вставка дополнительного бита противоположного значения после подряд идущих пяти одинаковых. При приеме производится обратная (дебитстаффинг) операция.
Для запроса данных от удаленного узла служит фрейм запроса данных Remote Frame, также имеющий стандартный и расширенный форматы. Отличия фрейма запроса данных от фрейма данных - в отсутствии поля данных и рецессивном уровне бита RTR. При получении фрейма запроса данных запрашиваемый узел отвечает передачей фрейма данных.
Сигнализация об ошибках происходит посредством передачи фрейма Error Frame. Он инициируется любым узлом (в CAN правильность передачи контролируется каждым узлом), обнаружившим ошибку.
Шесть доминантных бит флага ошибки (активный флаг ошибки) перекрывают остаток ошибочно переданного фрейма и создают глобальную ошибку в сети - ошибку битстаффинга, которая воспринимается остальными узлами, если им не удалось обнаружить первоначальную (локальную) ошибку. Далее они выставляют свои флаги ошибки. Ввиду этого обстоятельства последовательность доминантных бит (суперпозиция флагов ошибки) может иметь длину от 6 до 12 бит. Ненадежным или частично поврежденным узлам (см. ниже) при обнаружении ошибки разрешено посылать лишь пассивный флаг ошибки - последовательность шести рецессивных бит.
Для задержки передачи данных или посылки фрейма запроса данных (при неготовности приемника или наличии доминантных бит в промежутке между фреймами) служит фрейм перегрузки Overload Frame. В отличие от фрейма ошибки он не влияет на счетчик ошибок и не вызывает повторную передачу сообщения.
Несколько необычно решается проблема коллизий (столкновений в сети), присущая шинной топологии. В этом случае снова используется идентификатор сообщения в сочетании со схемой подключения к шине типа «монтажное ИЛИ», где узел, выставляющий на шину «О» - доминантный уровень, подавляет «1» - рецессивный уровень, выставленный другим узлом. Победителем в арбитраже является узел, имеющий идентификатор с наименьшим численным значением и, как следствие, наивысший приоритет. Только победивший узел продолжает передачу данных, остальные пытаются сделать это позже. На рис. 4.68 наглядно отражена процедура арбитража при попытке передачи сообщений одновременно четырьмя узлами сети.
Подобный режим доступа к шине известен как CSMA/CD+AMP (Carrier Sense Multiple Access with Collision Detection and Arbitration on Message Priority) - множественный доступ с контролем несущей, обнаружением коллизий и арбитражем на основе приоритета сообщений. Этот режим не позволяет поспорившим узлам устраивать столкновение на шине, а сразу выявляет победителя. CAN-протокол, изначально разработанный специально для систем управления жизненно важными узлами автомобилей, критичных к уровню безопасности и степени достоверности передаваемых данных, обладает эффективными средствами обнаружения ошибок.
В отличие от других сетевых протоколов, в CAN не используются подтверждающие сообщения, а при обнаружении одной или более ошибок хотя бы одним узлом (в CAN все узлы принимают все сообщения и участвуют в проверке сообщения на наличие ошибок -вычисляют контрольную сумму и т. п.) текущая передача прерывается (при условии, что ошибку обнаружил как минимум один узел со статусом Error Active) генерацией фрейма ошибки с флагом ошибки. Передатчик, сообщение которого было прервано, повторяет передачу.
4.2. СЕМЕЙСТВО МК MCS-51 ФИРМЫ «INTEL»
АРХИТЕКТУРА МК 8051 АН
На рис. 4.32 приведена внутренняя структура МК 8051 АН фирмы «Intel», с которого началось семейство MCS-51 (отечественный аналог 1816ВЕ51). Контроллер включает следующие модули:
• центральный процессор CPU MCS-51; разрядность обрабатываемого слова составляет один байт;
• внутреннюю память программ объемом 4096 однобайтовых ячеек памяти
(4 Кбайта);
• внутреннюю память данных объемом 128 однобайтовых ячеек;
• четыре 8-разрядных параллельных порта ввода/вывода; _
• два 16-разрядных программируемых таймера;
• последовательный порт;
• схему формирования сигналов внешней мультиплексированной магистрали адрес/
данные и внешней магистрали управления.
Обмен информацией между модулями осуществляется по 8-разрядной внутренней магистрали.
МК семейства MCS-51 используют гарвардскую архитектуру: память программ (ПЗУ) и память данных (ОЗУ) имеют раздельное адресное пространство. И, как следствие, для обращения к ячейкам памяти разного типа должны быть использованы разные типы команд. Максимальный размер адресного пространства для каждого типа памяти составляет 64 Кбайта. Однако непосредственно на кристалле МК 8051 АН располагаются только 4 «байта ПЗУ и 128 байт ОЗУ. МК семейства MCS-51 имеют открытую архитектуру, т.е. позволяют подключать внешнюю память. Поэтому при необходимости, как память программ, так и память данных могут быть увеличены посредством подключения дополнительных микросхем памяти.
Варианты организации памяти в МП системе на основе МК 8051 АН поясняет рис. 4.33. МК может быть использован в однокристальном режиме (сигнал на линии ЕА равен 1). Тогда внешняя память в системе отсутствует, память программ располагается по адресам 0000h...0FFFh, память данных - с 00h no 7Fh. Регистры специальных функций периферийных модулей имеют объединенное с внутренним ОЗУ адресное пространство. Они расположены по адресам 80h...0FFh. Даже если МК 8051 АН работает в однокристальном режиме, к нему может быть подключена внешняя память программ. Она должна располагаться в диапазоне адресов 1000h-0FFFFh, т. е. дополнять внутреннее ПЗУ МК. Если МК работает в расширенном режиме (сигнал на линии ЕА равен 0), то он будет адресовать только внешнюю память программ - с 0000h no 0FFFFh, несмотря на то, что внутреннее (резидентное) ПЗУ на кристалле имеется.
В каждом из рассмотренных режимов МК 8051 АН может использовать два массива памяти данных: внутреннее ОЗУ, расположенное по адресам 00h... 7Fh, и подключаемое внешнее ОЗУ, или ПЗУ, которое может располагаться, начиная с адреса 0000h вплоть до 0FFFFh. He следует бояться возможного перекрытия адресного пространства внутренней и внешней памяти данных. Доступ к ним осуществляется разными командами.
В архитектуре MCS-51 адресное пространство внутренней памяти данных объединяет все программно доступные ресурсы МК, в том числе регистры центрального процессора. Пространство внутренней памяти данных делится на пространство адресов внутреннего ОЗУ и пространство адресов регистров специальных функций (рис. 4.34).
В области ОЗУ выделяют три сегмента.
1.Младшие 32 адреса занимают четыре регистровых банка, каждый из которых содержит по 8 регистров общего назначения RO - R7. При обращении к ячейкам памяти этого сегмента могут быть использованы как абсолютные адреса 00h - 1Fh, так и символьные
имена регистров RO - R7. Для выбора одного регистра из четырех, имеющих одно имя, используется механизм задания текущего банка регистров. Номер банка, на 8 ячеек которого в данный момент времени распространяются имена R0 - R7, определяется значением битов RS1 :RS0 регистра признаков PSW.
2.Ячейки памяти с адресами 20h - 2Fh допускают побитное обращение. Прямо адресуемые биты имеют адреса 00h — 7Fh. Таким образом, обращение к данным, расположенным в ячейках памяти с адресами 20h - 2Fh, может быть осуществлено как в байтовом, так и в битовом формате
3. Ячейки памяти с адресами 30h - 7Fh допускают обращение только посредством абсолютных адресов, данные доступны только в байтовом формате.
Область памяти с адресами 80h - OFFh занимают регистры специальных функций: регистры данных портов ввода/вывода Р0, Р1, Р2, РЗ, регистры задания режимов работы других периферийных модулей. Обратите внимание, что в этом же адресном пространстве расположены регистры центрального процессора: аккумулятор АСС, регистр В, регистр состояния PSW, старший DPH- и младший DPL-байты двухбайтового регистра DPTR, указатель стека SP. Большая часть регистров специальных функций, а также АСС, В и PSW допускают побитное обращение. Прямоадресуемые биты имеют адреса с 80h no OFFh. Формат регистров специальных функций будет рассмотрен в разделах, посвященных соответствующим периферийным модулям. Из рис. 4.34 видно, что не все адресное пространство области 80h - 0FFh использовано, имеются свободные адреса. В версиях МК с ядром MCS-51, но с большим по сравнению с моделью 8051 АН набором периферийных модулей эти адреса используются для размещения дополнительных регистров специальных функций. Перечень регистров специальных функций МК 8051АН приведен в табл. 4.4.
Таблица 4.4