Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2005 №7

Особенности реализации протокола USB в микроконтроллерах LPC214x производства Philips

Башлыков Александр


Микроконтроллеры серии LPC214x основаны на 32/16-разрядной архитектуре ARM7TDMI-S с внутрисхемной эмуляцией (In-Circuit Emulation) и поддержкой встроенной трассировки (Embedded Trace Macrocell) и имеют встроенную высокоскоростную Flash-память объемом от 32 до 512 кбайт. 128-битный интерфейс и уникальная архитектура ускоренного доступа (MAM) делает возможным исполнение 32-разрядного кода на максимальной тактовой частоте. Для приложений, в которых важно минимизировать размер кода, существует специальный 16-битный режим Thumb, используя который, можно добиться снижения объема кода до 30% с небольшими потерями в быстродействии.

Благодаря небольшим размерам и малому потреблению микроконтроллеры серии LPC214x подходят для решения задач, в которых размер устройства является решающим фактором. Широкий набор последовательных интерфейсов (рис. 1): USB 2.0 Full Speed device, до 2-х UART, SPI, SSP, I2C, а также SRAM объемом до 40 кбайт дают возможность разработчикам использовать эти микроконтроллеры в телекоммуникационных устройствах, преобразователях протокола, модемах, устройствах распознавания голоса. Один или два 10-битных АЦП последовательного приближения, 32-битные таймеры, 10-битный ЦАП, ШИМ каналы и 45 высокоскоростных портов ввода-вывода общего назначения с девятью выводами внешних прерываний по уровню либо по фронту делают эти микроконтроллеры идеальным инструментом для решения задач в области промышленного контроля и медицинских приложений.

Структура микроконтроллера LPC2148
Рис. 1. Структура микроконтроллера LPC2148

Основные параметры USB-протокола

USB (Universal Serial Bus) — это 4-проводная шина, реализующая связь между управляющим устройством (хостом) и периферией (до 127 устройств). Хост выделяет канал для оконечных устройств на базе маркерного (token) протокола. Шина USB поддерживает горячее подключение, отключение и динамическую конфигурацию устройств. Все операции ввода-вывода инициируются хостом.

Хост распределяет транзакции по кадрам (фреймам) продолжительностью в 1 мс. Каждый фрейм содержит маркер SoF (начало фрейма) и транзакции, передающие информацию к хосту или к конечному устройству. USB интерфейс микроконтроллера поддерживает 16 логических (двунаправленных) или 32 физических конечных точек.

Существует 4 типа передачи, зарезервированные для каждой конечной точки. Тип control используется для конфигурации устройства и передачи служебной информации. Этот режим используется во всех устройствах USB. Тип interrupt выделен для периодической низкоскоростной передачи. Используется обычно для реализации интерфейса пользователя: клавиатуры, мыши и т. д. Он также является основным типом для Hub устройств. Тип bulk используется, когда не нужна скорость передачи. Стандартное применение: фотокамеры, Flash-карты, принтеры и другие устройства, где необходимо передавать большие объемы информации. Тип isochronous дает гарантированное время доставки информации, но не использует коррекцию ошибок. Он применяется для передачи синхронизированной по времени информации, в основном аудио- или видеопотоков, как сжатых, так и реального времени.

Контроллер устройства USB в МК реализует спецификацию full speed (12 Мбит/с) для обмена информацией с хост-контроллером. Он состоит из интерфейса регистров, механизма последовательного интерфейса, буферной памяти для конечных точек и контроллера прямого доступа к памяти (DMA). Механизм последовательного интерфейса (SIE) декодирует поток данных по шине и помещает декодированные данные в соответствующий буфер конечной точки. Статус успешного завершения обмена либо ошибки отражается специальным регистром статуса. Также есть возможность генерации прерывания. DMA-контроллер осуществляет обмен данными между буфером конечной точки и памятью USB. В контроллерах LPC2146/8 введена дополнительная память SRAM объемом 8 кбайт, доступ к которой может осуществляться как из обычной оперативной памяти, размещенной на кристалле, так и из контроллера USB по DMA-интерфейсу в режиме bus master. Кроме того, в МК выделен отдельный блок ФАПЧ (PLL), предназначенный исключительно для нужд USB.

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

Serial Interface Engine (сериализатор) принимает последовательный поток данных от аналогового трансивера (ATX) и переводит его в параллельный. Данные в параллельном формате подаются на интерфейс RAM (EP_RAM контроль доступа), который, в свою очередь, пересылает их в буфер конечной точки, организованный в виде FIFO. Каждая используемая конечная точка имеет определенный зарезервированный объем памяти, так что общие затраты RAM на буфер зависят от количества активных конечных точек, максимального размера пакета точки (MaxPacketSize) и наличия для нее двойной буферизации. Данные записываются в буфер (EP_RAM), в начале которого записано количество используемых байтов (рис. 2). Размер буфера (в словах) для физической конечной точки может быть выражен как:

где db_status = 1 для однократно буферизованных конечных точек и db_status = 2 для точек с двойной буферизацией. Сумма выделенной памяти для всех конечных точек не должна превышать 2048 байт (0,5 килослова). Доступ к буферу конечной точки может быть осуществлен тремя путями: через сериализатор, DMA или процессор. Процессор имеет наивысший приоритет доступа, сериализатор — средний, а DMA — низший. Запрос на запись имеет более высокий приоритет, чем запрос на чтение.

Блок-схема модуля USB
Рис. 2. Блок-схема модуля USB

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

Для изохронных конечных точек за каждый фрейм USB передается один пакет данных. Так что синхронизация должна осуществляться скорее по частоте передачи фрейма USB, нежели по приему очередного пакета. Таким образом, каждую микросекунду контроллером будет генерироваться прерывание. Переданные данные представлены в формате «little endian».

Передача информации от устройства к хосту

Для обмена конечной точки с хостом последний посылает маркер IN для конечной точки. Если буфер FIFO, закрепленный за этой точкой, пуст, устройство возвращает маркер NAK и генерирует прерывание. При обработке этого прерывания контроллер заполняет буфер. При заполненном буфере на первый полученный от хоста маркер IN в шину отправляется содержимое буфера. Данные и в этом случае представлены в формате «little endian».

Обмен в режиме Slave

В режиме Slave обмен осуществляется через прерывания, генерируемые контроллером устройства USB. Прием пакета данных без ошибок в буфер любой неизохронной входной конечной точки сопровождается генерацией прерывания. Приняв прерывание, программа пользователя может считать информацию, используя количество байт, задействованных в FIFO и регистрах данных. Если буфер конечной точки не очищен, в момент приема следующего пакета может быть сгенерировано прерывание (при условии, что предыдущее прерывание обработано) и в шину отсылается маркер NAK. Для входных конечных точек изохронного типа данные пишутся в буфер независимо от его статуса. Для этого типа генерируются лишь регулярные прерывания очередного фрейма (каждые 1 мс).

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

Передача в режиме DMA (только для LPC2146/8)

В режиме DMA контроллер USB будет вести себя как Master на AHB-шине контроллера и передавать данные напрямую из буфера или в буфер конечной точки. В начале процесса обмена нулевая конечная точка (типа control по умолчанию) получает установочный пакет. До тех пор, пока контроллер не декодирует этот пакет и не ответит хосту, передача данных в выделенный для USB фрагмент RAM не может быть осуществлена, и эта передача осуществляется в режиме Slave. Для изохронных конечных точек передача пакета выполняется каждый временной фрейм, в связи с этим передача в режиме DMA должна быть синхронизирована по прерываниям очередного фрейма. Механизм DMA поддерживает режим автоматического извлечения длины пакета (ATLE) для обмена в режиме bulk. В этом режиме механизм DMA восстанавливает оригинальную длину передаваемого блока из входящего потока. Различные варианты драйверов, установленных на хост-устройстве (например NDIS), способны соединять небольшие пакеты для формирования единого пакета большего размера. В режиме ATLE USB устройство разбивает единый пакет на меньшие и помещает их по соответствующим адресам буферной памяти DMA.

Заключение

Протокол USB сегодня является общепринятым мировым стандартом передачи данных. К настоящему моменту на рынке продано более 1,2 млрд устройств, поддерживающих этот протокол.

Благодаря встроенному в МК механизму DMA пользователь получает значительные выгоды при использовании протокола USB в своих разработках:

  • Резко уменьшается нагрузка на процессор в процессе передачи данных из буфера конечной точки в память. Отсутствует необходимость работы с регистрами USB-устройства, связь с которыми производится через медленную шину периферийных устройств (APB).
  • Возможность соединять небольшие пакеты в один позволяет увеличить пропускную способность шины и передавать за единицу времени больший объем информации.

Литература

  1. UM10139 LPC214x User Manual. Koninklijke Philips Electronics N.V. 2005.

Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

 


Другие статьи по данной теме:

Сообщить об ошибке