КОНТРОЛЛЕРЫ ДОПОЛНИТЕЛЬНЫХ КОММУНИКАЦИОННЫХ

КАНАЛОВ

Контроллер І2С. Контроллер I2C введен в состав СРМ-модуля коммуникационного контроллера МРС860 и позволяет ему обмениваться данными с другимиІ2С -устройствами, такими как микроконтроллеры, EEPROM, устройства реального времени, аналого-циф­ровые преобразователи.

I2C - это синхронный, двунаправленный интерфейс (линия данных SDA и линия так­товых сигналов SCL), который может работать в режимах master-slave и multimaster. Вы­бор режима выполняется в регистре команд I2COM (рис. 5.56). Если бит M/S = 0, то контроллер работает как slave-устройство, если M/S = 1, то - как master.

Оба вывода SCL и SDA являются двунаправленными и подсоединяются через резис­тор к положительному напряжению. Таким образом, поскольку контроллер имеет выво­ды типа «открытый исток» (open drain), то они могут быть объединены в единую шину для работы в конфигурации multimaster. Когда на Ι2С-шине нет передачи, то линии SCL и SDA находятся в пассивном «1» состоянии.

Настройка режимов работы І2С -контроллера производится в регистре режима I2MOD (рис. 5.57).

Включение контроллера в работу производится установкой бита EN := 1. В выключен­ном режиме (бит EN = 0) контроллер работает в режиме пониженного энергопотребления.

Тактирование приемника и передатчика PC-контроллера выполняется одной часто­той. Если устройство работает в режиме slave, то тактовые сигналы поступают от внеш­него источника по линии SCL. Источником тактового сигнала для master-устройства яв­ляется собственный внутренний генератор BRG. Тактовый сигнал BRGCLK для работы BRG-генератора поступает от системного синтезатора частоты и может быть предвари­тельно изменен. Биты PDIV определяют коэффициент предварительного деления вход­ной частоты (табл. 5.36).

BRG-генератор І2С -контроллера может также изменять входную частоту генератора. Коэффициент деления частоты задается пользователем в режиме I2BRG и рассчитыва­ется как 2х (I2BRG+3). На выходе BRG-генератора тактовый сигнал представляет собой меандр. При системной частоте 25 МГц максимальная скорость передачи данных может достигать 520 КГц (BRGCLK/(4x2x(0+3)= BRGCLK/48),

Поскольку І2С -интерфейс используется для связи устройств на одной плате, в одном приборе, то на линии тактового сигнала может оказывать влияние посторонний шум. Ус­тановка бита FLT := 1 позволяет пропустить тактовый сигнал через цифровой фильтр, чтобы убрать возможные наводки из-за шумов.

Бит REVD задает порядок передачи битов при обмене символами. Если бит REVD = 0, то первым передается SLB. Если REVD = 1, то первым передается MSB, этот режим явля­ется рабочим для контроллеров фирмы «Motorola».

Бит GCD в регистре I2MOD определяет, как должен вести себя приемник при получе­нии общего запроса от master-станции. Если бит GCD = 1, то никакие действия не произ­водятся. Если бит GCD = 0, то приемник посылает подтверждение на адрес общего вызо­ва (general call address).

В контроллере МРС860 параметры І2С -контроллера хранятся на 1 -и странице памя­ти параметров (parameter RAM) со смещением + 0x1 С80 от начала двухпортовой памя­ти. Структура и состав памяти параметров І2С -контроллера совпадают со структурой таблицы протокол-независимых параметров (см. табл. 5.30). Отличие заключается толь­ко в том, что отсутствуют две последние ячейки таблицы со смещениями I2C base+28 и I2C base+2C.

Данные для І2С -канала хранятся в буферах памяти, которые организованы в таблицу TxBD (передачи) и RxBD (приема). Принцип организации таблицы аналогичен таблицам буферов для SCC-каналов ввода/вывода. Стартовый адрес таблиц в памяти контролле­ра хранится в ячейках RBASE и TBASE памяти параметров І2С -контроллера. Пользова­тель может ограничить число буферов в таблице, установив бит W := 1 в слове состоя­ния последнего необходимого буферного дескриптора. При подготовке обмена данными центральный процессор готовит данные для передачи в буферах памяти, заполняет со­ответствующие буферные дескрипторы и устанавливает в их слове состояния бит готов­ности к передаче R := 1, а также заранее подготавливает буферы для приема данных.

Режимы работы І2С -контроллера. В режиме master І2С контроллер управляет обме­ном данными со slave-устройствами. Для этого он передает slave-устройству специаль­ное сообщение, которое определяет режим работы (чтение или запись). Если это опера­ция чтения, то после передачи первого сообщения направление передачи по линии SDA меняется, и передавать будет slave-устройство.

Для начала обмена сообщениями master-устройство должно подготовить данные для передачи в буферах TxBD, установив бит готовности R := 1 в слове состояния бу­ферного дескриптора, а также подготовить буферы приема RxBD. Затем центральный процессор должен установить бит STR := 1 в регистре команд I2COM. Данные будут передаваться после того, как они будут загружены в буфер FIFO передатчика по SDMA-каналам из памяти, и после того, как І2С -шина будет свободна. Размер буфера FIFO приемника и передатчика установлен равным двум символам. При передаче MSB пе­редается первым.

При начале передачи І2С -контроллер выставляет start-условия (адрес slave-устрой­ства) на линии SDA и тактовые импульсы , число которых соответствует числу передава­емых битов, на линию SCL. Для каждого переданного бита на линию SDA контроллер производит его повторное чтение (контроль), чтобы обнаружить состояние коллизии (collision) с другим master-устройством. Поскольку выводы контроллера объединены по схеме «монтажное ИЛИ» в единую шину, то коллизии обнаруживаются, если была выставлена «1», а обнаружен «0». При этом передача прерывается и канал переводится в режим slave и генерируется маскируемое прерывание к центральному процессору.

После передачи каждого байта данных устройство master контролирует индикацию подтверждения от slave-станции. Если подтверждение не пришло, передача прерывает­ся и условие «остановки» генерируется master-станцией. Регистрация stop- и start-усло­вий всегда приводит к закрытию текущего буфера приемника.

Для передачи данных slave-устройству master-станция подготавливает в буфере n+1 байт данных, где первый байт содержит адрес slave-устройства и бит, определяющий режим чтение/запись. Остальные n байт - это данные, которые передаются slave-уст­ройству. Если R/W = 1, то будет производиться чтение с устройства slave.

Если І2С -контроллер работает в режиме slave, то его адрес задается пользователем в регистре I2ADD (рис. 5.58) и имеет 7 разрядов, таким образом, в сети может быть до 128 slave-устройств. Если slave-устройство распознало свой адрес, то данные принимаются во внутренние буферы RxBD, на них передаются подтверждения, и так продолжается, пока по линии SDA не придет от master-станции новое start/stop-условие. Если совпаде­ния адреса не произошло, slave-устройство ожидает следующего start-условия. Slave-контроллер подтверждает прием каждого байта, пока не обнаружит ошибку переполне­ния overrun своего буфера FIFO.

Если данные для передачи от master-устройства занимают несколько буферов ТхЕШ, то они будут передаваться байт за байтом, пока не будет достигнут последний буфер (бит L = 1 в его слове состояния), при этом бит STR = 1 повторно для каждого нового байта не устанавливается. Бит STR будет автоматически сбрасываться после передачи первого бита байта данных.

Если контроллер работает в режиме slave, то для начала обмена данными он ожида­ет команды и тактового сигнала SCL от master-устройства. Все принятые от master-стан­ции сообщения тут же посылаются обратно, таким образом, обеспечивается подтверж­дение их приема.

Перед началом обмена центральный процессор slave-станции должен подготовить буферы данных для передачи (TxBD) и для приема данных (RxBD), затем установить бит STR := 1 в регистре команд I2COM. Установка бита STR в slave-устройстве не начинает передачу, а только подготавливает схемы контроллера и данные для передачи. Переда­ча начнется только после прихода команды от master-станции.

Если при начале передачи start-условия slave-станция в первом передаваемом байте распознала свой адрес (биты с 7-го по 1-й), то проверяется бит 0 -это бит команды R/W. Если R/W = 0, то происходит прием данных от master-станции, и эти данные принимают­ся в RxBD-буферы, пока не будут получены новые start- или stop-условия. Если R/W = 1, то данные из буфера FIFO передатчика slave-станции будут переданы master-станции. Если данные готовы, то они будут переданы по следующему импульсу тактового сигнала после передачи подтверждения на предыдущее сообщение. Если данные не готовы, то передача прерывается и генерируется маскируемое прерывание ТхЕ, которое уведом­ляет центральный процессор, что надо подготовить данные для передачи.

После передачи каждого байта передатчик проверяет бит подтверждения от master-станции. Если подтверждение не получено, то передача прерывается и генерируется прерывание центрального процессора. Прерывание также может генерироваться после передачи полного буфера, если возникла ошибка или произошло незаполнение underrun буфера FIFO передатчика. Если произошла ошибка незаполнения (underrun), то пере­датчик slave-станции будет передавать «1» биты, пока не получит stop-условие от master-станции.

Пользователь может управлять работой І2С -контроллера, передавая RISC-контрол­леру команды INITTX PARAMETERS, CLOSE RX, INIT RX PARAMETERS, INITTX and RX PARAMETERS.


Рис. 5.59. Формат регистра режима SPIMODE SPI-интерфейса

Последовательный коммуникационный порт. Последовательный порт в контрол­лере МРС860 реализован в виде SPI (Serial Peripheral Interface). SPI -полнодуплексный, синхронный, символьно-ориентированный канал связи, использующий 4-проводной ин­терфейс (линия приема SPIMISO, линия передачи SPIMOSI, линия тактовых сигналов SPICLK и линия выбора slave-устройства SPISEL), предназначен для обмена данными между коммуникационными контроллерами, ISDN- и другими сетевыми устройствами. Конфигурирование режимов работы интерфейса выполняется в регистре режима SPIMODE (рис. 5.59).

Устройство, поддерживающее SPI-интерфейс, может работать в режиме master (бит M/S = 1) или slave (бит M/S = 0). Также поддерживается конфигурация multimaster для объединения нескольких SPI-устройств на общую шину, используя их выводы в режиме открытого стока (open-drain).

В режиме master SPI-контроллер передает данные для других slave-станций, кото­рые обязаны немедленно вернуть принятый кадр (режим back-to-back). Это использу­ется для обеспечения надежности передачи и подтверждения корректности передачи кадра.

Тактирование приемника и передатчика канала выполняется одной тактовой часто­той. Если выбранное устройство работает в режиме master, то тактовый сигнал поступа­ет от собственного независимого BRG-генератора. В режиме master устройство выраба­тывает внешние сигналы выбора (разрешения работы) SPISEL для slave-устройства и сигнал SPICLK, который выставляется только во время передачи данных, для тактирова­ния других slave-устройств. Если устройство работает в режиме slave, то тактовые сигна­лы поступают от внешнего источника.

Если контроллер работает в режиме master, то пользователь может управлять вход­ной частотой для BGR-генератора. Генератор BRG для своей работы использует вход­ную тактовую частоту от внутреннего синтезатора частоты микросхемы (SynCLK). Если бит DIV16 равен 1, то входная частота генератора BRGCLK перед поступлением на вход схемы генератора делится на 16 (BRGCLK = SynCLK/16). Если бит DIV16 = 0, то предва­рительного деления частоты нет.

Сам генератор может также делить входную частоту на коэффициент, который опре­делен в битах РМ, перед тем как передать ее для тактирования схемам приемника и передатчика каналов связи. Входная частота BRGCLK делится на 4х([РМО-РМЗ])+1), таким образом, коэффициент внутреннего деления частоты может быть от 4 до 64. Сигнал на выходе генератора представляет собой меандр.

Максимальная скорость передачи отдельных символов в режиме master равна SynCLK/ 4, а в режиме slave - SynCLK/2. При передаче нескольких символов подряд интервал между ними не должен превышать значения SynCLK/50.

Особенности работы интерфейса. SPI-интерфейс выполняет полнодуплексные опе­рации, т. е. прием данных и передача данных выполняются одновременно. При передаче наиболее значимый бит (MSB) передается первым, если бит REV = 1, и наоборот, пер­вым передается LSB-бит, если бит REV = 0.

Размер передаваемых символов может колебаться от 4 до 16 бит. Биты LEN в регис­тре режима задают рабочую длину символа от 1 бита (код 0000) до 16 бит (код 1111), но, если пользователь выберет длину меньше 4 бит, будет зарегистрирована ошибка.

Как и все другие каналы ввода/вывода, SPI-интерфейс в выключенном состоянии по­требляет минимум энергии, внутренний генератор не работает, и все регистры интерфейса находятся в исходном состоянии. Включение SPI-интерфейса в работу производится запи­сью «1» в бит EN регистра SPIMODE, как показано на рис. 5.59. После установки этого бита изменять значения других битов в регистре режима пользователю запрещено.

Порт может работать или в нормальном режиме (если бит L00P = 0) или в тестовом петлевом режиме (бит L00P = 1). В петлевом режиме приемник и передатчик работают нормально, но выходы передатчика внутренне соединены со входом приемника, а дан­ные на входных контактах приемника игнорируются.

Назначение выводов SPIMOSI и SPIMISO может меняться в зависимости от режима работы контроллера (табл. 5.37). Это сделано для упрощения объединения контролле­ров в режиме multimaster.

Таблица 5.37

 


 

 

При помощи сигнала SPISEL master-станция активизирует работу slave-станции. Когда контроллер работает в режиме multimaster, вход SPISEL используется для обнаружения ошибки, когда несколько master-станций хотят работать одновременно. При этом, если контроллер работает как master-станция и обнаруживает на своем входе активный сигнал выбора slave-станции SPISEL от другого устройства master, то регистрируется ошибка.

Когда контроллер работает с несколькими slave-устройствами, следует использовать выводы параллельных портов ввода/вывода для формирования сигналов выбора slave-устройств.

Для инвертирования полярности тактового сигнала для SPI-порта используется бит CI. Если бит CI = 0, то данные выставляются на линию TXD по положительному перепаду тактового сигнала, а считываются с линии RXD - по отрицательному (рис. 5.60). Когда SPI-порт не передает данные, пассивное состояние линии тактового сигнала равно 0. Если же бит CI = 1, то данные передаются по отрицательному перепаду тактового сигнала, а считы­ваются по положительному. Когда SPI-порт не передает данные, пассивное состояние ли­нии тактового сигнала равно 1.

 


 

Бит СР определяет рабочую фазу тактового сигнала при передаче данных. Если бит СР = 0, то тактовый сигнал выставляется на линию SPICLK только в середине битового интервала передачи первого бита данных. Если бит СР = 1, то тактовый сигнал выстав­ляется в начале битового интервала передачи первого бита данных.

Пользователь может управлять работой SPI-интерфейса при помощи команд INIT ТХ PARAMETERS, CLOSE RX BD и INIT RX PARAMETERS.

Прием и передача данных. В контроллере МРС860 параметры SPI-контроллера хра­нятся на 2-й странице памяти параметров (parameter RAM) со смещением + 0x1 D80 от начала двухпортовой памяти. Структура и состав памяти параметров SPI-контроллера совпадают со структурой таблицы протокол-независимых параметров (см. табл. 5.30). Отличие заключается только в том, что отсутствуют две последние ячейки таблицы со смещениями SPI base+28 и SPI base+2C.

Данные для SPI-канала хранятся в буферах памяти, которые организованы в таблицу ТхВО (передачи) и RxBD (приема). Принцип организации таблицы аналогичен таблицам буферов для SCC-каналов ввода/вывода. Стартовый адрес таблиц в памяти контролле­ра хранится в ячейках RBASE и TBASE памяти параметров SPI-контроллера. Число бу­феров в таблице пользователь может ограничить, установив бит W := 1 в слове состоя­ния последнего необходимого буферного дескриптора. Значения, хранящиеся в ячейках RBASE и TBASE, должны быть кратны 8.

Буферы данных могут быть расположены или во внешней памяти или во внутренней двухпортовой памяти, например, в области параметров неиспользуемых SCC-каналов.

При подготовке обмена данными центральный процессор готовит данные для пере­дачи в буферах памяти, заполняет соответствующие буферные дескрипторы и устанав­ливает в их слове состояния бит готовности к передаче R := 1, а также заранее подготав­ливает буферы для приема данных.

Для начала передачи данных необходимо установить бит STR в регистре команд SPICOM (рис. 5.61). Остальные биты регистра SPICOM должны быть сброшены в «0». Если SPI-интерфейс работает в режиме master, то при установке бита STR := 1 контрол­лер начинает передавать и принимать данные. Данные начнут передаваться только тог­да, когда они будут загружены по SDMA-каналам в буфер FIFO передатчика. Когда кон­троллер работает в режиме slave, то передача начнется только после прихода сигнала выбора SPISEL и внешнего тактового сигнала. Бит STR сбрасывается в «О» автомати­чески через один период системной тактовой частоты после начала передачи.

Размер буферов FIFO для приема и передачи ограничен двумя символами.

Master-станция начинает выдавать тактовые импульсы для каждого символа на контакт SPICLK и одновременно передавать данные на контакт SPIMOSI и принимать данные с кон­такта SPIMISO. Контроллер заканчивает прием и передачу, когда будут переданы все дан­ные из буфера передачи или если при передаче возникла ошибка, а затем сбрасывает биты готовности буфера передачи R := 0 и бит пустого буфера приема Е := 0 и уведомляет цент­ральный процессор об окончании передачи маскируемым прерыванием.

Если данные для передачи занимают несколько буферов в памяти, то они будут пе­редаваться из нового буфера без задержек по окончании передачи из текущего буфера без ожидания повторной установки бита STR. Если в текущем буфере установлен бит последнего буфера кадра L = 1, то передача после передачи этого буфера будет оста­новлена. И текущий буфер приема данных будет закрыт, даже если он не заполнен.

 

 

7 6 5 4 3 2 1 0

STR Зарезервировано

Рис. 5.61. Формат регистра команд SPICOM

 

При работе в режиме slave SPI-интерфейс принимает данные от SPI master-станций и немедленно передает их обратно. Для начала передачи slave-устройством централь­ный процессор должен подготовить данные в буферах памяти, заполнить слово состоя­ния буферного дескриптора и установить для буферов TxBD бит готовности к передаче R := 1. Кроме этого, процессор должен подготовить для обмена и буферы приема RxBD. Когда данные будут подготовлены, процессору необходимо установить бит STR := 1 в регистре SPICOM, чтобы SPI-интерфейс мог подготовиться к возможному обмену дан­ными. Обмен начнется, когда придет активный сигнал выбора SPISEL = 0 и поступят тактовые сигналы на вход SPICLK. Данные будут передаваться на контакт SPIMISO и приниматься с контакта SPIMOSI. Маскируемое прерывание может быть выставлено при завершении работы с текущим буфером или если в ходе обмена зарегистрирована ошиб­ка. SPI-контроллер продолжает принимать данные в буферы приема RxBD, пока все под­готовленные буферы не будут заполнены или не будет снят активный сигнал SPISEL.

Если сигнал SPISEL стал пассивным, но все данные из буфера передачи еще не пе­реданы, то передача все равно будет прервана, а текущий буфер TxBD останется откры­тым. После прихода активного сигнала SPISEL и тактового сигнала SPICLK передача будет продолжена с точки остановки. Если же все данные переданы, а сигнал SPISEL остается активным, то контроллер будет продолжать передачу единичных битов «1».

При работе интерфейса в режиме multimaster одноименные выводы SPIMOSI, SPIMISO, SPICLK всех SPI-устройств соединяются вместе, а линии SPISEL присоединяются к каж­дому устройству по отдельности. При таком соединении в каждый момент времени только один SPI-контроллер может быть master-станцией, а все остальные - только устройствами slave. Если SPI-контроллер в текущий момент времени сконфигурирован как master-стан­ция, и приходит активный сигнал SPISEL = 0 от другого master-устройства, то регистриру­ется ошибка совместной работы multimaster-станций, устанавливается бит MIME в регист­ре событий и генерируется маскируемое прерывание центрального процессора. Работа SPI-устройств останавливается, и для повторного использования контроллеров пользова­тель должен сбросить бит включения EN в регистре SPIMODE.

Контроллер доступа к шине USB. Основные сведения о USB-контроллере в МРС823. USB-контроллер в МРС823 состоит из четырех основных блоков: приемника, передатчи­ка и двух автоматов для реализации протоколов обмена (protocol state machines). Оба автомата предназначены для управления работой блоков приемника и передатчика, один из них используется, когда контроллер работает в режиме function, а другой - когда кон­троллер работает в режиме host. Таким образом, USB-контроллер в МРС823 может ра­ботать или в режиме function, или в режиме host, или в обоих режимах сразу (это исполь­зуется при loop-back диагностировании аппаратуры).

Для тактирования USB-контроллера в МРС823 должна быть использована частота (USB reference clock), которая в четыре раза превышает тактовую частоту передаваемых данных, т. е. при работе с шиной 12 Мбит/с тактовая частота должна составлять 48 МГц, а при работе с шиной 1,5 Мбит/с - 6 МГц.

В режиме function контроллер автоматически выполняет обработку контрольной сум­мы CRC16/CRC5, NRZI-кодирование/декодирование данных с операцией вставки/удале­ния бит-стаффинга (bit stuffing). В подчиненном режиме контроллер может работать со скоростями 12 или 1,5 Мбит/с и обеспечивает автоматическую повторную передачу в слу­чае возникновения ошибок.

В режиме host контроллер автоматически выполняет обработку только контрольной суммы CRC16, NRZI-кодирование/декодирование данных с операцией вставки/удаления бит-стэффинга (bit stuffing). В режиме master контроллер может работать только со ско­ростью 12 Мбит/с и обеспечивает поддержку диагностического режима работы «внутрен­няя петля» (local loopback). Таким образом, при функционировании МРС823 в режиме host-контроллера существуют ряд нижеперечисленных ограничений.

• Не поддерживается обмен со скоростью 1,5 Мбит/с, так как передатчик не может выра­батывать биты преамбулы при низкоскоростном обмене.

• USB-контроллер в МРС823 не может выполнять функции корневого хаба (root hub).

• Некоторые функции удалены с аппаратного уровня и должны быть реализованы на программном уровне: генерация контрольной суммы CRC5 для кадров маркера (token);обнаружение ошибок и повторная передача кадра при ошибке; генерация и передача каждую 1 мс маркеров SOF tokens.

Обратите внимание, что в отличие от других коммуникационных каналов, в USB-контроллере изменена схема распределения буферов FIFO. USB-передатчик обслуживает -четыре независимых 16-байтных буфера FIFO, т. е. за каждой конечной точкой (endpoint) закреплен свой буфер передачи. А USB-приемник имеет один общий 16-байтный буфер - FIFO приема.

Настройка основных режимов работы USB-контроллера производится при програм­мировании регистра режима USMOD (рис. 5.62), который расположен в памяти по адресу (IMMR&0xFFFF000)+0xA00.

Бит EN разрешает работу USB-контроллера. Если бит EN = 1, то контроллер работа­ет в нормальном режиме, а если бит EN = 0, то контроллер находится в состоянии сброса. а его схемы - в режиме пониженного энергопотребления.

Бит LSS определяет скорость работы USB-контроллера. Если бит LSS = 0, то ско­рость передачи составляет 12 Мбит/с, а если LSS = 1, то 1,5 Мбит/с.

Бит HOST определяет режим работы USB-устройства. При значении бита HOST = 0 .устройство работает как функция, а при значении HOST = 1 - как хост (host).

При установленном бите RESUME = 1 устройство-функция будет передавать по шине специальные сигналы при выходе из состояния «сон» (suspend mode).

Установка бита TEST = 1 переводит контроллер в тестовый режим внутренней петли. 3 тестовом режиме включается режим низкоскоростной передачи 1,5 Мбит/с, и, если установлен бит HOST = 1, то конечная точка Endpoint 0 работает как хост, a Endpoint 1-Endpoint 3 - как функции.

Контроллер поддерживает работу с четырьмя конечными точками (endpoints), каждая из которых может работать в одном из четырех режимов передачи (control, interrupt, bulk, sochronous). Обратите внимание, что точка Endpoint 0 должна быть сконфигурирована для control-обмена. Выбор режима работы каждой из конечных точек настраивается при программирова-нии регистров конфигурации USEPx конечной точки (рис. 5.63), которые расположены в памяти по адресу (IMMR&0xFFFF000)+0xA04 - USEP0, [IMMR&0xFFFF000)+0xA06 - USEP1, (IMMR& 0xFFFF0OO)+0xA08 - USEP2, (IMMR&0xFFFF000)+0xA0A - USEP3. Все регистры конфигурации имеют одинаковый формат.

Номер конечной точки, с которой связан тот или иной регистр USEPx, определяется в поле EPN (Endpoint Number). Биты ТМ (Transfer Mode) определяют, какой режим обмена использует конечная точка (00 - Control, 01 - Interrupt, 10 - Bulk, 11 - Isochronous).

Для того чтобы увеличить скорость передачи, пользователь может изменить бит MF (MultiFrame). Если бит MF = 0, то в буфере FIFO передатчика всегда могут быть данные только одного кадра. Если же бит MF = 1, то в буфер FIFO передатчика во время передачи данных текущего кадра может начаться загрузка данных следующего кадра.

 



 


Если таймер ожидания ответа на переданный пакет истек, а ответ-подтверждение не поступил, то USB-контроллер, если установлен бит RTE = 1, произведет повторную передачу текущего кадра данных.

Обратите внимание, что при работе в изохронном (isochronous) режиме передачи биты MF и RTE должны быть равны нулю.

Если USB-контроллер работает в режиме slave, то биты THS и RHS определяют, ка­кой тип пакета-подтверждения будет выдаваться в ответ на прием маркера OUT или IN (табл. 5.38). Но следует обратить внимание, что посылка подтверждений NAK и STALL не разрешена для конечной точки Control.



 

 

Подключение USB-контроллера в МРС823. Поскольку коммуникационные контрол­леры «Motorola» не реализуют в полном объеме функции физического уровня управле­ния модели OSI, то для доступа к линиям D+ и D- USB-шины требуются дополнительные внешние трансиверы или драйверы линий. Для подключения к трансиверам используют­ся следующие шесть сигналов контроллера МРС823 (рис. 5.64): USBOE - сигнал разрешения работы трансивера (активный уровень - низкий), когда

USB- контроллер передает данные по шине; USBRXD - принимаемые данные; USBRXP, USBRXN - служат для опре­деления скорости обмена (USBRXP=1, USBRXN = 0 - скорость 12 Мбит/с, USBRXP = 0, USBRXN = 1-1,5 Мбит/с) и состояния асимметричного (singled ended) «0» (если USBRXP = USBRXN = 0);

USBTXP, USBTXN-определяют пере­даваемые данные (USBTXP = USBTXN = = 0 - передается singled ended «0», если USBTXP = 0 и USBTXN = 1, то передает­ся логический «0», а если USBTXP = 1 и USBTXN = 0, то - логическая «1».

 
 
 

 

 


Рис. 5.64. Схема подключения USB-контрол­лера в МРС623 к внешнему трансиверу

Некоторые трансиверы имеют дополнительные линии определения текущей скорости передачи или перехода в режим пониженного энергопотребления (sleep, suspend), в этом случае управление данными сигналами можно выполнять программно через контакты па­раллельного порта ввода/вывода

 

 


 

Процесс приема и передачи в сети USB. USB - полностью контролируемая хостом шина. В системе USB может быть только один хост. Любая транзакция в ней осуществля­ется передачей до трех пакетов. Хост в соответствии с определенной временной диаг­раммой посылает USB-устройству пакет-маркер (token), описывающий тип и направле­ние транзакции, адрес USB-устройства и номер конечной точки. Устройства USB прове­ряют, кому адресовано сообщение, декодируя соответствующие поля адреса. Направле­ние передачи данных определено в маркерном пакете.

Устройства USB только отвечают на запросы хоста и не могут передавать информацию друг другу. Фактически может быть только один случай, когда устройство может иницииро­вать передачу без активности хоста. После перевода хостом устройства в режим пониженно­го энергопотребления устройство может сигнализировать о своем пробуждении.

Затем источник транзакции посылает пакет данных (data packet) или сообщает, что данных для передачи нет. Получив пакет данных, адресат пакет квитирования (handshake packet), который сообщает, была ли передача успешной.

После системного сброса USB-контроллер имеет адрес 0x00 и хост должен опреде­лить новый адрес USB-устройства.

Для этого после разрешения работы USB-контроллер прослушивает шину и ожидает получение корректного кадра маркера (token). Некорректные маркеры игнорируются. Маркер считается некорректным, если его длина не равна 3 байтам, или в случае непра­вильной CRC (контрольной суммы), или если поле идентификаторов PID содержит не­корректные данные. Маркеры могут быть четырех типов:

1) Setup token - при получении этого маркера начинается процедура конфигурирова­
ния устройств или обмен информацией о статусе;

2)IN tokenm - при получении данного маркера начинается передача подготовленных
данных от USB-устройства к host-устройству;

3)OUT token - при получении этого маркера USB-устройство начинает прием данных;

4)SOF token.

Процесс реконфигурирования USB-устройства начинается при приеме маркера SETUP token, поступающего на конечную точку, которая определена как Control Endpoint. Мар­кер SETUP обычно содержит код команды, которую должно выполнить USB-устройство. Если тип SETUP-пакета требует приема последующих данных, то USB-контроллер вы­полняет прием данных так же, как и после приема маркера OUT. Если тип SETUP-пакета требует передачи некоторых данных хосту, то USB-контроллер выполняет передачу дан­ных так же, как и после приема маркера IN.

При получении SETUP-маркера контроллер анализирует тип команды, которая содер­жится в маркере. Если это команда Set Address, и контроллер работает в режиме Slave, то контроллер принимает следующий пакет, который содержит назначенный хостом новый адрес USB-устройства и переписывает значение адреса в поля SAD регистра USAOR (рис. 5.65), который располагается в памяти по адресу (IMMR & 0xFFFF0000) + 0xA0l

 


 

Рис. 5.65. Формат регистра адреса Slave USB-устройства

 

Подключение USB-устройств в сеть. Все устройства USB присоединяются к USB-шине через порт специализированного устройства - USB-концентратора. Концентрато­ры анализируют состояние порта и определяют, присоединено или удалено устройство. Если обнаружено новое подключенное устройство, то концентратор уведомляет об этом хост. Далее хост посылает запрос концентратору, чтобы определить причину уведомле­ния. Концентратор отвечает, указывая номер используемого порта, к которому присоеди­нено USB-устройство. Хост через порт создает канал связи с USB-устройством, исполь­зуя заданный по умолчанию адрес (Default Address = 0), который действовал при первом соединении или после сброса, и конечную точку с номером «0». Хост посылает запрос Get_Descriptor/Device на адрес «0» контрольной точки «0».

Устройство обязательно отвечает на запрос, посылая байты идентификатора обрат­но хосту, говорящие, какое устройство подключено.

Хост определяет, является ли недавно присоединенное устройство USB концентра­тором или функцией, и посылает устройству запрос Set_Address, передавая в этом паке­те новый назначенный уникальный адрес устройства, позволяющий отличить это устрой­ство от других подключенных к шине. Если присоединенное устройство - концентратор и есть USB-устройства, подключенные к его портам, то вышеупомянутая процедура сопро­вождается для каждого из присоединенных USB-устройств. Если присоединенное уст­ройство - функция, то уведомление о подключении будет послано в программное обес­печение хоста.

Затем хост посылает еще запросы, запрашивая остальную информацию об устрой­стве. Из этих ответов хост узнает, как много каналов устройство имеет, его требования по питанию, необходимую пропускную способность канала и какой драйвер следует загрузить.

Отключение USB-устройств. Когда USB-устройство отключается от порта, концент­ратор автоматически отключает порт и сообщает на хост об удалении устройства. Если удаленное USB-устройство-функция, уведомления об удалении посылаются программ­ному обеспечению хоста. Затем хост удаляет информацию относительно данного USB-устройства из всех своих структур данных. Если же удаленное USB-устройство - концен­тратор, процесс удаления должен быть выполнен для всех USB-устройств, которые были предварительно присоединены к концентратору.

Прием пакетов. После того как USB-контроллер получит маркер OUT token, он дол­жен начать прием данных. Контроллер проверяет в таблице дескрипторов, которые свя­заны с данной конечной точкой, следующий буферный дескриптор и, если он свободен, начинает прием в буфер данных, адрес которого указан в дескрипторе. После заполне­ния текущего буфера контроллер закрывает буфер, сбрасывает бит незанятости Е := 0 (Empty) в слове состояния его дескриптора и, если в слове состояния дескриптора уста­новлен бит прерывания I = 1 (Interrupt), формирует запрос на прерывание.

Если длина принимаемого кадра данных превышает размер буфера, выделенного в памяти, то контроллер продолжает запись принимаемых данных в буфер, адрес кото­рого указан в следующем дескрипторе, но только если у этого дескриптора установлен бит незанятости Е = 1. Если же следующий дескриптор окажется занятым, то будет заре­гистрирована ошибка. После завершения приема всех данных из пакета в слове состоя­ния буферного дескриптора последнего занятого буфера памяти устанавливается бит L = 1 (Last) и буфер закрывается.

Если принимаемый пакет содержит поле «идентификатор пакета» (DATAO/DATA1 packet ID (PID)), то в буфер будет записано только содержимое пакета, а содержимое поля PID будет занесено в соответствующие поля PID слова состояния дескриптора.

Протокол USB-шины предусматривает принцип «запрос-ответ» при реализации обме­на по сети. Если при приеме пакета обнаружена ошибка, то пакет с подтверждениями не посылается и в слове состояния буферного дескриптора последнего буфера сданными из пакета устанавливаются соответствующие биты ошибок. Если же пакет принят без ошибок и проверка CRC контрольной суммы завершилась успешно, то содержимое пакета сохра­няется в буфере памяти и в ответ на получение OUT-маркера может быть послано под­тверждение. Тип пакета подтверждения определяется в битах RHS в регистре конфигура­ции конечной точки USEPx.

Протокол предусматривает обработку ошибок на аппаратном и программном уровнях. Аппаратная обработка включает в себя анализ целостности сообщения и повторение не­удачных передач. Хост-контроллер повторит передачу ошибочного кадра данных три раза, а затем проинформирует клиентское программное обеспечение об ошибке.

Большинство ошибок, которые регистрирует USB-контроллер в МРС823 при своей работе, фиксируются установкой соответствующих битов ошибок в слове состояния бу­ферных дескрипторов. Ниже перечислены ошибки, регистрируемые при приеме.

• Переполнение буфера FIFO приемника (Overrun). Данная ошибка регистрируется, если USB-контроллер не успел переписать данные из общего для всех конечных точек (endpoints) буфера FIFO приемника в буферы памяти, а по шине уже получены новые данные, которые были записаны в FIFO-буфер поверх старых. При возникновении этой ошибки контроллер закрывает буфер, устанавливает бит ошибки OV := 1 в слове со­стояния дескриптора и устанавливает бит прерывания RXB в регистре событий USB-контроллера. Если новый пакет данных был принят без ошибок, то после завершения его приема USB-контроллер передает по шине отрицательное подтверждение NAK.

• Занятость (Busy). Данный тип ошибки регистрируется, если по шине принят корректный
кадр данных, но RISC-контроллер не обнаружил свободных буферов для приема данных.
При этом в регистре событий USB-контроллера устанавливается бит прерывания BSY.

• Нарушение формата кадра (Non Octet Aligned). Данный тип ошибки регистрируется,
если принят кадр, длина которого не кратна 8 битам. При возникновении этой ошибки
контроллер сохраняет принятый кадр данных в буферах памяти, закрывает буфер,
устанавливает бит ошибки NO := 1 в слове состояния дескриптора и устанавливает
бит прерывания RXB в регистре событий USB-контроллера.

• Ошибка проверки контрольной суммы (CRC Error). При обнаружении этой ошибки кон-троллер закрывает буфер приема, устанавливает бит ошибки CR := 1 в слове состоя­ния дескриптора и устанавливает бит прерывания RXB в регистре событий USB-кон­троллера.

• Ошибка проверки алгоритма вставки/удаления бит-стаффинга. Если обнаруживается
данная ошибка, то принятый кадр сохраняется в буфере памяти, заполняется его сло­-
во состояния и последним в нем устанавливается бит AB(Frame Aborted) := 1

Передача данных. При передаче данных пользователь должен предварительно заг­рузить данные в буфер FIFO выбранной конечной точки. Для этого пользователь должен подготовить данные для передачи в буферах памяти, заполнить слово состояния соот­ветствующего буферного дескриптора и установить бит STR := 1 в регистре команд USB-контроллера. Далее USB-контроллер перепишет данные в соответствующий FIFO-бу­фер конечной точки (endpoint) и будет ожидать появления маркера IN, при получении которого он начнет передачу данных в сеть

Если при получении IN-маркера данные в буфере FIFO не готовы или в регистре кон­фигурации выбранной Endpoint USEPx установлено значениебитов THS = 10, то в ответ на маркер IN посылается пакет с отрицательным подтверждением NAK. Значение битов THS определяет тип пакета подтверждения, который может быть передан в ответ на по­лучение маркера IN.

Когда все данные текущего буферного дескриптора переданы и в слове состояния уста­новлен бит последнего дескриптора пакета L = 1 (Last), то контроллер добавляет к пакету поле контрольной суммы и завершает передачу пакета.

В ответ на передачу пакета данных USB-контроллер ожидает от хоста получения паке­та подтверждения. Если в течение определенного времени подтверждение не получено, то в слове состояния последнего дескриптора переданного пакета устанавливается бит ТО := 1 (Time Out).

Обратите внимание, что пользователь должен самостоятельно заполнять поля DATAO/ DATA1 PID в передаваемом пакете.

Основные ошибки, регистрируемые при передаче, перечислены ниже.


 

• Незаполнение буфера FIFO передатчика (underrun). При возникновении этой ошибки
контроллер специально нарушает процедуру вставки бит-стаффинга, прекращает пе­-
редачу из буфера, закрывает буфер, устанавливает бит ошибки UN := 1 в слове состо­-
яния дескриптора и устанавливает бит прерывания ТХЕ в регистре событий USB-кон-
троллера.

• Истек тайм-аут ожидания ответа (Timeout). Если установлен бит RTE = 1 в регистре
конфигурации, то при возникновении этой ошибки USB-контроллер делает попытку по­
вторной передачи пакета, на который не пришло подтверждение. Если же бит RTE = 0
или вторая попытка повторной передачи тоже завершилась неудачей, то контроллер
закрывает буфер передачи, устанавливает бит ошибки ТО := 1 в слове состояния деск­-
риптора и устанавливает бит прерывания ТХЕ в регистре событий USB-контроллера.

•Данные для передачи не готовы (TxData not Ready). Данная ошибка возникает, когда
контроллер получил IN-маркер, а буфер FIFO передачи соответствующей конечной
точки пуст, или если конечная точка запрограммирована на посылку подтверждений
NAK или STALL. При обработке данной ошибки контроллер устанавливает бит преры­-
вания ТХЕ в регистре событий USB-контроллера.


Прием служебных маркеров. При приеме маркера SOF (Start of Frame) USB-кон-троллер регистрирует маскируемое прерывание SOF и увеличивает значение в ячейке FRAME_N в памяти параметров (рис. 5.66), подсчитывая количество принятых маркеров SOF. Если SOF-маркер был принят без ошибок, то в ячейке FRAME_N будет установлен бит V := 1.

Прием маркера PRE USB-контроллер выполняет (т. е. не игнорирует этот пакет) толь­ко при работе в режиме host (но генерировать PRE-маркеры в режиме host контроллер не может). Появление этого маркера сообщает о начале низкоскоростной передачи данных.

Настройка USB-контроллера в МРС823.Память параметров USB-контроллера. Память параметров USB-контроллера состоит из двух частей: память основных пара­метров USB-контроллера (табл. 5.39) и память параметров каждой из конечных точек (табл. 5.40). Память основных параметров обычно располагается в области протокол-независимых параметров 8СС2-контроллера по адресу, который вычисляется как USBBase = (IMMR & 0xFFFF0000)+0x3C.


 

В ячейках EPxPTR (рис. 5.67) указываются адреса начала памяти каждой из исполь-з.емых конечных точек (требуется, чтобы адреса были кратны 32).

В USB-контроллере назначение переменных в ячейках памяти параметров отдель­ной контрольной точки (табл. 5.40) полностью совпадает с назначением одноименных -временных в SCC- и SMC-контроллерах.

Таблица 5.40


 

 

Дополнительно в ячейке TBCNT содержится внутренний вычитающий счетчик, в кото­рый при переходе к новому дескриптору передачи заносится длина буфера из соответ­ствующего поля дескриптора и значение которого уменьшается на единицу при передаче очередного байта через SDMA-канал.

Однотипная же ячейка RBCNT имеется только в памяти параметров всего USB-koh-троллера и отсутствует среди параметров отдельных конечных точек, так как все конеч­ные точки выполняют прием через общий FIFO буфер приема, и содержит внутренний вычитающий счетчик, в который при переходе к новому дескриптору приема заносится содержимое ячейки MRBLR и значение которого уменьшается на единицу при передаче очередного байта через SDMA-канал.

 

Управление USB-контроллером. Пользователь может управлять работой USB-koh-троллера, программируя его регистр команд CPCR (рис. 5.68), который расположен в ячейке памяти по адресу (IMMR & 0xFFFF0000)+0x9C0. Код команды управления запи­сывается в биты USBCMD регистра команд (табл. 5.41). Указанная команда будет приме­нена к конечной точке, номер которой указан в битах ENDPOINT (00-Endpoint0, 01— Endpointi, 10-Endpoint2, 11-Endpoint3). Для того чтобы USB-контроллер начал выпол­нять команду, необходимо установить бит FLG = 1. После выполнения команды контрол­лер автоматически сбросит этот бит.


 

 

Бит RST = 1 следует устанавливать, если требуется сбросить параметры всех ком­муникационных каналов, регистры RISC-контроллера и RISC-таймера коммуникацион­ного контроллера в исходное состояние. Процедура сброса выполняется RISC-контрол­лером в течение 60 тактов шины. Через два такта шины бит RST будет автоматически сброшен в «0».

 

 

 

При работе пользователь также имеет возможность управлять работой USB-контроллера, программируя регистр USB-команд (рис. 5.69), который расположен в ячейке па­мяти по адресу (IMMR & 0xFFFF0000)+0xA02. Если установить бит STR := 1, то контрол­лер начнет подготовку данных к передаче и заполнение данными буфера FIFO передат­чика конечной точки, номер которой указывается в битах ЕР. Реально передача этих дан­ных в сеть начнется только после приема маркера IN.

При передаче данных пользователь может также, если необходимо, заменить содер­жимое буфера FIFO передатчика. Для этого следует передать контроллеру команду STOP ТХ ENDPOINT и установить бит FLUSH := 1. Для возобновления передачи надо исполь­зовать команду RESTART TX ENDPOINT.

Буферные дескрипторы USB-контроллера. USB-контроллер использует такую же структуру буферных дескрипторов, что и большинство коммуникационных каналов, со­стоящую из четырех ячеек по 16 бит (первая ячейка - слово состояния дескриптора (рис. 5.70, 5.71), вторая -длина буфера данных в памяти, адрес которого указан в 3-й и 4-й ячейках дескриптора).

Большинство битов слов состояния имеют такое же функциональное назначение, что и

для других коммуникационных каналов.


 

Бит Е (Empty) - бит незанятого буфера («0» - буфер занят, «1» - не занят). Бит R (Ready) - бит готовности буфера к передаче («0» — не готов, «1» - готов или уже переда­ется). Бит W (Wrap) - бит последнего дескриптора в таблице дескрипторов («0» - не последний дескриптор, «1» - последний). Бит I (Interrupt)- бит прерывания при заверше­нии обработки данного буфера («0» - прерывание не регистрируется, «1» - регистриру­ется в регистре событий в бите RXB при приеме и ТХВ или ТХЕ при передаче). Биты F (First) и L (Last) первого и последнего буфера, в которых расположен первый (последний) бит текущего кадра данных («0» - это не первый и не последний буфер, «1» - это первый (последний) буфер кадра).

Если установлен бит ТС = 1 (Transmit CRC), то после завершения передачи содержи­мого последнего буфера кадра (установлен бит L = 1) сразу же будет передана конт­рольная сумма кадра. Если бит ТС = 0, то будет передан признак ЕОР (End of Packet).

После завершения передачи содержимого последнего буфера кадра (бит L = 1), если установлен бит CNF = 1, то контроллер будет ожидать получение подтверждения о дос­тавке пакета. Если же бит CNF = 0, то, не ожидая ответа, будет загружать в буфер FIFO передатчика данные следующего пакета.

 

 

В бите NO (Non Octet) регистрируется ошибка приема кадра, длина которого не крат­на байту. В бите АВ (Frame Aborted) регистрируется ошибка нарушения алгоритма рабо­ты с бит-стаффингом. Ошибка при проверке контрольной суммы регистрируется в бите CR (CRC Error). Ошибка переполнения буфера FIFO приемника регистрируется в бите OV (Overrun), а переполнение буфера FIFO передатчика - в бите UN (Underrun).

В биты PID (Packed ID) при приеме контроллер заносит тип принятого пакета. Биты PID заполняются только для первого дескриптора принимаемого кадра данных (бит F = 1). При передаче данных эти биты анализируются только для первого буфера (бит F = 1) переда­ваемого кадра и определяют тип передаваемого пакета. Если PID = 00, то буфер содержит пакет DATA0. Если же бит PID = 01, то буфер содержит пакет DATA1.

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

Если после передачи конечная точка не дождалась подтверждения, то будет установ­лен бит ТО := 1 (Time Out).

Регистр событий. Регистр событий USBER (рис. 5.72) расположен в ячейке памяти по адресу (IMMR&0xFFFF0000)+0xA10. Сброс битов событий в регистре событий произ­водится записью единицы в соответствующий бит. Прерывание от любого события в USB-контроллере будет зарегистрировано, только если установлен в «1» бит регистра маски USBMR, соответствующий этому событию. Регистр маски расположен в ячейке памяти по адресу (IMMR&0xFFFFOO00)+0xA14 и имеет формат, аналогичный регистру событий.

 


Если USB-контроллер находится в состоянии «сброс», то будет установлен в «1» бит RESET регистра событий.

Бит IDLE регистра событий показывает, что изменилось состояние линий связи.

Биты ТХЕх регистра событий устанавливаются в «1», если произошла ошибка при передаче пакета данных: или не пришло подтверждение о получении пакета, или про­изошла ошибка незаполнения Underrun.

При приеме пакета SOF (Start of Frame) устанавливается бит SOF := 1 регистра собы­тий и увеличивается на единицу счетчик в ячейке FRAME_N памяти параметров.

Если USB-контроллер начал прием нового кадра данных, значит RISC-контроллер не нашел свободных буферных дескрипторов, а принимаемый кадр будет игнорирован и будет установлен бит BSY регистра событий.

Установка бита ТХВ регистра событий свидетельствует о том, что из текущего (но не последнего в кадре) буфера был передан в буфер FIFO передатчика последний символ, или если это последний буфер кадра, то бит будет установлен, только когда последний символ кадра будет передан в линию связи.

Установка бита RXB регистра событий свидетельствует о том, что при приеме данных текущий буфер заполнен и его дескриптор закрыт.

 

 



>15
  • 16
  • Далее ⇒