USB–to–COM CP2102 / FT232


Использование адаптера USB–to–COM для подключения

контроллера ЭСУД автомобиля к PC.


Данный материал публикуется впервые, любезно предоставлен для публикации на нашем сайте компанией IC Book Labs и является эксклюзивной собственностью данной компании. Перепечатка без письменного разрешения правообладателя запрещена.


Как известно, для диагностики и перепрограммирования автомобильных систем, в частности ЭСУД, используется диагностическая линия K–Line 12V (ISO 9141), электрически совместимая с последовательным интерфейсом RS232, применяемым в персональных компьютерах. Но, при сопряжении авто и компьютера возникает проблема, связанная с тем, что обмен с автомобильными системами выполняется на скоростях 200 и 10400 бод, которые нетипичны для компьютеров. В предлагаемой статье рассматривается простое решение данной проблемы для адаптеров USB–to–COM с помощью программного обеспечения, штатно поставляемого разработчиками.


Управление скоростью обмена

Скорость обмена для последовательного интерфейса зависит от установленного делителя. Значение делителя определяется содержимым регистра Baud Rate Divisor. Анализ архитектуры контроллера и несложные расчеты показывают, что нет препятствий для использования интересующих нас скоростей в 200 и 10400 бод. Так в чем же проблема?

При написании операционных систем, драйверов и различных прикладных программ обслуживания последовательного интерфейса, в целях упрощения, использовался стандартный, ставший традиционным для персональных компьютеров, ряд скоростей: 300, 600, 1200, … , 115200 бод. Скорости 200 и 10400 бод, которые использует диагностическая линия автомобиля, не входят в этот ряд.


Наша задача — обеспечить поддержку скоростей обмена, которые поддерживают контроллеры FT232 и CP2102, но не поддерживает “классическое” программное обеспечение. Идея заключается в том, чтобы переопределить скорости из стандартного ряда новыми значениями, например, заменить 14400 бод на 10400 бод. После такого переопределения, запрос на включение режима 14400 бод будет приводить к включению режима 10400 бод. Смысл в том, что мы добавляем новую скорость, сохранив интерфейс, совместимый с имеющимся программным обеспечением. В принципе, для подстановки можно использовать любую скорость из заданного ряда.


Переопределение скоростей для контроллера CP2102

Рассмотрим реализацию описанной выше идеи для обеспечения совместимости контроллера USB–to–COM CP2102 с контроллером электронной системы управления двигателем (ЭСУД) автомобиля. Как было сказано выше, для диагностической линии K–Line 12V типичны скорости в 200 и 10400 бод.

К счастью, производитель контроллера CP2102 предусмотрел возможность гибкого управления режимами работы и снабдил свое устройство утилитой для переназначения скоростей обмена, поэтому сегодня нам не понадобятся дизассемблер и отладчик, наши действия будут очень простыми и сведутся к использованию штатной утилиты CP210xBaudRateAliasConfig.exe поставляемой компанией Silicon Labs.

Также отметим, что результатом наших действий будет изменение содержимого таблицы, хранящей значения делителей частоты для поддерживаемых скоростей. Эта таблица находится во внутренней энергонезависимой памяти микросхемы CP2102, поэтому изменения сохранятся при выключении питания или переносе перепрограммированного устройства на другой компьютер. Для большинства применений, такой вариант удобнее, чем, например, внесение изменений в драйвер. Для обеспечения совместимости с диагностической линией автомобиля и программным обеспечением, используемым для контроля состояния ЭСУД, нам необходимо осуществить следующие переопределения: 14400 на 10400 и 300 на 200 бод.

Итак, запускаем утилиту CP210xBaudRateAliasConfig.exe. Появляется окно CP210x Baud Rate Configuration. Если подключено несколько устройств CP2102, в верхней строке Connected Devices необходимо выбрать устройство, которое мы будем перепрограммировать. Если устройства подключались уже после того, как утилита была запущена, следует использовать кнопку Refresh для обновления списка задействованных адаптеров.

Нажимаем кнопку Get Configuration и получаем список поддерживаемых скоростей обмена для выбранного устройства.

  Если используется один USB–to–COM адаптер, список формируется автоматически, если несколько, — то после выбора устройства обязательно следует нажать кнопку Get Configuration, иначе будет визуализироваться таблица, соответствующая не текущему, а ранее выбранному адаптеру!

Левый столбец под символом # означает условный номер скоростного режима. Столбцы High и Low в графе Application Requested Baud Rate Range содержат верхнюю и нижнюю границу диапазона скоростей, ассоциированного с данным режимом. Если запрашиваемый программным обеспечением параметр попадает в этот диапазон, он используется в текущем режиме. Для поддержки скорости, запрашиваемой программным обеспечением, используется режим, в диапазон которого попадает эта скорость. Столбцы Desired и Actual в графе UART Baud Rate показывают скорость обмена, запрограммированную для данного режима. Desired — идеальное значение (обычно из стандартного ряда скоростей). Actual – фактическое значение, которое в силу особенностей схем тактирования контроллера, не всегда равно идеальному.

Дважды щелкаем мышью на строке, соответствующей редактируемому режиму. Вводим требуемое значение скорости обмена — Desired Baud Rate. При этом автоматически обновляется фактическое значение скорости Actual Baud Rate. С точки зрения стандарта последовательного интерфейса, допустимым является отклонение ±3%. Точность установки скорости для контроллера CP2102 удовлетворяет этому требованию. Редактируем строку 19. Исходное значение скорости обмена 14400 бод.

 
Вводим новое значение – 10400 бод, нажимаем OK и переопределение задано!

Редактируем строку 28. Исходное значение скорости обмена 300 бод.

Вводим новое значение – 200 бод, нажимаем OK и переопределение задано.

 

После того, как все изменения внесены, не забываем нажать кнопку Set Configuration в окне CP210x Baud Rate Configuration и проверить, что значения Desired и Actual в редактируемых строках изменились.


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

Дополнительно отметим, что кнопка Advanced позволяет выполнить более тонкую настройку параметров. Для переопределения необходимо установить флажок Override Recommended.

Параметры Prescaler (коэффициент деления для предварительного делителя частоты) и Reload (значение для загрузки в счетчик основного делителя частоты) определяют скорость обмена Baud Rate в бодах в соответствии со следующей формулой:

Baud Rate = (24.000.000/Prescaler) / (65536—Reload)

Отметим, что контроллер CP2102 поддерживает скорости до 1.000.000 бод в режиме 7 и 8–битных данных и 921.600 бод в режиме 5 и 6–битных данных, для полнодуплексного обмена. При установке скорости, превышающей указанные ограничения, возможны сбои в работе контроллера.

Управление таймаутом при обмене данными по USB осуществляется редактированием параметра USB Receive Timeout. Значение таймаута в секундах определяется по формуле:


Timeout = (65536 – Reload) / 500.000

Указанный таймаут используется при передаче по USB в компьютер данных, принятых по последовательному интерфейсу. Он определяет промежуток времени, в течение которого контроллер ожидает входных данных. Если в течение заданного промежутка данные не поступают, контроллер завершает передачу по USB. Типовое значение таймаута – 1 ms. Управление таймаутом позволяет устанавливать компромисс при достижении двух взаимно противоречащих критериев:

1. Минимизация задержки обслуживания USB устройства компьютером, что в данном случае дает увеличение скорости реакции диагностической программы на события в диагностируемом объекте.

2. Минимизация загрузки компьютера операциями передачи пустых пакетов данных по USB, имеющими место при отсутствии поступления данных по последовательному интерфейсу. От этого зависит общая производительность.

Чем больше таймаут, тем дольше устройство “не засыпает” при отсутствии данных, то есть для улучшения первого критерия, таймаут следует увеличивать, а для второго — уменьшать.


Переопределение скоростей для контроллера FT232


Рассмотрим решение подобной задачи для одного из конкурирующих продуктов – контроллера FT232 компании FTDI. В отличие от выше приведенного примера, здесь нам придется редактировать файл конфигурации драйвера последовательного порта FTDIPORT.INF. Структура этого файла описана в [3], процедура редактирования полей, устанавливающих скорость обмена для последовательного порта, описана в [4]. Поэтому, в целях компактности изложения, в нашем описании внимание акцентировано только на тех параметрах, которые необходимо изменять. Также отметим, что данный пример соответствует одному из нескольких вариантов представления параметров, все возможные варианты перечислены в [3], [4].

Находим в файле FTDIPORT.INF следующую запись:


[FtdiPort232.NT.HW.AddReg]
HKR,,"ConfigData",1,01,00,3F,3F,10,27,88,13,C4,09,E2,04,71,02,38,41,9c,80,4E,C0,34,00,1A,00,0D,00,06,40,03,80,00,00,d0,80

Последовательность, начиная с шестого по счету параметра, содержит пары байтов, каждая из которых задает коэффициент деления частоты для делителя, определяющего скорость обмена по последовательному интерфейсу. Каждая пара соответствует определенной скорости. Рассмотрим первую пару параметров 10h, 27h.

1. Так как два смежных байта 16–битного слова записаны начиная с младшего байта, для получения 16–битного числа, их нужно обменять местами: 10, 27 соответствует 2710h, h — означает, что число записано в шестнадцатеричной системе счисления.

2. Переводим 16–ричное число 2710h в двоичную систему.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0
2 7 1 0

3. Интерпретируем полученное двоичное значение. Два старших бита 16–битного числа, а именно биты 15, 14 определяют дробную часть коэффициента деления частоты согласно следующей таблице:

Бит 15 Бит 14  Дробная часть делителя
0 0 0
0 1 0.5
1 0 0.25
1 1 0.125

В нашем случае дробная часть делителя равна нулю. Битовое поле 13–0 16–битного числа численно равно целой части делителя, переведем из шестнадцатеричной системы в десятичную 2710h = 10.000.

4. Тактовая частота на входе делителя равна 3 MHz = 3.000.000 Hz. Скорость обмена в бодах (Baud Rate) будет равна входной частоте делителя, разделенной на коэффициент деления.

Baud Rate = 3.000.000 / 10.000 = 300 бод.


Таким образом, первая пара значений задает скорость 300 бод. Пусть нам необходимо переопределить эту скорость на 10400 бод. Вычислим требуемый коэффициент деления (Divisor):

Divisor = 3.000.000 / 10.400 = 288,46

Ближайшее доступное значение 288,5. Нам требуется задать целую часть делителя равной 288, дробную равной 0,5. Согласно таблице 2, биты 15,14 будут равны 01b, b — означает, что число записано в двоичной системе счисления. Переведем 288 в шестнадцатеричную систему: 288=120h. Это значение необходимо поместить в битовое поле 13–0. Объединяем биты 15–14 и 13–0, получим 4120h.

Для переопределения скорости 300 бод на 10400 бод запись должна иметь вид:

[FtdiPort232.NT.HW.AddReg]
HKR,,"ConfigData",1,01,00,3F,3F,20,41,88,13,C4,09,E2,04,71,02,38,41,9c,80,4E,C0,34,00,1A,00,0D,00,06,40,03,80,00,00,d0,80


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

 


Источники информации.

1. Описание адаптера АПМ–3 / USB 

2. CP210x Baud Rate Support, Application Note AN205

3. Application Note AN_107. Advanced Driver Options

4. Application Note AN_120. Aliasing VCP Baud Rates

5. М. Гук. Аппаратные средства IBM PC. Энциклопедия. Санкт–Петербург, издательство “Питер” 2006.

6. Переходник USB – COM

 

©IC Book Labs  ©CHIPTUNER.RU 2010

 Магазин     Форум     Автосервисы     FAQ     Обратная связь   
Чип тюнинг и диагностика впрыска © SIM 2001 - 2017 Перепечатка материалов без согласия автора запрещена.
Разработка студии FireSite