В статье описан переходник USB RS232, собранный на чипе TUSB3410.
TUSB3410 – микроконтроллер с интегрированным интерфейсным модулем USB.
Функциональная оснащенность примерно та же: полный последовательный порт (выводы 13-21, только RX/TX называются SIN/SOUT), интерфейс для EEPROM (здесь это I2C), кварц, питание, Reset и четыре программируемые линии ввода/вывода общего назначения Р3.0 – Р3.4 – вот их-то у FTDI-ки точно не было… Напряжение питания микросхемы – 3.3В, что не очень удобно, поскольку при питании от USB заставляет использовать LDO-стабилизатор. Зато никаких хитрых режимов питания нет.
Ну что, как всегда, кратенько пробежимся по функциональному назначению выводов? Поехали…
С последовательным портом все вроде бы понятно, скажу лишь, что при соответствующей прошивке он может работать не только по протоколу RS-232, но и как IrDA приемопередатчик. Четыре линии ввода/вывода тоже не экзотика, производитель, в частности, предоставляет пример, где они используются для подключения нескольких кнопок, а устройство определяется ОС как HID-совместимое, что позволяет достаточно легко реализовать опрос этих самых кнопок.
DP, DM – линии Data+ и Data- USB, PUR служит для подключения подтягивающего резистора для линии Data+.
На линию VDD18 надо подать напряжение 1.8В от внешнего источника или, что проще, подать лог.0 на вывод VREGEN, включив тем самым внутренний источник на 1.8В, а на VDD18 добавить конденсатор 0.1мкФ на землю…
На RESET – обычную RC-цепочку, более чем достаточно, TEST0 и TEST1 надо подтянуть через 10кОм к питанию, а выход тактовой частоты CLKOUT мы использовать не будем.
Кварц 12МГц на ноги Х1 и Х2, выход индикатора SUSPEND – по вкусу, вход пробуждения WAKEUP можно оставить неподключенным или подтянуть через резистор к плюсу питания.
К линиям последовательного порта этой микросхемы также можно подключать непосредственно МК, опторазвязки или преобразователи уровней.
Вроде как все необходимое для минимальной конфигурации подключили, схема получилось вот такая:
Микросхема EEPROM здесь также не является обязательным элементом и лично я ее так ни разу и не использовал…
Итак, собрали мы эту схему, воткнули в комп, ОС нашла некое устройство и попросила ткнуть ее носом в драйвера для него. Вот тут-то самое интересное и начинается.
Как я уже говорил, TUSB3410 на самом деле микроконтроллер, внутри у него 8052-совместимое ядро. Соответственно, функционал нашего устройства определяется залитой прошивкой. Нам требуется пока что – преобразователь интерфейсов.
В принципе, при условии регистрации и предоставлении информации о вашем проекте производитель предоставляет и исходники, и прошивку для применения микросхемы в качестве преобразователя интерфейсов, но можно пойти и по другому пути. Эта микросхема используется в таком качестве в некоторых интерфейсных шнурках для мобильных телефонов, в GSM-модемах, в некоторых других устройствах. А драйвера для них доступны для свободной закачки. Более того, все эти драйвера содержат необходимую прошивку. Это связано с особенностями работы микросхемы.
Дело в том, что при установке драйвера прошивка для микроконтроллера копируется в /System32/drivers. Далее, при включении устройства TUSB проверяет наличие EEPROM и прошивки в ней. Если все в порядке – грузится с нее, если нет – подгружает прошивку с компа и записывает в EEPROM, если она есть. Или не записывает и просто работает. Если EEPROMа нет, при следующем включении процесс повторяется.
В общем, в результате анализа нескольких комплектов драйверов к готовым устройствам методом проб и ошибок, последовательных приближений и высоконаучного тыка был сгенерирован собственный работоспособный комплект. Во всех файлах драйверов и даже внутри прошивок стоят копирайты Texas Instruments, поэтому скажу, что все предпринятые над драйверами действия цели имели исключительно образовательные и некоммерческие, а здесь результат публикуется сугубо для ознакомления.
После подключения к ПК ОС найдет новое устройство «TUSB3410 Device» и потребует установку драйвера, надо указать на файл umpusbXP.inf. В ходе установки в системную директорию будут скопированы файлы umpusbxp.sys и umpf3410.i51 (прошивка). Далее система найдет виртуальный СОМ-порт, для него потребуется драйвер UmpComXP.inf.
В обоих *.inf-файлах помечены строки, изменив которые можно отредактировать названия определяемых системой устройств и установленные по умолчанию VID&PID, передаваемые ОС. Однако, как и в прошлый раз, я бы не стал этого делать без полного понимания того, к чему это может привести.
Для чего TUSB3410 нужна EEPROM я уже упоминал. Добавлю, что лично я с ней не экспериментировал, однако на сайте производителя доступны для скачивания утилита для генерации бинарного файла прошивки EEPROM на основе umpf3410.i51 и конфигурационного файла (содержит серийный номер устройства, VID&PID, строковые данный по аналогии с FT232BM) и утилита для непосредственной прошивки полученного файла в микросхему.
На странице, посвященной этой микросхеме при желании можно найти подробный даташит, ряд аппноутов, документы, описывающие особенности применения, ссылки на исходные коды и утилиты для работы. Настоятельно рекомендую посмотреть.
Результатом всех этих изысканий стало создание двух модулей преобразования протокола USB в RS-232, на FT232BM и TUSB3410 соответственно, которые можно рассмотреть на фотографии:
Монтаж, как видно, поверхностный, все детали на одной стороне, с изнанки – пара перемычек. Модули рассчитаны на вертикальное впаивание в плату, поэтому на них нет разъемов, а установлены PLS штырьки, которые, собственно, в плату и впаиваются. На дальней от нас стороне платы сделаны контактные площадки RX/TX (на модуле FT232BM их загораживает конденсатор), остальные сигналы последовательного интерфейса не выведены за ненадобностью: эти модули используются для сопряжения исключительно с МК.
Сигналы RS-232 имеют TTL-уровень и выведены на двухрядный разъем BH-10 (по аналогии с материнскими платами), причем коммутацией входа VCCIO (вывод 13) на 5В или сторонний источник 3.3В (в данном случае применен LDO-стабилизатор, но можно, например, и параметрический использовать или регулируемый на LM317) при помощи джампера можно выбирать соответствующий уровень логической «1» на выводах порта RS-232. Эта конструкция разарабатывалась для отладки устройств, имеющих напряжение питания 3.3В
_________________ Оптимизм х (Опыт + Знания) = const
Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре.
Я тоже думаю что может быть в этот переходник заложены какие-то функции, которые преобразуют коды. Но зачем это делать производителю? это же только лишние проблемы и расходы. Но даже если это так (в чем я очень сомневаюсь), то можно перепрошить переходник под нормальный.
Может все-таки есть еще другие мысли чего такая фигня с этим переходником?
Приглашаем всех желающих посетить вебинар, посвященный технологии Ethernet и её новому стандарту 10BASE-T1S/L. Стандарт 802.3cg описывает передачу данных на скорости до 10 Мбит в секунду по одной витой паре. На вебинаре будут рассмотрены и другие новшества, которые недавно вошли в семейство технологий Ethernet: Synchronous Ethernet (SyncE), Precision Time Protocol (PTP), Time Sensitive Networking (TSN). Не останется в стороне и высокоскоростной 25G+ Ethernet от Microchip.
А питается МАХ232 откуда? От отдельного источника или питание с 4 и 7 пина выцеживаеться?
Попробуйте от отдельного БП или от USB макс запитать.
Попробуйте в переходнике USB-COM замкнуть 2 и 3 пины и терминалкой послать что-нибудь в порт. Если в ответ придет не то, что послали, то переходник «дохлый»
Страница 1 из 1
[ Сообщений: 9 ]
Часовой пояс: UTC + 3 часа
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
В случае, когда вы не хотите тратить время на поиск нужного драйвера для вашего ПК, к вашим услугам представлен автоматический установщик, который самостоятельно подберет нужные и самые актуальные драйвера для всех устройств вашей системы. Скачать Outbyte Drivers Installer вы можете перейдя по этой ссылке Установить драйвера автоматически
Устройство:
TUSB3410 Boot Device Drivers Installer
Версия драйвера:
2.0.0.18
Дата драйвера:
2021-11-26
Размер файла:
1.12 Mb
Поддерживаемые ОС:
Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8
Установить драйвера автоматически
Список драйверов:
Найдено драйверов для устройства «TUSB3410 Boot Device»: 1. Для загрузки необходимого драйвера, выберите его из списка ниже и перейдите по ссылке «Скачать». Пожалуйста, убедитесь в соответствии выбранной версии драйвера вашей операционной системе для обеспечения корректности его работы.
Поддерживаемые модели ноутбуков
Мы собрали список популярных моделей ноутбуков на которых устанавливается оборудование «TUSB3410 Boot Device». Выбрав интересующую вас модель ноутбука вы можете посмотреть полный список совместимых устройств.
Этот даташит описывает контроллеры TUSB3410, TUSB3410I компании Texas Instruments (перевод оригинального даташита [1]). Все незнакомые термины и аббревиатуры смотрите в словарике, в конце статьи.
[1. Введение]
1.1. Общее описание контроллера TUSB3410
Микросхема TUSB3410 может быть использована как интерфейс между с каким-нибудь устройством, имеющим традиционный последовательный порт, и компьютером PC с портами USB. После того, как TUSB3410 сконфигурирована, поток данных от хоста до TUSB3410 через команды USB OUT выходит затем через сигнальную линию SOUT чипа TUSB3410. В обратном направлении поток данных входит в TUSB3410 через линию SIN, и затем поступает в хост через команды USB IN.
Рис. 1-1. Как проходят потоки данных в чипе TUSB3410.
Пояснения к рис. 1-1:
Host хост, компьютер или устройство On-The-Go, которое может работать и как хост, и как устройство USB. In, Out направления передачи данных по шине USB. С этими направлениями связаны одноименные конечные точки и названия транзакций и пакетов. SOUT, SIN сигналы TTL последовательного порта, работающего по стандарту RS-232. Legacy Serial Peripheral стандартное периферийное устройство, имеющее аппаратный последовательный порт RS-232. Это может быть, к примеру, какой-нибудь внешний микроконтроллер.
Рис. 1-2. Блочная диаграмма TUSB3410.
Пояснения к рис. 1-2:
Clock Oscillator тактовый генератор, работающий от внешнего кварцевого резонатора 12 МГц. PLL and Dividers узел ФАПЧ и делителя, который вырабатывает внутреннюю тактовую частоту 24 МГц. DP, DM физические сигналы данных шины USB D+ и D-. USB TxR узел трансивера физических сигналов шины USB. USB Serial Interface Engine аппаратный преобразователь последовательных сигналов шины USB в параллельный код. 10K x 8 ROM память ROM (ПЗУ) 10 килобайт, в которой записан код загрузки (bootcode, бутлоадер). 16K x 8 RAM память RAM (ОЗУ) 16 килобайт, которая предназначена для загрузки в неё программы приложения firmware (код программы для MCU 8052). 2K x 8 SRAM память ОЗУ 2 килобайта, которая расположена в области XDATA архитектуры 8052 и предназначена для хранения данных firmware. CPU-I/F Suspend/Resume узел управления приостановкой и возобновлением работы CPU. UBM USB Buffer Manager менеджер буферов USB. TDM Control Logic логика управления потоками данных DMA. 2 x 16-Bit Timers два таймера, стандартных для архитектуры 8052. Port 3 порт ввода/вывода P3 (GPIO), также стандартный для архитектуры 8052. P3.0, P3.1, P3.3, P3.4 выводы порта P3. I 2 C Controller аппаратный контроллер шины I2C. DMA-1, DMA-3 каналы прямого доступа к памяти. UART-1 последовательный порт. SIN, SOUT сигналы данных последовательного порта.
DSR стандартные сигналы интерфейса RS-232. Тильда в начале имени означает логическую инверсию. IR Encoder кодер для получения сигналов последовательного канала инфракрасной передачи. IR Decoder декодер для преобразования сигнала инфракрасного канала в последовательный код. SOUT/IR_SOUT выходной сигнал последовательного порта. SIN/IR_SIN входной сигнал последовательного порта.
[2. Основные особенности контроллера TUSB3410]
2.1. USB
• Полностью совместим со стандартом USB 2.0: TID #40340262. • Поддерживает скорость передачи данных USB до 12 мегабит/сек (full speed). • Поддерживает приостановку работы USB (USB suspend), возобновление работы (USB resume), и функцию удаленного пробуждения (remote wakeup). • Поддерживает два режима питания: — питание от шины USB (Bus-powered mode) — питание от собственного отдельного источника питания (Self-powered mode) • Может поддерживать до трех входных (IN endpoint) и до трех выходных (OUT endpoint) конечных точек (работающих в режимах interrupt, bulk).
2.2. Основные возможности
• Контроллер основан на встроенном ядре 8052, которое содержит: — 256 килобайт RAM для внутренних данных (IDATA архитектуры 8052). — 10 килобайт ROM (в котором записаны нестираемый бутлоадер USB и I2C). — 16K килобайт RAM для кода firmware, который может быть загружен с хоста или через порт I2C. — 2 килобайта общей RAM, которая используется как буферные данные и блоки дескрипторов конечной точки (endpoint descriptor blocks, EDB). — 4 ножки GPIO, подключенные к порту 3 (P3) микроконтроллера 8052. — главный контроллер I2C для доступа к микросхеме EEPROM. — MCU работает на частоте 24 МГц со скоростью 2 MIPS. — сторожевой таймер 128 мс (watchdog timer). • Два встроенных контроллера DMA для операций ввода/вывода I/O через порты USB/UART. • Работает от кварца 12 МГц. • Поддерживает засыпание и пробуждение USB (suspend и resume). • Поддерживает процедуру пробуждения хоста (remote wake-up). • Имеет 32-выводный корпус LQFP. • Использует напряжение питания 3.3V и имеет встроенный регулятор напряжения 1.8V, который можно использовать для питания ядра микроконтроллера.
2.3. Порт UART с расширенными возможностями
• Программно/аппаратное управление потоком данных (Software/hardware flow control): — программируемые символы Xon/Xoff. — программируемые автоматически работающие сигналы
DSR. • Автоматическое управление приемопередатчиком шины RS-485, с включенным и выключенным эхо. • Выбираемый режим IrDA, работающий на скорости до 115.2 килобит/сек (kbps). • Программно задаваемая скорость передачи UART (baud rate) в диапазоне от 50 до 921.6 килобод. • Программируемые характеристики UART: — количество бит в символе может быть выбрано 5, 6, 7, или 8. — выбор генерации и детектирования бита четности Even (четно), odd (нечетно), или no parity (без бита четности). — выбор количества стоповых бит 1, 1.5, или 2 (stop bit). • Генерация и детектирования сигнала останова передачи (Line break). • Встроенный тест и замыкание со входа на выход (loop-back). • Функции для управления модемом (сигналы
DCD). • Внутренняя диагностика: — управление Loopback (соединение входа с выходом для проверки), для коммуникаций при потери связей. — симуляция событий и ошибок Break, parity, overrun, framing-error.
2.4. Цоколевка корпуса (расположение выводов, вид сверху)
Корпус VF, вид сверху
Корпус RHB, вид снизу
Таблица 2-1. Назначение и нумерация выводов TUSB3410
Имя
№ выв.
I/O
Описание
CLKOUT
22
O
Выход тактовой частоты (управляется битом 2 CLKOUTEN и битом 3 CLKSLCT регистра MODECNFG), см. секцию 5.5 и примечание 1.
CTS
13
I
UART: сигнал Clear to send, очищено для передачи (см. примечание 4).
DCD
15
I
UART: сигнал Data carrier detect, детектирование несущей (см. примечание 4).
DM
7
I/O
Физический сигнал данных D+ шины USB.
DP
6
I/O
Физический сигнал данных D- шины USB.
DSR
14
I
UART: сигнал Data set ready, набор данных готов (см. примечание 4).
DTR
21
O
UART: сигнал Data terminal ready (см. примечание 1).
GND
8, 18, 28
Цифровая земля и отрицательный провод питания.
P3.0
32
I/O
Бит 0 GPIO порта 3 (см. примечания 3, 5 и 8).
P3.1
31
I/O
Бит 1 GPIO порта 3 (см. примечания 3, 5 и 8).
P3.3
30
I/O
Бит 3 GPIO порта 3 (см. примечания 3, 5 и 8).
P3.4
29
I/O
Бит 4 GPIO порта 3 (см. примечания 3, 5 и 8).
PUR
5
O
Подключение нагрузочного резистора (pull-up) для шины USB (см. примечание 2).
RESET
9
I
Главный вход сброса (см. примечание 4).
RI/CP
16
I
UART: сигнал Ring indicator, наличие вызова (см. примечание 4).
RTS
20
O
UART: сигнал Request to send, запрос на передачу (см. примечание 4).
SCL
11
O
Сигнал тактов мастера шины I2C, сюда обычно подключается внешняя память EEPROM для загрузки (см. примечание 1).
SDA
10
I/O
Сигнал данных мастера шины I2C, сюда обычно подключается внешняя память EEPROM для загрузки (см. примечание 1 и 5).
SIN/IR_SIN
17
I
UART: последовательные входные данные / вход данных канала IR (см. примечание 6).
SOUT/IR_SOUT
19
O
UART: последовательные выходные данные / выход данных канала IR (см. примечание 7).
SUSPEND
2
O
Вывод индикации режима приостановки (см. примечание 3). Когда на этом выводе лог. 1, устройство находится в режиме приостановки (suspend mode).
TEST0
23
I
Тестовый вход, предназначенный только для заводского тестирования (см. примечание 5). Этот вывод должен быть подтянут к VCC через резистор 10 кОм.
TEST1
24
I
Тестовый вход, предназначенный только для заводского тестирования (см. примечание 5). Этот вывод должен быть подтянут к VCC через резистор 10 кОм.
VCC
3, 25
PWR
3.3V, напряжение питания.
VDD18
4
PWR
Выход внутреннего регулятора для получения напряжения питания 1.8V. Напряжение генерируется, когда вывод
VREGEN находится в состоянии лог. 0. Когда
VREGEN в лог. 1, напряжение 1.8V (используется для питания ядра MCU) должно быть предоставлено от внешнего источника питания.
VREGEN
1
I
Вход, активный к низкому уровню, для разрешения работы внутреннего стабилизатора напряжения (из 3.3V получает 1.8V).
WAKEUP
12
I
Вывод для запроса пробуждения хоста (wake-up request). Когда лог. 0, выводит из спячки операционную систему подключенного компьютера (см. примечание 5).
X1/CLKI
27
I
Вывод для подключения кристалла (вход) 12 МГц или вход внешних тактов.
X2
26
O
Вывод для подключения кристалла (выход) 12 МГц.
Примечания к таблице 2-1 (тильда
в именах сигналов означает логическую инверсию):
1. Выход буфера CMOS с тремя состояниями выхода (нагрузочная способность +- 4 mA). 2. Выход буфера CMOS с тремя состояниями выхода (нагрузочная способность +- 8 mA). 3. Выход буфера CMOS с тремя состояниями выхода (нагрузочная способность +- 12 mA). 4. Вход совместимый с TTL, с гистерезисом. 5. Вход совместимый с TTL, с гистерезисом, с внутренним активным верхним (pullup) нагрузочным резистором на 100 mkA. 6. Вход совместимый с TTL, без гистерезиса, с внутренним активным верхним (pullup) нагрузочным резистором на 100 mkA. 7. Нормальный режим или IR-режим: выход буфера CMOS с тремя состояниями выхода (нагрузочная способность +- 4 mA). 8. MCU работает с выходами как с открытым стоком таким образом, что низкий уровень может удерживаться на выходе продолжительное время, а высокий уровень появляется на выходе только на 2 такта CPU, после чего выход переходит в состояние высокого сопротивления (третье состояние).
[3. Подробное описание TUSB3410]
3.1. Рабочие режимы
TUSB3410 управляет поведением интерфейса в ответ на команды USB, и это функционирование зависит от выбранного режима последовательного порта. С другой стороны, последовательный порт может конфигурироваться в трех различных режимах.
Как и в любом интерфейсном устройстве, передача данных является основной функцией TUSB3410, но обычно начальное конфигурирование и обработка ошибок требует некоторой поддержки в коде firmware. В последующих секциях будет описаны различные режимы, которые могут быть использованы для устройства, что представляет из себя конфигурирование в данных режимах.
3.2. Конфигурация интерфейса USB
TUSB3410 содержит встроенный микрокод, который позволяет MCU настроить USB, чтобы оно успешно прошло процедуру энумерации на хосте. Микрокод ROM может также загрузить код приложения пользователя (application code) во внутреннюю память RAM из внешней памяти через шину I2C (такую шину имеют многие популярные микросхемы EEPROM с последовательным интерфейсом) или от хоста, прямо через интерфейс USB.
3.2.1. Загрузка кода из подключенной внешней памяти
После сброса (или включения питания) TUSB3410 отключается от USB (сигналы приводятся в такое состояние, что хост видит устройство отключенным, даже если оно подключено к порту USB). Бит 7 (CONT) регистра USBCTL (см. секцию 5.4) очищается. TUSB3410 проверяет порт I2C на наличие подключенной внешней микросхемы памяти (например, это может быть микросхема 24C512), и наличие в ней допустимого прошитого кода; если валидный код найден, то этот код считывается из микросхемы памяти и загружается во внутреннюю RAM, которая включена в область память программ. Как только код загружен, TUSB3410 подключается к USB установкой бита CONT, и затем происходят стандартные процессы энумерации и конфигурирования. Такой вариант загрузки используется наиболее часто.
Примечание: для подготовки дампа кода (чтобы он стал допустимым для загрузки TUSB3410) и прошивки его в память EEPROM фирма Texas Instruments предоставляет специальную утилиту подготовки образа для EEPROM Header.exe, см. [2].
3.2.2. Загрузка кода из хоста PC
Если по шине I2C не удалось найти и считать допустимый код, то TUSB3410 сама подключается к USB (бутлоадер устанавливает бит 7 CONT регистре USBCTL, см. секцию 5.4), и затем проходит конфигурирование и стандартную энумерацию на хосте. После этого код может загрузить дополнительный код в RAM, этот код может содержать в себе приложение пользователя. После загрузки кода MCU автоматически делает переподключение к USB с помощью сброса и установки бита CONT, что приводит к повторной энумерации на хосте, но теперь уже под управлением кода, загруженного в RAM. Теперь конфигурация устройства USB может быть совсем другой, полностью зависящей от загруженного в RAM кода firmware.
Для того, чтобы загрузка через USB работала, необходима установка драйвера USB TI WDF USBUART Single Driver, см. [2].
3.3. Передача данных по USB
По стандарту USB микросхема TUSB3410 видится на хосте как периферийное устройство USB. Как и все такие устройства, оно использует endpoint 0 как конечную точку управления (control endpoint). Дополнительно могут сконфигурированы до 3 входных конечных точек (input endpoint) и выходных (output endpoint). Большинство приложений используют одну bulk input endpoint для ввода данных в хост (data in) и одну bulk output endpoint для вывода данных из хоста (data out), и одну interrupt endpoint для обновления статуса устройства. Конфигурация USB может оставаться одинаковой независимо от конфигурации последовательного порта.
Чаще всего данные передаются со стороны USB на сторону UART (и в обратном направлении) с использованием встроенного в чип контроллер DMA. В некоторых особых случаях (например, если нужно реализовать устройство класса USB HID) управление перемещением данных может осуществляться программно с помощью кода firmware MCU.
3.4. Настройка последовательного порта
Последовательный порт требует некоторой настройки управляющих регистров, которые должны быть записаны для конфигурирования порта. Эта конфигурация может быть одинаковой независимо от используемого способа передачи данных. Эти регистры включают в себя регистр управления линией (line control register), который управляет форматом передаваемого слова и регистры делителя, которые задают скорость передачи (baud rate).
Эти регистры обычно управляются приложением хоста.
3.5. Режимы данных последовательного порта
Последовательный порт может быть сконфигурирован в трех различных (однако похожих друг на друга в работе) режимах передачи данных (data mode): RS-232 data mode, RS-485 data mode и IrDA data mode. Как и режим USB режим последовательного порта обычно конфигурируется однократно (при сбросе/загрузке или включении питания) и дальше в процессе работы не меняется. Различие между режимами заключается в интервалах времени последовательного ввода и вывода или в использовании дополнительных управляющих сигналов. Однако базовый процесс преобразования последовательного кода USB в параллельный и затем из параллельного снова в последовательный (и обратно) одинаковый для всех режимов. Некоторые опции настройки доступны для всех режимов, а некоторые могут использоваться только для определенных режимов. Например, программное управление потоком (software flow control) с помощью символов Xoff/Xon может быть использовано во всех режимах, но может использоваться только в режимах RS-232 или IrDA, потому что режим RS-485 работает в полудуплексе. Точно так же аппаратное управление потоком (hardware flow control) и процедура установки связи (handshaking) с использованием сигналов
DSR) доступна в режимах RS-232 или IrDA. Однако в реальности эта возможность может использоваться только в режиме RS-232 mode, потому что режим IrDA имеет только сигналы SIN и SOUT, гальванически развязанные оптикой (обычно оптронами).
3.5.1. RS-232 Data Mode
Режим по умолчанию называется RS-232 mode, он обычно используется для полнодуплексного (full duplex) обмена данными через сигналы SOUT и SIN. В этом режиме выходы управления модемом (
DTR) соединены с модемом и обычно настроены как цифровые выходы. Входы управления модемом (
RI/CP) также обычно соединены с модемом и настроены как цифровые входы. Альтернативно
DSR) могут регулировать поток данных через SOUT и SIN для предотвращения переполнения приемного FIFO. И наконец, с той же целью может использоваться программное управление потоком (software flow control) через символы Xoff/Xon.
Режим RS-232 представлен во многих приложениях, и другие режимы являются подмножеством этого режима.
3.5.2. RS-485 Data Mode
Режим RS-485 очень похож на режим RS-232 тем, что назначение линий SOUT, SIN и формат сигнала на них остались такими же. Поскольку RS-485 имеет шинную архитектуру с неотъемлемым свойством системы обмена с одиночным дуплексом. В режиме RS-485 микросхема TUSB3410 управляет сигналами
DTR, которые могут разрешить либо драйвер RS-485 (передатчик), либо приемник RS-485. В режиме RS-485 разрешающие сигналы для передачи автоматически выставляются всякий раз, когда DMA настроен на выдачу данных. Приемник может быть оставлен разрешенным при разрешенном драйвере (передатчике), чтобы позволить при необходимости принимать эхо, но когда ожидаются реальные данные из канала RS-485, то при приеме драйвер должен быть запрещен. Заметьте, что это устраняет аппаратное управление потоком (hardware flow control), поскольку работа по передаче данных идет в полудуплексе (то в одном направлении, то в другом, и никогда в обоих направлениях сразу), и аппаратное управление потоком не эффективно. Программное управление потоком (software flow control) также поддерживается, но оно может иметь ограниченное значение.
Режим RS-485 разрешается установкой бита 7 (485E) в регистре FCRL (см. секцию 7.1.4), и бита 1 (RCVE) в регистре MCR (см. секцию 7.1.6), что позволяет приемнику подслушивать в режиме RS-485.
3.5.3. IrDA Data Mode
В режиме IrDA сигнал SOUT кодируется и SIN декодируется по стандарту IrDA, и данные могут передаваться со скоростью до 115.2 килобит/сек (kbps). При этом требуется подключение к внешнему трансиверу IrDA. Обмен данными обычно идет в полном дуплексе (full duplex), т. е. сразу в двух направлениях. Обычно в системе IrDA только сигналы SOUT и SIN подключены к аппаратуре, так что аппаратное управление потоком (hardware flow control) не подразумевается. Также поддерживается программное управление потоком (software flow control).
Режим IrDA разрешается установкой бита 6 (IREN) в регистре USBCTL (см. секцию 5.4).
Процесс декодирования состоит из приема сигнала от приемника IrDA и преобразование его обратно в последовательность ноликов и единичек. В соответствии с преобразованием кодера, декодер преобразует импульс в бит нуля и отсутствие импульса в бит единицы.
Рис. 3-1. Выбор режима RS-232 и IR
Пояснения к рисунку 3-1:
From UART, SOUT сигнал данных с выхода UART. IREN бит в регистре USBCTL, который разрешает работу IR. UART BaudOut Clock тактовая частота для UART, от которой зависит скорость передачи. TXCNTL бит в регистре MODECNFG, управляющий режимом управления передачей (см. секцию 5.5). SOFTSW бит в регистре MODECNFG, позволяющий программно разрешать работу выхода передатчика(см. секцию 5.5). CLKSLKT бит в регистре MODECNFG, управляющий выбором тактовой частоты, появляющейся на выходе CLKOUT. To UART Receiver, SIN сигнал данных, поступающий на вход приемника UART. SOUT/IR_SOUT выходной порт (внешний вывод) передатчика UART/IR. SIN/IR_SIN входной порт (внешний вывод) приемника UART/IR. CLKOUT выходной порт (внешний вывод), на который выводится тактовая частота.
Рис. 3-2. Реализация интерфейса USB Serial (RS-232)
Рис. 3-3. Реализация интерфейса USB RS-485
[4. Карта памяти (Memory Map) MCU]
• Когда бит 0 (SDW) регистра ROMS установлен в 0 (boot mode)
• Когда бит 0 (SDW) регистра ROMS установлен в 0 (normal mode)
Рис. 4-1. Карта памяти MCU
4.1. Различные регистры
Этот регистр используется MCU для переключения из режима загрузки (boot mode) в обычный режим (normal operation mode), причем boot mode устанавливается только по сбросу при включении. Дополнительно этот регистр предоставляет номер ревизии устройства и конфигурацию ROM/RAM.
Размер адресного пространства кода. По этим битам можно определить пространство кода ROM или RAM (бит 7 ROA определяет ROM или RAM). Эти биты постоянно находятся в значении 10b, что показывает кодовое пространство 16 кбайт, и на состояние этих бит сброс не оказывает никакого влияния.
00 = 4 килобайта под код 01 = 8 килобайт под код 10 = 16 килобайт под код 11 = 32 килобайта под код
Показывает версию ROM или RAM, на чем основывается адресное пространство CODE (код программы). Этот бит всегда установлен в 1 (что показывает на кодовое пространство на основе RAM), и сброс на него не влияет.
ROA = 0: кодовое пространство ROM ROA = 1: кодовое пространство RAM
Таблица 4-1. Определение размера ROM/RAM
Регистр ROMS
BOOT ROM
RAM CODE
ROM CODE
ROA
S1
S0
0
0
0
нет
нет
4K
0
0
1
нет
нет
8K
0
1
0
нет
нет
16K (зарезервировано)
0
1
1
нет
нет
32K (зарезервировано)
1
0
0
10K
4K
нет
1
0
1
10K
8K
нет
1*
1*
0*
10K*
16K*
нет*
1
1
1
10K
32K (зарезервировано)
нет
* сейчас жестко используется только этот вариант.
4.1.2. Работа в состоянии Boot (загрузка MCU firmware в память CODE RAM)
Поскольку кодовое пространство firmware находится в CODE RAM (исключая boot ROM), то firmware для TUSB3410 должно быть загружено из какой-то внешней памяти. Как уже упоминалось, таких источников внешней памяти два: один это внешняя последовательная микросхема EEPROM с интерфейсом I2C, и другой это хост, подключенный через USB. Когда устройство сброшено, бит 0 (SDW) в регистре ROMS (см. секцию 4.1.1) и бит 7 (CONT) в регистре USBCTL (см. секцию 5.4) очищены. Это конфигурирует карту памяти в состояние boot mode (см. таблицу 4-3) и удерживает устройство в состоянии отключения от хоста. Первая инструкция кода выбирается по адресу CODE 0000h (сейчас в это место отображены 10 килобайт ROM). 16 килобайт RAM отображены в область XDATA (начиная с адреса 0000h). MCU под управлением бутлоадера ROM читает внешнюю память EEPROM и проверяет данные в ней на наличие кода (по специальной сигнатуре загрузки). Если в EEPROM содержит соответствующий допустимый код (правильную сигнатуру), то MCU читает код firmware из EEPROM и записывает его в 16 килобайт XDATA RAM. Если код (сигнатура) не найден, то MCU выполняет загрузку из USB.
Как только код загружен, MCU устанавливает бит SDW регистра ROMS в 1. Это переключает карту памяти в normal mode; как только это сделано, 16 килобайт RAM будут отображены на адресное пространство CODE (начиная с адреса 0000h), и MCU начнет оттуда выполнение программы. Код снова инициализирует USB и устройство проходит обычную процедуру энумерации на хосте.
В TUSB3410 имеется сторожевой таймер (WDT, WatchDog Timer) с дискретностью 1 мс. Если к этому регистру не было обращения в течение 128 мс, то счетчик WDT сбрасывает MCU (см. рис. 5-1). Сторожевой таймер по умолчанию разрешен, и его можно запретить, если записать сигнатуру 101010b в биты WDD[5:0] регистра. Тактовый сигнал с периодом 1 мс для WDT поступает от импульсов SOF. Таким образом, чтобы таймер WDT считал, должен быть установлен бит 7 (CONT) в регистре USBCTL (см. секцию 5.4).
№ бита
Имя
RESET
Описание бит
0
WDT
0
MCU firmware должно записывать 1 в этот бит, чтобы предотвратить перезагрузку, которую может вызвать истечение таймаута сторожевого таймера ( watchdog ). Если MCU не записал в этот бит 1 в течение времени 128 мс, то watchdog перезагрузит микросхему. Запись 0 не оказывает никакого воздействия на watchdog. Таймер watchdog имеет 7 разрядов, и на него подается тактовая частота с периодом 1 мс (от импульсов SOF). Читается бит WDT всегда как 0.
5-1
WDD[5:1]
00000
Эти биты позволяют запретить watchdog. Чтобы запретить сторожевой таймер, в эти биты надо записать 10101b и бит 7 WDD0 также должен быть сброшен в 0. Запись других значений не приведет к запрету watchdog.
6
WDR
0
Бит, который указывает на сброс по сторожевому таймеру или на сброс при включении питания.
WDR=0: произошел сброс при включении питания. WDR=1: произошел сброс от watchdog. Чтобы очистить этот бит, MCU должен записать сюда 1, запись 0 не дает никакого эффекта.
Это один из 6 бит, который позволяет запретить watchdog. Для запрета watchdog этот бит должен быть очищен.
4.2. Буферы и карта памяти ввода вывода (I/O)
Адресное пространство XDATA в диапазоне от F800h до FFFFh (2 килобайта) зарезервировано для буферов данных, пакета настройки USB (setup packet), блоков дескрипторов конечной точки (endpoint descriptors block, EDB), и ввода/вывода (I/O). Здесь 128 ячеек зарезервированы для регистров MMR. В таблице 4-2 представлено пространство XDATA и ограничение доступа к нему через DMA, менеджер буфера USB (USB buffer manager, UBM) и MCU.
Таблица 4-2. Адресное пространство XDATA
Таблица 4-4. Адресное пространство XDATA для ячеек EDB
4.3. Endpoint Descriptor Block (от EDB-1 до EDB-3)
Передачи данных через между USB, MCU и внешними устройствами определены в endpoint descriptor block (EDB). Имеется три input EDB и три output EDB. За исключением EDB-0 (I/O endpoint-0), все EDB размещены в SRAM, как описано в таблице 4-3. Каждый EDB содержит информацию, описывающую X- и Y- буферы. В дополнение, каждый EDB предоставляет общую информацию статуса.
В таблице 4-5 показаны записи для блоков EDB от EDB-1 до EDB-3. Регистры EDB-0 описаны в таблице 4-6.
Смещение
Имя записи
Описание
07
EPSIZXY_n
I/O endpoint_n: размер буфера X/Y.
06
EPBCTY_n
I/O endpoint_n: счетчик байт Y.
05
EPBBAY_n
I/O endpoint_n: базовый адрес буфера Y.
04, 03
SPARE
Не используется.
02
EPBCTX_n
I/O endpoint_n: счетчик байт X.
01
EPBBAX_n
I/O endpoint_n: базовый адрес буфера X.
00
EPCNF_n
I/O endpoint_n: конфигурация.
Таблица 4-6. Базовые адреса регистров конечной точки
Базовый адрес
Описание
FF08h
Output endpoint 1
FF10h
Output endpoint 2
FF18h
Output endpoint 3
FF48h
Input endpoint 1
FF50h
Input endpoint 2
FF58h
Input endpoint 3
№ бита
Имя
RESET
Описание бит
1-0
RSV
x
Зарезервировано, равно 0.
Разрешение прерывания по завершению транзакции USB. Устанавливается и сбрасывается MCU.
USBIE=0: по завершению транзакции прерывание не сработает. USBIE=1: по завершению транзакции сработает прерывание.
Показывает событие stall. Устанавливается и сбрасывается MCU.
STALL=0: нет события stall. STALL =1: произошло событие stall. Если этот бит установлен MCU, то инициализируется STALL рукопожатие (handshake) и бит очищается MCU.
Разрешение двойного буфера (X и Y). Устанавливается и сбрасывается MCU.
Бит переключения буфера USB, отражающий состояние последовательности DATA0, DATA1.
ISO=0 означает неизохронный трансфер данных. Этот бит обязательно должен быть очищен MCU, поскольку поддерживаются только неизохронные передачи.
Бит разрешения UBM. Устанавливается и сбрасывается MCU.
UBME=0: UBM не может использовать эту конечную точку. UBME=1: UBM может использовать эту конечную точку.
№ бита
Имя
RESET
Описание бит
7-0
A[10:3]
x
Биты 10..3 базового адреса буфера X, дополненные справа 3 нулевыми младшими битами для получения 11-битного адреса. Значение этого регистра устанавливается MCU. UBM или DMA используют это значение как начальный адрес для указанной транзакции. Имейте в виду, что UBM или DMA не меняют это значение по окончании транзакции.
В регистре OEPBBAX_n задано смещение относительно адреса 0xF800 в области данных XDATA. Т. е. реальный абсолютный адрес буфера, в который будет класть данные UBM, вычисляется следующим образом:
OUT_BUFFERXn_ADDRESS = 0xF800 + (OEPBBAX_n № бита
Имя
RESET
Описание бит
6-0
C[6:0]
x
Счетчик байт буфера X, который считает до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
NAK=0: в буфере нет допустимых данных. Готовность к OUT хоста. NAK=1: буфер содержит допустимый пакет от хоста (выдает ответ NAK на запрос хоста OUT).
№ бита
Имя
RESET
Описание бит
7-0
A[10:3]
x
Биты 10..3 базового адреса буфера Y, дополненные справа 3 нулевыми младшими битами для получения 11-битного адреса. Значение этого регистра устанавливается MCU. UBM или DMA используют это значение как начальный адрес для указанной транзакции. Имейте в виду, что UBM или DMA не меняют это значение по окончании транзакции.
В регистре OEPBBAY_n задано смещение относительно адреса 0xF800 в области данных XDATA. Т. е. реальный абсолютный адрес буфера, в который будет класть данные UBM, вычисляется следующим образом:
OUT_BUFFERYn_ADDRESS = 0xF800 + (OEPBBAY_n № бита
Имя
RESET
Описание бит
6-0
C[6:0]
x
Счетчик байт буфера Y, который считает до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
NAK=0: в буфере нет допустимых данных. Готовность к OUT хоста. NAK=1: буфер содержит допустимый пакет от хоста (выдает ответ NAK на запрос хоста OUT).
№ бита
Имя
RESET
Описание бит
6-0
S[6:0]
x
Размер буфера X и буфера Y, от 0 (0000000b) до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
Зарезервировано, равно 0.
№ бита
Имя
RESET
Описание бит
1-0
RSV
x
Зарезервировано, равно 0.
Разрешение прерывания по завершению транзакции USB. Устанавливается и сбрасывается MCU.
USBIE=0: по завершению транзакции прерывание не сработает. USBIE=1: по завершению транзакции сработает прерывание.
Показывает событие stall. Устанавливается UBM, но может быть установлен / сброшен MCU.
STALL=0: нет события stall. STALL=1: произошло событие stall. Если этот бит установлен MCU, то инициализируется STALL рукопожатие (handshake) и бит автоматически очищается.
Разрешение двойного буфера (X и Y). Устанавливается и сбрасывается MCU.
Бит переключения буфера USB, отражающий состояние последовательности DATA0, DATA1.
ISO=0 означает неизохронный трансфер данных. Этот бит обязательно должен быть очищен MCU, поскольку поддерживаются только неизохронные передачи.
Бит разрешения UBM. Устанавливается и сбрасывается MCU.
UBME=0: UBM не может использовать эту конечную точку. UBME=1: UBM может использовать эту конечную точку.
№ бита
Имя
RESET
Описание бит
7-0
A[10:3]
x
Биты 10..3 базового адреса буфера X, дополненные справа 3 нулевыми младшими битами для получения 11-битного адреса. Значение этого регистра устанавливается MCU. UBM или DMA используют это значение как начальный адрес для указанной транзакции. Имейте в виду, что UBM или DMA не меняют это значение по окончании транзакции.
В регистре IEPBBAX_n задано смещение относительно адреса 0xF800 в области данных XDATA. Т. е. реальный абсолютный адрес буфера, из которого UBM будет брать данные для отправки хосту, вычисляется следующим образом:
IN_BUFFERXn_ADDRESS = 0xF800 + (IEPBBAX_n № бита
Имя
RESET
Описание бит
6-0
C[6:0]
x
Счетчик байт буфера X, который считает до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
NAK=0: буфер содержит допустимый пакет для IN-транзакции хоста. NAK=1: буфер пуст (выдает ответ NAK на запрос хоста IN).
№ бита
Имя
RESET
Описание бит
7-0
A[10:3]
x
Биты 10..3 базового адреса буфера Y, дополненные справа 3 нулевыми младшими битами для получения 11-битного адреса. Значение этого регистра устанавливается MCU. UBM или DMA используют это значение как начальный адрес для указанной транзакции. Имейте в виду, что UBM или DMA не меняют это значение по окончании транзакции.
В регистре IEPBBAY_n задано смещение относительно адреса 0xF800 в области данных XDATA. Т. е. реальный абсолютный адрес буфера, из которого UBM будет брать данные для отправки хосту, вычисляется следующим образом:
IN_BUFFERYn_ADDRESS = 0xF800 + (IEPBBAY_n № бита
Имя
RESET
Описание бит
6-0
C[6:0]
x
Счетчик байт буфера Y, который считает до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
NAK=0: буфер содержит допустимый пакет для IN-транзакции хоста. NAK=1: буфер пуст (выдает ответ NAK на запрос хоста IN).
№ бита
Имя
RESET
Описание бит
6-0
S[6:0]
x
Размер буфера X и буфера Y, от 0 (0000000b) до 64 (1000000b). Любое значение больше 64 может привести к непредсказуемым результатам.
Разрешение прерывания по завершению транзакции USB. Устанавливается и сбрасывается MCU.
USBIE=0: по завершению транзакции прерывание не сработает. USBIE=1: по завершению транзакции сработает прерывание.
Показывает событие stall. Устанавливается и сбрасывается MCU.
STALL=0: нет события stall. STALL=1: произошло событие stall. Если этот бит установлен MCU, то инициализируется STALL рукопожатие (handshake) и бит очищается автоматически при следующей транзакции настройки (setup).
Зарезервировано, равно 0.
Бит переключения буфера USB, отражающий состояние последовательности DATA0, DATA1.
Зарезервировано, равно 0.
Бит разрешения UBM. Устанавливается и сбрасывается MCU.
UBME=0: UBM не может использовать эту конечную точку. UBME=1: UBM может использовать эту конечную точку.
№ бита
Имя
RESET
Описание бит
3-0
C[3:0]
0000
Счетчик байт, который считает до 8 (1000b). Любое значение больше 8 зарезервировано (если используется, то все равно по умолчанию 8).
Зарезервировано, равно 0.
NAK=0: буфер содержит допустимый пакет для IN-транзакции хоста. NAK=1: буфер пуст (выдает ответ NAK на запрос хоста IN).
№ бита
Имя
RESET
Описание бит
1-0
RSV
0
Зарезервировано, равно 0.
Разрешение прерывания по завершению транзакции USB. Устанавливается и сбрасывается MCU.
USBIE=0: по завершению транзакции прерывание не сработает. USBIE=1: по завершению транзакции сработает прерывание.
Показывает событие stall. Устанавливается и сбрасывается MCU.
STALL=0: нет события stall. STALL=1: произошло событие stall. Если этот бит установлен MCU, то инициализируется STALL рукопожатие (handshake) и бит автоматически очищается.
Зарезервировано, равно 0.
Бит переключения буфера USB, отражающий состояние последовательности DATA0, DATA1.
Зарезервировано, равно 0.
Бит разрешения UBM. Устанавливается и сбрасывается MCU.
UBME=0: UBM не может использовать эту конечную точку. UBME=1: UBM может использовать эту конечную точку.
№ бита
Имя
RESET
Описание бит
3-0
C[3:0]
0000
Счетчик байт, который считает до 8 (1000b). Любое значение больше 8 зарезервировано.
Зарезервировано, равно 0.
NAK=0: в буфере нет допустимых данных. Готовность к транзакции OUT от хоста. NAK=1: буфер содержит допустимый пакет от хоста, пока не обработанный MCU (выдает ответ NAK на запрос хоста OUT).
[5. Регистры USB]
В этом регистре содержится адрес функции устройства USB.
№ бита
Имя
RESET
Описание бит
6-0
FA[6:0]
0
Эти биты задают текущий адрес устройства, назначенный на функцию. MCU записывает сюда указанное значение при поступлении от хоста команды SET ADDRESS.
Зарезервировано, равно 0.
Все биты в этом регистре устанавливаются аппаратно и очищаются MCU, когда он записывает 1 в соответствующее место расположения бита (запись 0 не оказывает эффекта). Дополнительно каждый бит может генерировать прерывание, если установлен соответствующий бит маски прерываний (сокращение R/C означает, что чтение read и очистка clear осуществляется только под управлением MCU).
№ бита
Имя
RESET
Описание бит
0
STPOW
0
Бит перезаписи SETUP. Устанавливается аппаратно, когда принят setup packet, при этом пакет setup уже находится в буфере setup.
STPOW=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). STPOW=1: SETUP overwrite
Бит удаленного пробуждения (remote wakeup).
WAKEUP=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). WAKEUP=1: запрос на пробуждение хоста, который поступил от ножки WAKEUP.
Бит, сигнализирующий о приеме транзакции SETUP. Пока SETUP в состоянии 1, на все запросы IN и OUT для конечной точки 0 будет ответ NAK, независимо от их реальных значений бита NAK.
SETUP=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). SETUP=1: принята транзакция настройки (SETUP).
URRI=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). URRI=1: модемом был детектирован звонок, и это событие используется для того, чтобы разбудить чип (для вывода его из режима приостановки suspend).
Бит запроса на возобновление (resume) функции.
RESR=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). RESR=1: детектировано возобновление функции (function resume).
Бит запроса на приостановку (suspend) функции. Этот бит устанавливается в ответ на глобальное или селективное событие приостановки.
SUSR=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). SUSR=1: детектирована приостановка функции (function suspend).
Бит запроса на сброс функции. Этот бит устанавливается в ответ на запуск хостом процедуры сброса порта USB (USB reset). Этот бит не затрагивается сбросом функции USB (USB function reset).
RSTR=0: MCU может очистить этот бит, если запишет в него 1 (запись 0 не дает никакого эффекта). RSTR=1: детектирован сброс функции.
№ бита
Имя
RESET
Описание бит
0
STPOW
0
Бит разрешения прерывания на событие SETUP overwrite.
Бит разрешения прерывания на событие звонка UART RI.
URRI=0: прерывание UART RI запрещено URRI=1: прерывание UART RI разрешено
Бит разрешения прерывания на возобновление (resume) функции.
RESR=0: прерывание от возобновления функции запрещено RESR=1: прерывание от возобновления функции разрешено
Бит разрешения прерывания на приостановку (suspend) функции.
SUSR=0: прерывание от приостановки функции запрещено SUSR=1: прерывание от приостановки функции разрешено
Бит разрешения прерывания на сброс функции. Этот бит не затрагивается сбросом функции USB (USB function reset).
RSTR=0: прерывание от сброса функции запрещено RSTR=1: прерывание от сброса функции разрешено
В отличие от остальных регистров, этот регистр очищается только сигналом сброса при включении питания. USB reset не может сбросить этот регистр (см. рис. 5-1).
№ бита
Имя
RESET
Описание бит
0
DIR
0
Как ответ на setup paket, MCU декодирует запрос и устанавливает/сбрасывает этот бит, чтобы отразить направление трансфера данных.
DIR=0: транзакция USB data-OUT (от хоста к TUSB3410) DIR=1: транзакция USB data-IN (от TUSB3410 к хосту)
Бит статуса прерывания SETUP. Этот бит управляется MCU чтобы показать аппаратуре, когда обрабатывается прерывание SETUP.
SIR=0: прерывание SETUP не находится в обработке. MCU очищает этот бит перед выходом из обработчика прерывания SETUP. SIR=1: прерывание SETUP в настоящий момент обрабатывается. MCU устанавливает этот бит в начале обработчика прерывания SETUP.
Зарезервировано, равно 0.
В этот бит всегда должен записываться 0.
Бит привязки сброса функции к сбросу MCU. Этот бит соединяет USB function reset с MCU reset или наоборот разъединяет их.
FRSTE =0: запись 0 в этот бит не даёт никакого эффекта FRSTE =1: сброс функции соединен со сбросом MCU
Запрос на удаленное пробуждение устройства (device remote wakeup request). Этот бит устанавливается MCU и сбрасывается автоматически.
RWUP=0: запись 0 в этот бит не даёт никакого эффекта RWUP=1: когда MCU записывает сюда 1, генерируется импульс remote-wakeup.
Разрешение режима IR. Этот бит устанавливается и сбрасывается под управлением firmware MCU.
IREN=0: кодер/декодер IR запрещен, выбран режим UART RSTR=1: кодер/декодер IR разрешен, режим UART не выбран
CONT=0: порт upstream USB отключен, pullup запрещен CONT=1: порт upstream USB подключен, pullup разрешен
Этот регистр очищается только сигналом сброса при включении питания. USB reset не может сбросить этот регистр.
№ бита
Имя
RESET
Описание бит
0
TXCNTL
0
Управление выходом передачи: выбор аппаратного или программного (под управлением firmware) выбора состояния буфера последовательного выхода, который может переключаться в третье состояние.
TXCNTL=0: выбрано автоматическое переключение под управлением аппаратуры TXCNTL=1: выбрано программное переключение
Программное переключение: управляемый firmware выходной буфер с третьим состоянием разрешается для вывода на внешнюю ножку чипа.
SOFTSW=0: буфер последовательного выхода разрешен SOFTSW=1: буфер последовательного выхода запрещен
Разрешение выхода тактов: разрешает / запрещает вывод тактов на ножку CLKOUT.
Выбор источника сигнала для выхода тактов CLKOUT : можно выбрать либо фиксированную частоту 3.566 МГц, либо такты для UART.
CLKSLCT=0: выбран в качестве тактового сигнала генератор скорости UART. CLKSLCT=1: на CLKOUT будет выводиться фиксированная частота 3.566 МГц
Управление выводом тактов (Clock Output Control)
Бит 2 (CLKOUTEN) в регистре MODECNFG разрешает или запрещает вывод тактов на ножке CLKOUT TUSB3410. При включении по умолчанию CLKOUT запрещен. Если это необходимо, firmware может записать 1, чтобы разрешить вывод тактов.
Бит 3 (CLKSLCT) в регистре MODECNFG выбирает источник выходных тактов либо от фиксированной частоты 3.556 МГц, либо от тактов UART BaudOut.
5.6. Vendor ID/Product ID (VID/PID)
USB-IF и сертификация Microsoft WHQL требует эти параметры, и производители оборудования используют свои собственные уникальные ID вендора (Vedor ID, VID) и ID продукта (Product ID, PID, идентификатор модели). OEM не могут использовать идентификаторы VID/PID чипа вендора (например, VID/PID Texas Instruments) в своих окончательных продуктах. Уникальные комбинации VID/PID предотвращает потенциальные конфликты драйвера и разрешают сертификацию, привязанную к логотипу. Для дополнительной информации см. www.usb.org.
Каждая микросхема TUSB3410 имеет свой собственный уникальный 64-битный серийный номер, который генерируется во время производства. Этот номер последовательно увеличивается, однако нет гарантии того, что в этом процессе некоторые номера не будут пропущены. После сброса при включении питания SERNUM7 содержит самый значащий байт 64-битного серийного номера, а SERNUM0 самый младший байт. Эти данные не могут быть сброшены или перезаписаны.
Далее описана процедура загрузки серийного номера устройства в общее RAM:
5.15. Функционирование сброса и путь сигнала сброса при включении питания (Power-Up Reset)
На рис. 5-1 показано логическое соединение функции сброса шины USB (сигнал
USBR) сигнала ножки внешнего сброса (
RESET). Внутренний сигнал сброса генерируется из уровня на выводе
PURS) или от сигнала сброса USB (сигнал
USBRS может быть разрешен или запрещен битом 4 (FRSTE) регистра USBCTL (см. секцию 5.4), при включении питания FRSTE = 0. Внутренний сброс используется для переустановки всех регистров и логики, за исключением регистров USBCTL и MODECNFG, которые сбрасываются только сигналом
Рис. 5-1. Схема генерации и прохождения сигнала сброса.
5.16. Нагрузочный резистор (Pullup Resistor) для подключения/отключения устройства USB
Рис. 5-2. Схема нагрузочного резистора для подключения/отключения устройства USB
[6. Контроллер DMA]
В таблице 6-1 показаны каналы DMA и связанные с ними направления передачи данных. Два канала предоставлены для трансфера данных между хостом и UART.
Таблица 6-1. Каналы DMA
Канал DMA
Направление передачи
Комментарии
DMA-1
От хоста к UART
DMA пишет данные в регистр TDR UART
DMA-3
От UART к хосту
DMA читает данные из регистра RDR UART
6.1. Регистры контроллера DMA
На приеме по окончании передачи блока DMA обновляет счетчик байт и бит 7 (NAK) в EDB (см. секцию 4.3). Дополнительно DMA использует бит 4 (XY) в регистре DMACDR для автоматического переключения (без прерывания работы MCU, так как переключение бита XY делает блок UBM). DMA останавливается только когда происходит таймаут или случается ошибка. Когда DMA передает (из буфера X/Y), то он продолжает переключение буферов X/Y, пока не обнаружит, что значение счетчика байт меньше размера буфера (обычно размер буфера 64 байта). В этот момент передача завершается и останавливается.
Этот регистр задает номер EDB который использует DMA для передачи данных в UART. Дополнительно этот регистр задает направление передачи данных и выбирает буфер транзакции X или Y.
№ бита
Имя
RESET
Описание бит
2-0
E[2:0]
0
Указатель дескриптора конечной точки. Это поле бит указывает на набор регистров EDB, которые должны использоваться для указанного трансфера.
XY=0: следующий для передачи/приема будет буфер X XY=1: следующий для передачи/приема будет буфер Y
Бит управления непрерывностью трансфера DMA. Этот бит задает режим трансфера DMA, и всегда должен быть записан в состояние лог. 1.
В этом режиме DMA и UBM чередуют использование буферов X и Y (двойное буферизирование). DMA устанавливает бит 4 XY, и UBM использует его для трансфера. DMA переключается между буферами X и Y и продолжает передачу (то из буфера X, то из Y) без всякого вмешательства MCU. DMA прекращает работу и вызывает срабатывание прерывания MCU в следующих случаях:
1. Когда счетчик байтов UBM меньше размера буфера (заданного в EDB), DMA делает трансфер частично заполненного пакета и вызывает прерывание MCU по завершении. 2. Истекает таймер транзакции. DMA также вызывает срабатывание прерывания MCU.
Бит разрешения / запрещения прерывания DMA. Этот бит разрешает и запрещает прерывание по завершении транзакции.
INE=0: прерывание запрещено. Дополнительно бит 0 PPKT в регистре DMACSR1 (см. секцию 6.1.2) не очищается, бит 7 EN и DMAC не запрещены. INE=1: разрешает прерывание EN. Когда этот бит установлен, DMA вызывает срабатывание прерывания MCU при переходе из 1 в 0 бита 7 EN. Когда трансфер завершен, EN=0.
Разрешение канала DMA. MCU устанавливает этот бит для начала трансфера DMA. Когда трансфер завершен, или прерван из-за ошибки, этот бит очищается. Переход этого бита из состояния 1 в 0 генерирует прерывание (если прерывание разрешено).
EN=0: DMA остановлен. Остановка происходит, когда счетчик байт достигает нуля, или когда происходит таймаут транзакции. Когда остановлено, DMA обновляет счетчик байт, устанавливает NAK=0 в регистре счетчика байт конечной точки output, и вызывает прерывание MCU (если бит 6 INE равен 1). EN=1: установка этого бита стартует трансфер DMA.
Этот регистр задает значение таймаута транзакции. Дополнительно он содержит код завершения, который сообщает о любых событиях ошибок и таймаута.
№ бита
Имя
RESET
Описание бит
0
PPKT
0
Бит события частично заполненного пакета. Этот бит устанавливается DMA и очищается MCU.
PPKT=0: нет события частично заполненного пакета PPKT=1: детектировано событие частично заполненного пакета. Когда INE=0, этот бит не очищает бит 7 EN в регистре DMACDR1; таким образом, DMAC остается разрешенным, готовым к следующей транзакции. Бит PPKT очищается, когда MCU записывает в него 1, запись 0 не дает никакого эффекта.
Эти биты доступны только для чтения и всегда читаются как нули.
Этот регистр задает номер EDB, который DMA использует для передачи данных из UART. Дополнительно этот регистр задает направление передачи данных и выбирает буфер транзакции X или Y.
№ бита
Имя
RESET
Описание бит
2-0
E[2:0]
0
Указатель дескриптора конечной точки. Это поле бит указывает на набор регистров EDB, которые должны использоваться для указанного трансфера.
Этот бит всегда читается как 1. Его нужно записать в 0, чтобы обновить бит буфера XY (в этом регистре бит 4), это надо выполнять только в режиме ускоренной передачи (burst mode).
XY=0: следующий для передачи/приема будет буфер X XY=1: следующий для передачи/приема будет буфер Y
Бит управления непрерывностью трансфера DMA. Этот бит задает режим трансфера DMA, и всегда должен быть записан в состояние лог. 1.
В этом режиме DMA и UBM чередуют использование буферов X и Y (двойное буферизирование). UBM устанавливает бит 4 XY, и DMA использует его для трансфера. DMA переключается между буферами X и Y и продолжает прием (то в буфер X, то в Y) без всякого вмешательства MCU. DMA прекращает работу и вызывает срабатывание прерывания MCU в следующих случаях:
1. Истекает таймер транзакции: DMA обновляет EDB и вызывает срабатывание прерывания MCU. UBM при этом передает хосту частично заполненный пакет. 2. Произошла ошибка приемника UART: DMA обновляет EDB, но при этом прерывание MCU не вызывает. UBM также передает хосту частично заполненный пакет.
Бит разрешения / запрещения прерывания DMA. Этот бит разрешает и запрещает прерывание по завершении транзакции.
INE=0: прерывание запрещено. Дополнительно бит 0 OVRUN и бит 1 TXFT в регистре DMACSR3 (см. секцию 6.1.4) не очищается, бит 7 EN и DMAC не запрещены. INE=1: разрешает прерывание EN. Когда этот бит установлен, DMA вызывает срабатывание прерывания MCU при переходе из 1 в 0 бита 7 EN. Когда трансфер завершен, EN=0.
Разрешение канала DMA. MCU устанавливает этот бит для начала трансфера DMA. Когда трансфер завершен, или прерван из-за ошибки, этот бит очищается. Переход этого бита из состояния 1 в 0 генерирует прерывание (если прерывание разрешено).
EN=0: DMA остановлен. Остановка происходит, когда происходит таймаут транзакции, или когда происходит ошибка приемника UART. Когда остановлено, DMA обновляет счетчик байт, устанавливает NAK=0 в регистре счетчика байт конечной точки input. Если остановка DMA произошла по таймауту транзакции, то DMA запускает прерывание. Однако, если остановка DMA произошла из-за ошибки UART, то DMA прерывание MCU не генерируется (в этом случае будет соответствующее прерывание от UART). EN=1: установка этого бита стартует трансфер DMA.
Этот регистр задает значение таймаута транзакции. Дополнительно он содержит код завершения, который сообщает о любых событиях ошибок и таймаута.
№ бита
Имя
RESET
Описание бит
0
OVRUN
0
Бит события переполнения. Этот бит устанавливается DMA и очищается MCU (см. таблицу 6-2).
OVRUN=0: переполнения не было OVRUN=1: детектировано переполнение. Когда IEN=0, этот бит не очищает бит 7 EN в регистре DMACDR3; таким образом, DMAC остается разрешенным, готовым к следующей транзакции. Бит OVRUN очищается, когда MCU запишет в него 1, запись 0 не дает никакого эффекта.
Бит события таймаута (см. таблицу 6-2).
TXFT=0: DMA остановил трансфер без таймаута. TXFT=1: DMA остановлен по таймауту транзакции. Когда IEN=0, этот бит не очищает бит 7 EN регистра DMACDR3 (см. секцию 6.1.3); таким образом, DMAC остается разрешенным, готовым к следующей транзакции. Очищается бит TXFT, когда MCU записывает в него 1, запись 0 не дает эффекта.
Это поле задает таймаут транзакции в единицах 1 мс. Это значение загружается в декрементный счетчик каждый раз при передаче байта. Декрементный счетчик уменьшается на 1 с каждым импульсом SOF (т. е. каждую миллисекунду). Если счетчик достиг нулевого значения, то устанавливается бит 1 TXFT и трансфер DMA останавливается. Счетчик начнет считать только когда установлены биты 7 TEN регистра DMACSR3 и бит 7 EN регистра DMACDR3, и был принят первый байт.
Бит разрешения / запрещения счетчика таймаута транзакции.
TEN=0: счетчик запрещен (таймаут не отслеживается) TEN=1: счетчик таймаута разрешен
Таблица 6-2. События IN-завершения DMA (IN-Termination Condition)
Остановка IN
TXFT
OVRUN
Комментарий
Ошибка UART
0
0
Было детектировано событие ошибки UART
Частично заполненный пакет UART
1
0
Это событие происходит, когда в приемник UART больше не поступают данные для хоста (данные поступают скудно, с паузами).
UART overrun
1
1
Это событие происходит, когда заполнены оба буфера X и Y, а также заполнен FIFO UART (хост занят, и не может принять данные).
6.2. Ввод/вывод данных (Bulk Data I/O) с использованием EDB
UBM и DMAC обращаются к EDB для выборки параметров буфера для транзакций IN и OUT (IN и OUT по отношению к хосту). Подразумевается следующее:
• MCU инициализирует EDB • используется режим непрерывной работы DMA • Используется двойное буферизирование • Переключение X/Y управляется UBM
6.2.1. Транзакция IN (от TUSB3410 к хосту)
1. MCU инициализирует IEDB (пакет из 64 байт, и используется двойное буферизирование) и следующие регистры DMA:
• DMACSR3: задает величину таймаута транзакции. • DMACDR3: задает, какой используется IEDB и режим работы DMA (continuous mode, непрерывный режим). Как только в этом регистре установлен EN = 1, стартует процесс трансфера данных.
2. DMA переносит данные из UART в буфер X. Когда блок из 64 байт передан, DMA обновляет счетчик байт и сбрасывает NAK на 0 в регистре счетчика байт конечной точки input (это сигнализирует для UBM, что буфер X готов к передаче данных к хосту). Блок UBM запускает трансфер X-буфера к хосту с использованием значения счетчика байт в регистре счетчика байт и переключает бит X/Y. DMA продолжает перенос данных из UART в буфер Y. По окончании передачи блока DMA обновляет счетчик байт и сбрасывает NAK на 0 в регистре счетчика байт конечной точки input (это сигнализирует для UBM, что буфер Y готов к передаче данных к хосту). DMA продолжает трансфер данных от устройства к хосту, переключая при этом буферы X и Y без всякого вмешательства MCU.
3. Завершение трансфера: как уже было упомянуто, DMA/UBM продолжает перенос данных, переключаясь между буферами X и Y. Завершение трансфера может произойти при следующих событиях:
• Остановка переноса данных (Stop Transfer): хост оповещает MCU (через control endpoint) для остановки передачи. При этом событии MCU сбрасывает бит 7 (EN) на 0 в регистре DMACDR. • Часть пакета (Partial Packet): приемник устройства не имеет данных для передачи к хосту. При этом событии значение счетчика байт меньше 64 вызывает срабатывание таймера таймаута транзакции. Когда DMA детектирует это событие, то он устанавливает бит 1 (TXFT) на 1 и бит 0 (OVRUN) на 0 в регистре DMACSR3, обновляет счетчик байт и бит NAK в регистре счетчика байт конечной точки input, и запускает прерывание MCU. UBM передает частично заполненный пакет к хосту. • Переполнение буфера (Buffer Overrun): хост занят, буферы X и Y заполнены (X-NAK = 0 и Y-NAK = 0), и DMA не может записать что-то в эти буферы. Таймаут транзакции останавливает трансфер DMA, DMA устанавливает бит 1 (TXFT) на 1 и бит 0 (OVRUN) на 1 в регистре DMACSR3, и запускает прерывание MCU. • Событие ошибки UART (UART Error Condition): на приеме от UART событие ошибки приемника останавливает DMA устанавливает бит 1 (TXFT) на 1 и бит 0 (OVRUN) на 0 в регистре DMACSR3, но бит EN остается в установленным на 1. Таким образом, DMA не запускает прерывание MCU. Однако UART генерирует прерывание статуса, чем оповещает MCU о событии ошибки.
6.2.2. Транзакция OUT (от хоста к TUSB3410)
1. MCU инициализирует OEDB (пакет из 64 байт, и использование двойной буферизации) и следующие регистры DMA:
• DMACSR1: предоставляет индикацию частично заполненного пакета (partial packet). • DMACDR1: задает используемую конечную точку output режим работы DMA (continuous mode, непрерывный режим). Как только в этом регистре установлен EN = 1, стартует процесс трансфера данных.
2. UBM переносит данные от хоста в буфер X. Когда блок из 64 байт передан, UBM обновляет счетчик байт и сбрасывает NAK на 1 в регистре счетчика байт конечной точки output (это сигнализирует для DMA, что буфер X готов к передаче данных к UART). DMA запускает трансфер X-буфера к UART, используя значения счетчика байт в регистре счетчика байт конечной точки output. При этом UBM продолжает перенос данных от хоста в буфер Y. По окончании передачи блока UBM обновляет счетчик байт и сбрасывает NAK на 1 в регистре счетчика байт конечной точки output (это сигнализирует для DMA, что буфер Y готов к передаче данных к UART). DMA продолжает трансфер данных из буферов X и Y в UART, переключая при этом буферы X и Y без всякого вмешательства MCU.
3. Завершение трансфера: DMA/UBM продолжают трансфер данных с переключением буферов. Завершение трансфера может произойти при следующих событиях:
• Остановка переноса данных (Stop Transfer): хост оповещает MCU (с использованием control endpoint) для остановки передачи. При этом событии MCU сбрасывает EN на 0 в регистре DMACDR1. • Часть пакета (Partial Packet): UBM принял от хоста частично заполненный пакет. При этом событии значение счетчика байт меньше 64. Когда DMA детектирует это событие, он передает частично заполненный пакет в UART, устанавливает PPKT на 1, обновляет NAK на 0 в регистре счетчика байт конечной точке output и запускает прерывание MCU.
[7. UART]
[8. Расширенный порт ввода/вывода (Expanded GPIO Port)]
8.1. Регистры ввода/вывода и управления
TUSB3410 имеет 4 вывода порта ввода/вывода общего назначения (P3.0, P3.1, P3.3 и P3.4), которые могут управляться firmware, запущенном на MCU. каждая ножка вывода может управляться отдельно, независимо от других ножек, и каждая реализована как push/pull выход CMOS с нагрузочной способностью 12 mA с управлением режима третьего состояния и вход. В MCU выходы организованы с открытым стоком (open drain), при этом выходной низкий уровень может быть установлен продолжительное время, однако выход в состоянии высокого уровня переключается на два цикла и затем выход переходит в состояние высокого сопротивления (третье состояние).
Вывод, работающий в режиме входа, может быть прочитан инструкцией MOV. Например, MOV C,P3.3 читает вход на порте P3.3. Перед чтением предварительно убедитесь, что связанный выход находится в состоянии высокого сопротивления.
Выход может быть установлен в высокий логический уровень (и при этом вывод окажется в состоянии высокого сопротивления) инструкцией SETB. Например, SETB P3.1 переводит P3.1 в состояние лог. 1. Выход может быть установлен низкий логический уровень инструкцией CLR, так что CLR P3.4 переведет порт P3.4 в состояние низкого логического уровня (который останется в таком состоянии длительное время, пока состояние не будет изменено).
№ бита
Имя
RESET
Описание бит
0 1 3 4
Pin0 Pin1 Pin3 Pin4
0
MCU может писать в этот регистр. Если MCU установит любой из этих бит в 1, то соответствующий pullup резистор будет отключен от внешнего вывода. Если MCU запишет в эти биты 0, то соответствующий pullup будет подключен. Резистор pullup подключается к напряжению питания Vcc.
[9. Прерывания (Interrupts)]
9.1. Регистры прерывания и статуса 8052
В стандарте 8052 зарезервировано 5 источников прерывания. SIE является стандартным регистром для разрешения прерываний (standard interrupt-enable), который управляет пятью источниками прерываний. Он также известен как IE0, размещенном по адресу S:A8h (в области данных регистров специального назначения). Все дополнительные источники прерывания объединены функцией ИЛИ на прерывание EX0.
Разрешает или запрещает прерывание от последовательного порта.
ES=0: прерывание от последовательного порта запрещено. ES=1: прерывание от последовательного порта разрешено.
Разрешить или запретить все прерывания сразу (глобальное управление прерываниями).
EA=0: все прерывания запрещены. EA=1: разрешение работы всех прерываний управляется индивидуальными битами.
9.1.2. Дополнительные источники прерываний
Все нестандартные для архитектуры 8052 прерывания (DMA, I2C и т. д.) объединены операцией ИЛИ для генерирования внутреннего прерывания INT0. Кроме того, INT0 должен быть запрограммирован как прерывание, активное по низкому уровню (low-level interrupt, без срабатывания по перепаду). После сброса, если INT0 не изменен, то он работает как прерывание по срезу (edge-triggered interrupt). Предоставлен регистр вектора прерывания для идентификации всех источников прерывания (см. секцию 9.1.3, VECINT: Vector Interrupt Register). Имеется до 64 векторов прерывания. MCU отвечает за чтение вектора и вызов соответствующей подходящей подпрограммы обработчика прерывания.
Этот регистр содержит значение вектора, идентифицирующего внутренний источник прерывания, который захватывается при переходе по адресу 0003h. Запись (любого значения) в этот регистр удаляет вектор и обновляет регистр на новое значение вектора (если в ожидании обработки находится следующее прерывание). Внимание: значение вектора является смещением; таким образом, его значение находится в инкременте до 2 (бит 0 сброшен в 0). Когда нет прерываний, ожидающих обработки, то значение вектора становится равным 00h (см. таблицу 9-2). Как показано, вектор прерывания делится на два поля: I[2:0] и G[3:0]. Поле I задает источник прерывания в пределах группы (на базисе первым-случилось-первым-обработано). В поле G, которое задает номер группы, группа G0 имеет самый низкий приоритет, а группа G15 самый высокий приоритет.
№ бита
Имя
RESET
Описание бит
0
—
0
Это поле задает источник прерывания в указанной группе. См. таблицу 9?2. Бит 0 всегда равен нулю; таким образом, значение вектора является смещением на 2.
Это поле задает группу прерывания. I[2:0] и G[3:0] комбинируют для получения действительного вектора прерывания.
Таблица 9-2. Значения вектора прерывания
G[3:0] (hex)
I[2:0] (hex)
VECTOR (hex)
Источник прерывания
0
0
00
Нет прерывания
1 1 1 1 1
0 1 2 3 4-7
10 12 14 16 18-1E
Не используется Output endpoint-1 Output endpoint-2 Output endpoint-3 Зарезервировано
Прерывание статуса UART Прерывание модема UART Зарезервировано
6 6 6
0 1 2-7
9.1.4. Логическая схема соединения прерываний (внутренние/внешние)
На рис. 9-1 показаны логические соединения источников прерывания и их взаимосвязь с INT0. Кодер приоритета генерирует 8-битный вектор, соответствующий 64 источникам прерывания (из них используются не все). Приоритеты прерываний при этом заданы фиксировано. Вектор 0x88 имеет самый высокий приоритет, а вектор 0x12 самый низкий приоритет.
Рис. 9-1. Внутренние прерывания
[10. Порт I2C]
[11. Последовательность загрузки TUSB3410]
Код загрузки (бутлоадер, bootcode) является просто программой, которая размещена в 10 килобайтах boot ROM на кристалле TUSB3410. Эта программа разработана для загрузки приложения firmware либо из внешней памяти I2C (обычно это микросхема EEPROM), либо с хоста USB под управлением драйвера устройства хоста. После того, как TUSB3410 завершит загрузку, bootcode отдает управление потоком выполнения в загруженное приложение firmware.
В этой секции подробно описано, как bootcode инициализирует устройство TUSB3410. Дополнительно перечислены как справочные данные дескриптор USB по умолчанию, формат заголовка устройства I2C, формат загрузки драйвера хоста USB и поддерживаемые встроенные запросы USB, специфичные для вендора. Пользователи должны тщательно следовать соответствующему формату интерфейса с кодом загрузки. Ошибка в формате может привести к непредсказуемым результатам.
Исходный код бутлоадера также предоставлен в документации по программированию.
11.2. Алгоритм программирования кода загрузки
После сброса при включении питания код загрузки инициализирует регистры интерфейса I2C и USB наряду со значениями внутренних переменных. Затем код загрузки проверяет наличие подключенной по I2C микросхемы памяти EEPROM, и ищет в этой памяти допустимую сигнатуру. Если внешняя память подключена к I2C и в ней записана правильная сигнатура, код загрузки продолжает поиск блоки дескрипторов и обрабатывает их, если контрольная сумма совпадает. Если найдено приложение firmware, то код загрузки загружает его в RAM и передает поток управления в этот загруженный код. Иначе код загрузки подключается к USB и ждет от драйвера хоста загрузки приложения firmware. Как только загрузка firmware завершена, код загрузки также передает поток выполнения в загруженное firmware.
Далее описан пошаговый процесс работы кода загрузки.
• Проверка, находится ли код загрузки в режиме приложения. Это режим, в который происходит вход после загрузки кода приложения через микросхему I2C или через USB. Если код загрузки находится в режиме приложения, то код загрузки передает управление приложению firmware. Иначе код загрузки продолжает выполняться.
• Инициализация всех установок по умолчанию. — Вызов подпрограммы CopyDefaultSettings(). Установка скорости I2C на 400 кГц. — Вызов подпрограммы UsbDataInitialization(). Установка bFUNADR = 0, отключение от USB (bUSBCTL = 0x00), обработка события USB reset, копирование в RAM предопределенных дескрипторов устройства, конфигурации, строк. Запрет всех конечных точек и разрешение прерываний USB (SETUP, RSTR, SUSR и RESR).
• Если найдена допустимая сигнатура, то из I2C EEPROM загружаются кастомизированные дескрипторы устройства, конфигурации и строк. — Выполняется обработка каждого блока дескриптора из I2C, пока не будет найден конец заголовка. Если блок дескриптора содержит дескрипторы устройства, конфигурации или строки, то код загрузки перезаписывает ими дескрипторы по умолчанию. Если блок дескриптора содержит бинарный код firmware, то код загрузки устанавливает указатель заголовка на начала бинарного кода firmware в I2C EEPROM. Если блок дескриптора в конце заголовка, то код загрузки останавливает поиск.
• Разрешение глобальных прерываний и прерываний USB, и установка бита соединения в 1. — Глобальные прерывания разрешаются установкой бита 7 (EA) в регистре SIE (см. секцию 9.1.1) на 1. — Разрешение всех внутренних прерываний периферии путем установки бита EX0 в регистре SIE на 1. — Подключение к USB установкой бита 7 (CONT) в регистре USBCNTL (см. секцию 5.4) на 1.
• Ожидание любых событий прерывания, пока не поступит пакет настройки (setup packet) Get DEVICE DESCRIPTOR. — Прерывание приостановки (Suspend interrupt). устанавливается бит ожидания (idle) в регистре PCON MCU, и происходит вход в режим приостановки. Событие USB reset выводит микроконтроллер из режима сна. — Прерывание возобновления (Resume interrupt). Код загрузки пробуждается и ожидает новых запросов USB. — Прерывание сброса (Reset interrupt). Вызов подпрограммы UsbReset(). — Прерывание настройки (Setup interrupt). Код загрузки обрабатывает этот запрос. — Запрос перезагрузки USB (USB reboot request). Происходит отключение от USB очисткой бита 7 (CONT) в регистре USBCTL и рестарт по адресу 0x0000.
• Загрузка firmware из I2C EEPROM — Запрет глобальных прерываний очисткой бита 7 (EA) в регистре SIE. — Загрузка firmware в пространство XDATA, если код доступен в I2C EEPROM.
• Загрузка firmware из USB. — Если не найдено firmware в I2C EEPROM, то хост USB загружает firmware через конечную точку output 1. — В первом пакете данных, поступившим в output endpoint 1 драйвер USB хоста добавляет 3 байта перед firmware приложения в двоичном формате. Эти три байта содержат LSB и MSB, показывающие размер, за которыми идет арифметическая контрольная сумма двоичного кода firmware.
• Передача управления в код приложения firmware. — Обновление конфигурации USB и номера интерфейса. — Передача управления потоком выполнения кода в приложение firmware.
• Приложение firmware — Либо отключает устройство от USB, либо продолжает отвечать на запросы USB.
11.3. Установки по умолчанию для кода загрузки
Код загрузки имеет свои собственные предварительно заданные дескрипторы устройства, конфигурации и строк. Эти дескрипторы по умолчанию должны использоваться только для экспериментов. Они не должны использоваться в конечных продуктах.
11.3.1. Дескриптор устройства (Device Descriptor)
Дескриптор устройства предоставляет версию USB, которую поддерживает устройство, класс устройства (device class), протокол, идентификатор вендора (VID), идентификатор продукта (PID), строки описания и количество возможных конфигураций. Операционная система (Windows, MAC или Linux) читает этот дескриптор для того, чтобы принять решение о выборе драйвера для устройства, который должен использоваться для обмена с устройством.
Код загрузки использует 0x0451 (Texas Instruments) в качестве ID вендора (VID) и 0x3410 (TUSB3410) в качестве ID продукта (PID). Он также поддерживает три разных строки и одну конфигурацию. В таблице 11-1 показан дескриптор устройства.
Дескриптор конфигурации предоставляет количество интерфейсов, которое поддерживает конфигурация устройства, конфигурация системы питания, и текущее энергопотребление.
Код загрузки декларирует только один интерфейс, работающий в режиме питания от шины USB (bus-powered). Энергопотребление во время загрузки задано до 100 mA. В таблице 11-2 показан дескриптор устройства.
Таблица 11-2. Дескриптор конфигурации
D7: зарезервировано (установлено в 1) D6: имеет собственное питание D5: поддерживается удаленное пробуждение (remote wakeup) D4-0: зарезервировано (сброшено в 0).
Дескриптор интерфейса предоставляет количество поддерживаемых на этом интерфейсе конечных точек, а также класс интерфейса, подкласс и протокол. код загрузки поддерживает только одну конечную точку и использует свой собственный класс. В таблице 11-3 показан дескриптор интерфейса.
Таблица 11-3. Дескриптор интерфейса
7
bInterfaceProtocol
1
0
8
iInterface
1
0
Индекс строкового дескриптора, описывающего этот интерфейс.
11.3.4. Дескриптор конечной точки (Endpoint Descriptor)
Дескриптор конечной точки предоставляет тип и размер канала обмена (communication pipe), поддерживаемый этой конечной точкой. код загрузки поддерживает только одну конечную точку output размеров в 64 байта в дополнение к управляющей конечной точке control endpoint 0 (управляющая конечная точка обязательно должна присутствовать для всех устройств USB). В таблице 11-4 показан дескриптор конечной точки.
Таблица 11-3. Дескриптор конечной точки
11.3.5. Строковый дескриптор (String Descriptor)
Строковый дескриптор содержит текстовые данные в формате unicode. Он используется для того, чтобы показать имя производителя, модель продукта и серийный номер в формате, удобном для прочтения человеком. Код загрузки поддерживает 3 строки. Первая строка содержит имя производителя. Вторая строка содержит имя продукта. Третья строка содержит серийный номер. В таблице 11-5 показаны строковые дескрипторы.
Таблица 11-5. Строковый дескриптор
11.4. Формат заголовка внешнего устройства I2C
Правильный заголовок должен содержать сигнатуру продукта и один или большее количество блоков дескриптора. Блок дескриптора содержит префикс дескриптора и его содержимое. В префиксе дескриптора представлены тип данных, размер и контрольная сумма, описывающие содержимое блока дескриптора. Содержимое дескриптора несет необходимую информацию для процесса загрузки.
Подпрограмма обработки заголовка всегда считает от первого блока дескриптора, пока не будет достигнут требуемый номер блока. Заголовок читается в префиксе дескриптора с размером 4 байта. Этот префикс содержит тип блока, размер и контрольную сумму. Например, если код загрузки хочет найти позицию третьего блока дескриптора, то он читает первый префикс дескриптора, вычисляет позицию следующего дескриптора основываясь на размере блока, считанного из префикса. Затем код загрузки делает те же самые вычисления для того, чтобы найти позицию третьего блока дескриптора.
11.4.1. Сигнатура продукта (Product Signature)
Сигнатура продукта должна быть сохранена в первые 2 байта микросхемы памяти I2C. Эти 2 байта должны соответствовать номеру продукта. Порядок этих байт должен быть таким, что сначала идет LSB, и за ним идет MSB. Например, для TUSB3410 эта сигнатура 0x3410. Таким образом, первый байт должен быть 0x10, и второй байт должен быть 0x34.
Код загрузки TUSB3410 ищет первые 2 байта в устройстве памяти I2C. Если первые 2 байта не равны 0x10 и 0x34, то код загрузки прекращает обработку заголовка.
11.4.2. Блок дескриптора (Descriptor Block)
Каждый блок дескриптора содержит префикс и содержимое. Размер префикса всегда 4 байта. Он содержит тип данных, размер и контрольную сумму, по которой проверяется целостность данных. Содержимое дескриптора включает в себя информацию, указанную в префиксе. Размер может быть от 1 до 65535 байт. Следующий дескриптор находится сразу за предыдущим дескриптором. Если больше нет дескрипторов, то дополнительный нулевой байт должен показывать конец заголовка.
11.4.2.1. Префикс дескриптора (Descriptor Prefix)
Первый байт префикса дескриптора показывает тип данных. Он говорит коду загрузки, как обработать данные содержимого дескриптора. Второй и третий байты дают размер содержимого дескриптора. Второй байт LSB, третий байт MSB. Последний байт несет 8-битную арифметическую контрольную сумму содержимого дескриптора.
В содержимом дескриптора может храниться информация USB, firmware или другие типы данных. Размер содержимого дескриптора должен быть от 1 до 65535 байт.
11.5. Контрольная сумма в блоке дескриптора
Каждый префикс дескриптора содержит одну контрольную сумму, вычисленную от содержимого дескриптора. Если контрольная сумма не совпала, код загрузки просто игнорирует блок дескриптора.
11.6. Примеры заголовка
Заголовок может быть указан различными способами. Следующие дескрипторы показывают примеры формата заголовка и поддерживаемых блоков дескриптора.
11.6.1. Блок дескриптора, поддерживаемый кодом загрузки TUSB3410
Код загрузки TUSB3410 поддерживает следующие блоки дескриптора.
• Дескриптор устройства USB (USB Device Descriptor) • Дескриптор конфигурации USB (USB Configuration Descriptor) • Строковый дескриптор USB (USB String Descriptor) • Двоичный код Firmware 1 • Автоматически выполняемый двоичный код (Autoexec Binary) Firmware 2
1. Двоичный код firmware загружается, когда код загрузки принимает от хоста первый полученный запрос дескриптора устройства (device descriptor request). Загрузка firmware либо должна продолжаться на стадии данных, либо должно произойти отключение от USB и переподключение к USB в качестве нового устройства. 2. Код загрузки загружает этот код autoexec binary firmware перед тем, как подключиться к USB. Код firmware должен подключиться к USB как только будет загружен.
11.6.2. Заголовок дескриптора USB (USB Descriptor Header)
В таблице 11-6 показаны дескрипторы устройства, конфигурации, строк для кода загрузки. Последний нулевой байт показывает конец заголовка.
Таблица 11-6. Заголовок дескрипторов USB
D7: зарезервировано (установлено в 1) D6: устройство имеет собственное питание D5: поддерживается удаленное пробуждение (remote wakeup) D4..D0: зарезервировано (сброшено в 0)
Устройство потребляет 100 mA.
Размер этого дескриптора в байтах.
Номер интерфейса. Значение, основанное на нуле, показывает значение индекса в массиве конкурирующих интерфейсов.
Значение, используемое для выбора альтернативной установки для интерфейса, указанного в предыдущем поле.
Количество конечных точек, используемое этим интерфейсом (не считая конечную точку 0). Если здесь указано значение 0, то интерфейс использует только управляющий канал по умолчанию (default control pipe).
Класс интерфейса специфичен для вендора.
Нет подклассов интерфейса.
Нет протоколов для интерфейса.
Индекс строкового дескриптора, описывающего этот интерфейс.
Размер дескриптора в байтах.
Биты 3..0: номер конечной точки. Бит 7: направление (0 OUT, 1 IN).
Биты 1..0: тип трансфера (10 Bulk, 11 Interrupt)
Максимальный размер пакета этой конечной точки, доступный для приема или передачи, который можно использовать при выборе этой конфигурации (64 байта).
Интервал опроса конечной точки для трансферов данных, указанный в миллисекундах.
Строковый дескриптор USB
11.6.3. Autoexec Binary Firmware
Если для каких-то целей приложение требует загрузить firmware до установки соединения USB, то может использоваться следующий заголовок. Код загрузки загружает firmware и передает управление в firmware напрямую, без подключения по USB. Однако по требованиям стандарта USB любое устройство USB должно подключиться к шине и ответить хосту в течение первых 100 мс. Таким образом, если время загрузки превышает 100 мс, блоки дескриптора USB заголовка скорости должны быть добавлены перед автозапуском двоичного кода приложения (autoexec binary firmware). В таблице 11-7 показан пример заголовка autoexec binary firmware.
Таблица 11-7. Autoexec Binary Firmware
Смещение
Тип
Размер
Значение
Описание
0x0000
Signature0
1
0x10
FUNCTION_PID_L
0x0001
Signature1
1
0x34
FUNCTION_PID_H
0x0002
Тип данных
1
0x07
Autoexec Binary Firmware
0x0003
Размер данных (младший байт)
1
0x67
Код приложения, к примеру, занимает 0x4567 байт.
0x0004
Размер данных (старший байт)
1
0x45
0x0005
Контрольная сумма
1
0xNN
Контрольная сумма данных кода firmware, которые идут далее.
0x0006
Program
0x4567
Двоичный код приложения firmware.
0x456D
Тип данных
1
0x00
Конец заголовка.
11.7. Формат заголовка загрузки драйвера хоста USB
Если firmware загружается через USB, то нужен драйвер хоста, который следует формату таблицы 11-8. Драйвер бутлоадера Texas Instruments генерирует подходящий формат. Таким образом, пользователи должны только предоставить двоичный образ приложения firmware для бутлоадера. Если контрольная сумма не совпала, то код загрузки отключается от USB и ждет перед переподключением к USB.
Таблица 11-8. Формат загрузки драйвера хоста
Смещение
Тип
Размер
Значение
Описание
0x0000
Размер firmware (младший байт)
1
0xXX
Размер кода приложения firmware в байтах.
0x0001
Размер firmware (старший байт)
1
0xYY
0x0002
Контрольная сумма
1
0xZZ
Контрольная сумма данных кода firmware, которые идут далее.
0x0003
Program
0xYYXX
Двоичный код приложения firmware.
11.8. Встроенные запросы USB, специфичные для вендора (Vendor Specific USB Requests)
Код загрузки поддерживает несколько запросов USB, специфичных для вендора. Эти запросы предназначены главным образом только для внутреннего тестирования. В нормальной работе эти функции не должны использоваться.
11.8.1. Перезагрузка (Reboot)
Команда перезагрузки принудительно запускает код загрузчика (bootcode).
Старший байт: должен быть 0x00 Младший байт: байт данных для записи
0x00MM
wIndex
Адрес данных
0xNNNN (где NNNN равно числу от 0x0000 до 0xFFFF)
wLength
нет
0x0000
Data
нет
11.8.7. Чтение содержимого внутренней памяти ROM (Internal ROM Memory Read)
Код загрузки (загрузчик, bootcode) возвращает байт по указанному адресу в области boot ROM. Это двоичный код самого загрузчика, так что он читает и возвращает сам себя.
11.9. По каким соображениям разрабатывался код загрузки
11.9.1. Запросы USB
Для каждого запроса USB (USB request), код загрузки выполняет шаги, описанные ниже, чтобы удостовериться, что аппаратура функционирует нормально (упрощенный алгоритм обработчика прерывания на запрос USB).
11.9.1.1. Передачи в ответ на запрос USB (USB Request Transfers)
Запрос USB состоит из 3 типов передач (transfers). Это трансферы control-read-with-data-stage (управляющий запрос чтения со стадией данных), control-write-without-data-stage (управляющий запрос записи без чтения данных) и control-write-with-data-stage (управляющий запрос записи со стадией данных). В каждом трансфере стрелочки показывают прерывания, генерируемые после приема пакета настройки (setup packet), с токенами IN или OUT.
На рисунках 11-1 и 11-2 показан поток данных USB, и как аппаратура (hardware) и программное обеспечение MCU (firmware) отвечают на запросы USB. В таблицах 11-9 и 11-10 показаны ответы кода загрузки на стандартные запросы.
Рис. 11-1. Control Read Transfer (трансфер управляющего чтения)
Таблица 11-9. Ответ кода загрузки на Control Read Transfer
CONTROL READ
Действие в коде загрузки (BOOTCODE)
Получение состояния устройства (get status of device).
Возврат установок питания и удаленного пробуждения (remote wakeup).
Получение состояния интерфейса (get status of interface).
Возврат 2 нулевых байт.
Получение состояния конечной точки (get status of endpoint).
Возврат состояния конечной точки.
Получение дескриптора устройства (get descriptor of device).
Возвращение дескриптора устройства.
Получение дескриптора конфигурации (get descriptor of configuration).
Возврат дескриптора конфигурации.
Получение строкового дескриптора (get descriptor of string).
Возврат строкового дескриптора.
Получение дескриптора интерфейса (get descriptor of interface).
Переход в состояние stall.
Получение дескриптора конечной точки (get descriptor of endpoint).
Переход в состояние stall.
Получение конфигурации (get configuration).
Возвращение значения bConfiguredNumber.
Получение интерфейса (get interface).
Возвращение значения bInterfaceNumber.
Рис. 11-2. Control Write Transfer Without Data Stage (трансфер управляющей записи без стадии данных)
Таблица 11-10. Ответ кода загрузки на Control Write Without Data Stage
CONTROL WRITE WITHOUT DATA STAGE
Действие в коде загрузки (BOOTCODE)
Очистка фичи устройства (clear feature of device).
Переход в состояние stall.
Очистка фичи интерфейса (clear feature of interface).
Переход в состояние stall.
Очистка фичи конечной точки (clear feature of endpoint).
Очистка endpoint stall.
Установка фичи устройства (set feature of device).
Переход в состояние stall.
Установка фичи интерфейса (set feature of interface).
Переход в состояние stall.
Установка фичи конечной точки ( set feature of endpoint).
Перевод конечной точки в состояние stall.
Установка адреса (set address).
Установка адреса устройства.
Установка дескриптора (set descriptor).
Переход в состояние stall.
Установка конфигурации (set configuration).
Установка bConfiguredNumber.
Установка интерфейса (set interface).
Установка bInterfaceNumber.
Фрейм синхронизации (sync. frame).
Переход в состояние stall.
11.9.1.2. Подпрограмма обработки прерывания (Interrupt Handling Routine)
Вектор с более высоким номером имеет более высокий приоритет, чем вектор с меньшим номером. В таблице 11-11 перечислены все прерывания и их источники.
Таблица 11-11. Значения векторов прерывания и их источники
Прерывание статуса UART1 Прерывание статуса модема UART1
Регистр LSR/VECNT
5
2-7
54-5E
Зарезервировано
6 6
0 1
60 62
Прерывание RXF UART1 Прерывание TXE UART1
Регистр LSR/VECNT
6
2-7
64-6E
Зарезервировано
7
0-7
70-7E
Зарезервировано
8 8 8
0 1 2
80 82 84
Прерывание DMA1 Зарезервировано Прерывание DMA3
Регистр DMACSR/VECINT
Регистр DMACSR/VECINT
8
3-7
86-8E
Зарезервировано
9-15
0-7
90-FE
Зарезервировано
11.9.2. Аппаратный сброс, инициируемый программно
Эта возможность может использоваться при обновлении firmware. Как только обновление завершено, приложение firmware отключается от USB на время как минимум 200 мс, чтобы обеспечить выгрузку драйвера операционной системой. Затем firmware разрешает работу сторожевого таймера (watchdog timer, этот таймер по умолчанию разрешен после сброса при включении питания), и входит в бесконечный цикл без сброса сторожевого таймера. Как только истечет таймаут сторожевого таймера (128 мс), он сбросит TUSB3410 так же, как это произошло быт при включении питания. Код загрузки запускается и выполняет последовательность действий при включении питания и загрузке.
11.10. Файлы
Исходный код TUSB3410 Bootcode (SLLC139.zip) можно скачать со страницы описания TUSB3410 на сайте компании Texas Instruments. Просмотрите ссылку Related Software. В скачанном zip-архиве имеются следующие файлы.
12.1. Предельно допустимые эксплуатационные параметры (Absolute Maximum Ratings)
Превышение указанных здесь значений может полностью повредить микросхему. Эти параметры являются для чипа стрессовыми, и не подразумевается реальная эксплуатация микросхемы с этими параметрами или с параметрами, не соответствующими разделу «recommended operating conditions» (рекомендованные условия работы). Кроме того, работа в условиях предельно допустимых параметров может повлиять на надежность работы микросхемы.
12.3. Электрические характеристики
[13. Указания по применению (Application Notes)]
[Упаковка и размеры корпуса]
[Словарик]
Control endpoint конечная точка, которая предназначена для управления и получения данных о состоянии. Эта конечная точка имеется во всех устройствах USB, всегда имеет номер 0, и активно участвует в процедуре энумерации устройства USB.
DMA direct memory access, прямой доступ к памяти без участия программной обработки микроконтроллера.
DMAC DMA controller, контроллер DMA.
endpoint конечная точка, которая физически представляет из себя буфер памяти определенного размера. Обычно размер конечной точки 8, 16, 32, 64, 128 или 256 байт.
CPU узел ядра MCU 8052. Фактически то же самое, что и MCU.
IN, input в контексте конечных точек и транзакций обозначает направление передачи от устройства USB к хосту.
Input endpoint конечная точка, которая предназначена для данных пакета IN, в этом случае байты передаются от устройства USB к хосту.
MCU Microcontroller Unit — микроконтроллер (микросхема, содержащая процессор, память и периферийные устройства). Применительно к TUSB3410 имеется в виду встроенное ядро микроконтроллера 8052.
NAK отрицательный ответ на запрос хоста IN или OUT. Означает для хоста, что данные пока не могут быть переданы.
OEM Original equipment manufacturer — аббревиатура для обозначения чего-либо, имеющего отношение к производству продукта OEM-способом, при котором этот продукт, продающийся розничным покупателям под оригинальным брендом, получается путём сборки типовых комплектующих и/или их кастомизацией. Компанию, которая занимается сборкой конечного продукта, называют OEM-производителем, а компанию, которая поставляет типовые комплектующие, — OEM-поставщиком. OEM – компонентами называется продукт, использующийся как составная часть завершенного продуктового решения.
OUT, output в контексте конечных точек и транзакций обозначает направление передачи от хоста к устройству USB.
Output endpoint конечная точка, которая предназначена для данных пакета OUT, в этом случае байты передаются от хоста к устройству USB.
pullup, pull-up, pull up верхний нагрузочный резистор, подключенный к плюсу источника питания или к выходу буфера состоянием лог. 1. Если pullup относится к каналу USB чипа TUSB3410, то имеется в виду нагрузочный резистор 1.5 кОм, подключенный к сигналу D+. В другом контексте имеется в виду внутренний нагрузочный резистор, который имеется на каждом выводе порта P3, и который может быть подключен или отключен программно.
stall по отношению к USB означает событие ошибки, которое требует вмешательства хоста.