Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > app > Atmel > Микроконтроллеры

реклама

 




Мероприятия:




Рекомендации по переходу с RS-232 на USB

Источники

  • Технические требования к универсальной последовательной шине USB, версия 2.0.
  • Определение класса коммуникационного устройства (CDC) универсальной последовательной шины, версия 1.1.
  • Демонстрационная программа класса коммуникационного устройства USB.

Сокращения

  • USB – универсальная последовательная шина
  • CDC – класс коммуникационного устройства
  • ACM – абстрактная модель управления
  • VID – идентификатор производителя
  • PID – идентификатор продукта

Введение

В компьютерном мире наблюдается тенденция исчезновения COM-портов особенно среди портативных компьютеров. На смену им приходит USB-связь. Однако большинство приложений продолжают использовать стандарт RS-232. В этом случае на помощь может прийти одно решение, которое позволяет использовать USB как порт RS-232. Можно выделить следующие преимущества такого решения:

  • Нет необходимости изменять программу на персональном компьютере
  • Несложные программные и аппаратные изменения во внешнем устройстве

Данным документом преследуется две цели:

  1. Описание перехода с RS-232 на USB в программе микроконтроллера с использованием библиотеки Atmel USB RS232 виртуального COM-порта.
  2. Описание методики построения моста USB <-> RS-232 с использованием библиотеки Atmel.

Обзор

Многие приложения используют коммуникационный порт RS-232 для связи между компьютером и внешним устройством.


Рисунок 1 – Исходное приложение

Переход на использование USB-порта характеризуется следующими преимуществами:

  • USB присутствует на всех новых компьютерах, а RS-232 уже нет
  • Конечное приложение может использовать гибкость USB: буферизация данных, отсутствие потерь данных, автоматическое управление потоком данных и др.
  • USB позволяет запитать подключаемое устройство

Многие из этих преимуществ станут доступными при переключении с RS-232 на USB. Но при этом также целью выполнения данного переключения являются минимальные затраты времени и сил.

Архитектура программного обеспечения

Целью реализации виртуального COM-порта является переход с реальной УАПП-системы к УАПП/USB-системе:

Данная архитектура требует очень немного модификаций.

Со стороны ПК не требуется выполнение каких-либо изменений! Доступ к USB-порту происходит через драйвер COM-порта, поэтому, нет необходимости изменять имеющуюся управляющую программу для компьютера.

Со стороны приложения драйвер УАПП необходимо заменить на драйверы УАПП USB. В этом случае вместо вызова функций УАПП необходимо вызывать УАПП-USB функции.

Класс USB CDC

В данном документе описывается подход для реализации класса коммуникационного устройства (CDC) USB, как ISDN-модемов, виртуальных COM-портов и т.д. Более подробная информация по данному классу может быть найдена на www.usb.org .

В целях соответствия COM-порту USB-устройство объявляет 2 интерфейса:

  • Модель связи абстрактного управления с одной входной точкой прерывания
  • Абстрактная модель управления данными с одной поточной входящей и одной поточной выходящей конечными точками

Загрузка драйвера CDC под Windows®

Класс CDC поддерживается всеми версиями Windows, начиная с Windows 98SE до Windows XP.

После подключения нового USB-устройства Windows проверяет все имеющиеся INF-файлы для загрузки соответствующего драйвера. INF-файл содержит идентификационные данные о производителе и продукте или определение класса USB. Если идентификационные данные или определение класса USB подключенного USB-устройства совпадает с одним из INF-файлов, то Windows загрузит драйвер описанный в этом файле.

Т.к. Microsoft не поддерживает стандартный INF-файл для CDC-драйвера, то Atmel предоставляет INF-файл, который позволяет загрузить этот драйвер под ОС Windows 2000 и Windows XP. После первого подключения пользователь должен указать данный INF-файл, чтобы операционная система определила какой драйвер необходимо загрузить.

Производители USB-продукции могут указывать собственные идентификационные данные (VID – код производителя и PID – код продукции). Для этого необходимо отредактировать данные значения в самом USB-устройстве(config.h) и в INF-файле (см. пример ниже).

Пример INF-файла

	
; Установочный файл под Windows 2000 и XP для AT89C5131
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%ATMEL%
LayoutFile=layout.inf
DriverVer=10/15/1999,5.0.2153.1
[Manufacturer]
%ATMEL%=ATMEL
[ATMEL]
%ATMEL_CDC%=Reader, USB\VID_03EB&PID_2009
[Reader_Install.NTx86]
;Windows2000
[DestinationDirs]
DefaultDestDir=12
Reader.NT.Copy=12
[Reader.NT]
CopyFiles=Reader.NT.Copy
AddReg=Reader.NT.AddReg
[Reader.NT.Copy]
usbser.sys
[Reader.NT.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[Reader.NT.Services]
AddService = usbser, 0x00000002, Service_Inst
[Service_Inst]
DisplayName = %Serial.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = Base
[Strings]
ATMEL = "ATMEL, Inc."
ATMEL_CDC = "AT89C5131 CDC USB to UART"
Serial.SvcDesc = "USB Serial emulation driver"

Библиотека УАПП USB

Элементарные функции

uart_usb_test_hit() bit uart_usb_test_hit (void);
Проверяет принятие хотя бы одной кодовой посылки.
uart_usb_getchar() char uart_usb_getchar (void);
Возвращает принятый байт в буфере FIFO конечной точки (OUT), если в буфере FIFO имеется хотя бы один байт. Если в стеке нет данных, то данная функция ожидает получение новых данных через USB-порт.
uart_usb_putchar() char uart_usb_putchar (char);
Записывает байт в буфер FIFO конечной точки (IN). Если данная конечная точка заполняется, то данная функция отправляет весь буфер FIFO главному.
uart_usb_tx_ready() bit uart_usb_tx_ready (void);
Проверяет возможность записи байта в буфер FIFO конечной точки (IN).
uart_usb_flush() bit uart_usb_flush (void);
Если в буфере FIFO конечной точки (IN) имеются данные, то данная функция отправляет их. Использование этой функции предотвращает ожидание заполнения буфера FIFO конечной точки (IN) перед отправлением главному (хосту).

Пример реализации преобразователя USB в RS232

Целью данного примера является реализация очень простого преобразователя USB <-> RS-232:

Прим.: В данном примере не может быть изменена конфигурация УАПП.

Архитектура программы внешнего устройства:

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

	
if (uart_test_hit())
{ buff[uart_usb_index++]=uart_getchar();
if (uart_usb_tx_ready())
{ for (j=0;j<uart_usb_index;j++) {uart_usb_putchar (buff[j]); }
uart_usb_index=0;
}
}
if (Uart_tx_ready())
{ if (uart_usb_test_hit()) { uart_putchar(uart_usb_getchar()); } }

Пример передачи сообщения "Hello World"

Если в файле config.h определено HELLO_WORLD_DEMO, то стандартные функции STDIO относятся к USB, а не к УАПП. В программе можно использовать непосредственно функцию “printf()”, например, для записи в USB-порт. Сообщение “HELLO WORLD” непрерывно отправляется, если нажать на кнопку INT0 на демонстрационной плате AT89C5131.

Посылка, отправленная в AT89C5131 через виртуальный COM-порт, отображается на экране.

	
if (P3_2 == 0) { printf ("Hello World\r\n"); }
if (test_hit()) { putchar (_getkey()); }

Документация:

  84 Kb Engl Исходный документ
  96 Kb Engl Примеры программ
  Rus AT89STK-05 - Starter Kit
  Rus Интерфейс USB





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники