Особенности реализации протокола USB
в контроллерах LPC214x производства Philips
Александр БАШЛЫКОВ
alexander.bashlykov@philips.com
Микроконтроллеры серии 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 высокоскоростных портов ввода-вывода общего назначения с девятью выводами внешних прерываний по уровню либо по фронту делают эти микроконтроллеры идеальным инструментом для решения
задач в области промышленного контроля и медицинских приложений.
Основные параметры USB-протокола
USB (Universal Serial Bus) — это 4-провод-ная шина, реализующая связь между управляющим устройством (хостом) и периферией (до 127 устройств). Хост выделяет канал
16-32 КВ SRAM
64-512 КВ FLASH
SRAM
Controller
JTAG
RT-Trace
Flash Controller /МАМ
ARM Local Bus
4- ^
x|x
“ > >
▼ ▼ T
System BrownOutDetect
Functions PowerOn Reset
USB-*- PLL
PLL,
_ System Clock
VIC
АН В
32 kHz
Vbat
Real Time Clock Watchdog Timer
і і
і 4 і і г } і Л k r
AHB to VPB Bridge
VPB
I
8KB SRAM I USB 2.0 Full Shared w/DMA I Speed Device w/ (LPC2146/8) I DMA
f
МП
o-
Jp_LED or Connect Vbus
2xl2C
SPI
SSP
ái
1 f
UART1
UARTO
GPIO
Fast
TimerO
Timerl
'5''
PWM
10-bit
DAC
10-bit
ADCO
10-bit
ADC1
Рис. 1. Структура микроконтроллера LPC2148
DMA-интерфейс (АНВ master)
\/
Register-интерфейс {АНВ slave)
Bus
Master
интерфейс
М—►
J4
Register
интерфейс
О
USB Device Block
DMA механизм
к 1 Г
EP_RAM контроль доступа
i i
1 '
EP RAM (2К)
О
сериа-
лизатор
ш
со
з
Рис. 2. Блок-схема модуля USB
для оконечных устройств на базе маркерного (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). Размер буфера (в словах) для физической конечной точки может быть выражен как:
EP_RAMsize =
= ((MaxPacketSize + 3)/4 + 1) х db_status,
где db_status = 1 для однократно буферизованных конечных точек и db_status = 2 для точек с двойной буферизацией. Сумма выделенной памяти для всех конечных точек не должна превышать 2048 байт (0,5 килослова). Доступ к буферу конечной точки может быть осуществлен тремя путями: через сериализатор, DMA или процессор. Процессор имеет наивысший приоритет доступа, сериализатор — средний, а DMA — низший. Запрос на запись имеет более высокий приоритет, чем запрос на чтение.
Для неизохронных конечных точек при получении пакета без ошибок генерируется прерывание, показывающее, что буфер 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 поддерживает режим автоматического
извлечения длины пакета (АТЬЕ) для обмена в режиме Ьи1к. В этом режиме механизм DMA восстанавливает оригинальную длину передаваемого блока из входящего потока. Различные варианты драйверов, установленных на хост-устройстве (например NDIS), способны соединять небольшие пакеты для формирования единого пакета большего размера. В режиме АТЬЕ ШВ устройство разбивает единый пакет на меньшие и помещает их по соответствующим адресам буферной памяти DMA.
Заключение
Протокол ШВ сегодня является общепринятым мировым стандартом передачи данных. К настоящему моменту на рынке продано более 1,2 млрд устройств, поддерживающих этот протокол.
Благодаря встроенному в МК механизму DMA пользователь получает значительные выгоды при использовании протокола USB в своих разработках:
• Резко уменьшается нагрузка на процессор в процессе передачи данных из буфера конечной точки в память. Отсутствует необходимость работы с регистрами USB-устройства, связь с которыми производится через медленную шину периферийных устройств (APB).
• Возможность соединять небольшие паке-
ты в один позволяет увеличить пропускную способность шины и передавать за единицу времени больший объем информации. ■
Литература
1. UM10139 LPC214x User Manual. Koninklijke Philips Electronics N.V. 2005.