Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Com порт и нестандартные скорости?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
The Fresh
Я так понял, что настраивть мой USB пролифик на PL2303 бесполезно. Можно ли это сделать на PC(ноут) с штатными портами, если нет, то существует ли какая нибудь возможность это сделать. Спасибо.
zltigo
Цитата(The Fresh @ Dec 27 2006, 17:41) *
Я так понял, что настраивть мой USB пролифик на PL2303 бесполезно.

Отчего такой диагноз?
Цитата
Можно ли это сделать на PC(ноут) с штатными портами, если нет, то существует ли какая нибудь возможность это сделать.

А как у Вас "не получилось"? Настраиваются в пределах сетки которую может обеспечить делитель UART. Если Вы вдруг захотели 60000 получить, то получите вместо этого 115200, ибо возможны только
два варианта 115200 - делитель на 1 и следующая 576000 - делитель на 2. На более низких скоростях
вариантов естественно побольше.
_3m
Цитата(The Fresh @ Dec 27 2006, 18:41) *
Я так понял, что настраивть мой USB пролифик на PL2303 бесполезно. Можно ли это сделать на PC(ноут) с штатными портами, если нет, то существует ли какая нибудь возможность это сделать. Спасибо.

Вы напрасно списали PL2303 в утиль. Как оказалось, он умеет работать на любой скорости cheers.gif
Обнаружено это было на телесистемах: Туплю не могу вывести формулу таблицы скоростей PL2303
Итоговая дока лежит тут
The Fresh
Используя одну комуникационную программу для связи с авто заметил(при помощи прослушивалки ком порта), что программа пытаеться забить нестандартную скорость SETbaudrate 28 A0 - 10400(реально байты стоят наооборот), но тутже при чтении настройки порта GETbaudrate выдает 25 80 -9600 - это при помощи USB конвертора. Попробовал на PC с штатным портом и после SETbaudrate 28 A0 GETbaudrate выдает 28 A0. Отсюда сделал вывод что в первом случае настройки не принялись, а во втором да. И вероятно поэтому не смог законектиться с авто.
The Fresh
Смотрел на форуме телесистем, так и не понял что к чему. Пробовал записывать их примеры но дополнительные скорости нигде не узрел, да и скорости у них бешенные, а мне надо 10400. Объясните глупышу smile.gif.
_3m
Цитата(The Fresh @ Dec 28 2006, 20:05) *
Смотрел на форуме телесистем, так и не понял что к чему. Пробовал записывать их примеры но дополнительные скорости нигде не узрел, да и скорости у них бешенные, а мне надо 10400. Объясните глупышу smile.gif.

На телесистемах был рабочий процесс.
Читайте документ PL2303_extBaudrate.rtf - что там непонятно?
The Fresh
Не могу скачать этот .rtf точнее скачивается вот этот файл PL2303_extBaudrate.rtf.zip. Разархивировать бесполезно - это не файл архива, убрал расширение zip, открыл как .rtf а том копия той страницы с которой собсно скачивал т.е. Рапида этого. Чтото делаю неправильно при скачивании и если не затруднит может скинете на email back1981@mail.ru. Заранее спасибо.
_3m
Цитата(The Fresh @ Dec 29 2006, 11:06) *
Не могу скачать этот .rtf точнее скачивается вот этот файл PL2303_extBaudrate.rtf.zip. Разархивировать бесполезно - это не файл архива, убрал расширение zip, открыл как .rtf а том копия той страницы с которой собсно скачивал т.е. Рапида этого. Чтото делаю неправильно при скачивании и если не затруднит может скинете на email back1981@mail.ru. Заранее спасибо.

Отправил.
С рапиды действительно неудобно скачивать, но у меня файл приходит нормальный.
The Fresh
Спасибо. Буду экспериментировать.
The Fresh
2 _3m
Сделал вроде все правильно поставил прескалер 6 (4096) основной делитель 9. В реестр сделал запись ExtBaudrate ----10472,2147486729(т.е. 0x8000 0C09)-расчитал на 10400. Но скорость не схватывается в программе, пытается забить 10472 а при чтении настроек тутже выдает 9600.
Может версия дров нужна определенная или еще какие нюансы?Да кстати данная скорость где нибудь визуально отображается?
_3m
Цитата(The Fresh @ Dec 30 2006, 10:53) *
2 _3m
Сделал вроде все правильно поставил прескалер 6 (4096) основной делитель 9. В реестр сделал запись ExtBaudrate ----10472,2147486729(т.е. 0x8000 0C09)-расчитал на 10400. Но скорость не схватывается в программе, пытается забить 10472 а при чтении настроек тутже выдает 9600.
Может версия дров нужна определенная или еще какие нюансы?Да кстати данная скорость где нибудь визуально отображается?

0x8000 0c09 действительно не работает.
работающий делитель для 10400 - 0x8000 0890 , т.е в реестр записывается "10400,2147485840".
Я поэкспериментировал с разными делителсями, при прескалере 6 (4096) основной делитель не должен быть меньше 16 (0x10), если меньше - на выходе получается полный бред (видимо у PLL и делителей вообще крышу сносит). Кроме того, чем меньше величина основного делителя, тем больше джиттер на выходе UART.
Думаю, что стоит начинать с минимальных значений прескалера чтобы основной делитель был как можно больше.
Все это надо контролировать осциллографом, так как расчет - это математическая абстракция, а чип работает как-то хитро и точных данных о делителях PL2303 нигде нет.

После изменения в реестре обязательно нужно передернуть usb шнурок с pl2303 иначе изменения не вступят в силу.
Дополнительные скорости нигде не отображаются, но если скорость установилась, она возвращаются в структуре DCB возвращаемой при вызове GetCommState.
Значение скорости в ExtBaudrate должно точно совпадать со скоростью, которую устанавливает программа, например если в реестре определена дополнительная скорость 10400, а программа пытается установить 10472, то работать не будет - драйвер pl2303 "не увидит" 10472 и подставит вместо этого ближайшую стандартную - 9600.

У меня драйвер PL2303 версии 2.0.2.1 от 25.07.2005, ОС - XP sp2 eng.
The Fresh
Почему то не работает и упорно ставит вместо 10400 скорость 9600. Поставил версию дров такуюже, выставил в реестре настройки(ExtBaudrate тип string 10400,2147485840), поставил сервис пак2,взял другую прогу, которая ставит скорость 10400 и все равно getbaudrate возвращает 9600. Испытывал на двух разных шнурах один USB-COM, другой от мобилки. А у Вас эта скорость нормально ставится? Может потестите на моей проге?
The Fresh
Если не секрет откуда такая базовая частота 383385600Hz, извините за ламерский вопрос, но у меня на плате шнура на осциляторе 12 000 М написано.
_3m
Цитата(The Fresh @ Dec 30 2006, 19:10) *
Если не секрет откуда такая базовая частота 383385600Hz, извините за ламерский вопрос, но у меня на плате шнура на осциляторе 12 000 М написано.

Там внутрях PLL. Кроме того это частота условная для расчетов. Не факт, что в чипе она имеется в чистом виде, скорее всего код перскалера управляет частотй PLL.
Давайте исходник проги которая не работает (тот его кусок, где устанавливается скорость) - только так можно разобраться.
У меня смена скорости производится так:
Код
{
DCB* dcb;
/* инициализация DCB опущена */
dcb->BaudRate=10400;   // задаем скорость
SetCommState(port,dcb);
Sleep(20);
/* проверка */
{
  DCB* dcb2;
  dcb2=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB));
  dcb2->DCBlength=sizeof(DCB);
  GetCommState(port,dcb2);
  cout << "\ndcb2.BaudRate=" << dcb2->BaudRate;
  HeapFree(GetProcessHeap(),0,dcb2);
}
}
The Fresh
Дело в том, что прога не моя и откомпиленная. Если логически рассуждать, то в обычном PC эта скорость 10400 нормально устанавливается прогой , теб более программная реализация не отличается применяешь ли ты штатный порт или переходник. Мое мнение что дело в настройках и почему-то они не срабатывают. Я могу выслать этот софт весит он 400 килов. В кратце там вверху есть кнопочки с моделями контроллеров те которые на М начинаются и работают на этой злосчатной частоте. При переключении между блочками инициализируется порт и считывает парметры Getbaurates(это при помощи шпиона ком портов HDD serial port ) затем забивает setbaudrates. переключая блочки туда обратно у меня на Getbaudrates, т.е. предыдущая скорость всегда появляется 9600, а не 10400. На PC после первого SETBaudrates 10400 дальнейшие getbaudrates выдают 10400. Вышлю на мыло откуда пришел файл про настройки pl2303. Заранее спасибо.
_3m
Цитата(The Fresh @ Dec 30 2006, 20:57) *
...
Вышлю на мыло откуда пришел файл про настройки pl2303. Заранее спасибо.

Программу получил. (у меня есть такая же, но я ей не пользовался).
Проверил. Сигнал контролировал осциллографом, так как эбу подключенного к компу под рукой нет.
в реестр занес дополнительную скорость 10400, сигнал контролировал осциллографом - скорость ориентировчно 10400. Для чистоты экспримента задал делитель для 10400 как для 2000000 - получил на выходе 2mbps сразу при запуске программы в режиме MP7.0.
Итог: скорость устанавливается.

Что-то вы неправильно делаете.
Значение заносите в нужную ветку реестра?
Вот что у меня:
Нажмите для просмотра прикрепленного файла
The Fresh
Да все именно так делал. Единственное различие вижу в том что именя ХР русский, а во остальном тут просто ошибиться практически негде. Попробую аглицкий ХР поставить.
The Fresh
Установка ENG XP не помогла, мало того пробовал шпионом просматривать реестр. Если передернуть шнурок, то драйвер считывает строку из реестра ExtBaudrate нормально, но при попытке забить скорость он таки "забивает" на нее и подставляет ближайшую не зависимо 10400 - 9600, 1000000 - 921600. И вообще если скорость допустим принялась это можно как нибудь проследить програмно?
_3m
Цитата(The Fresh @ Jan 6 2007, 11:51) *
Установка ENG XP не помогла, мало того пробовал шпионом просматривать реестр. Если передернуть шнурок, то драйвер считывает строку из реестра ExtBaudrate нормально, но при попытке забить скорость он таки "забивает" на нее и подставляет ближайшую не зависимо 10400 - 9600, 1000000 - 921600. И вообще если скорость допустим принялась это можно как нибудь проследить програмно?

Проверить просто - считать DCB функцией GetCommState и посмотреть поле BaudRate. Там будет фактически установленная скорость.

PS. У вас в переходнике на pl2303 случайно seeprom 24сxx не стоит? В моих переходниках ее нет, может в этом дело?
The Fresh
Нет таких микросхем, на USB - COM там микруха конвертации уровней ADM, на телефонном почти голый там осцил и все.

Кусок проги вот такой

ZeroMemory(@FOverWrite, SizeOf(FOverWrite));
FPortName := 'COM' + IntToStr(PortNumber);

{Open port}
FPort := CreateFile(PChar(PortName),
GENERIC_READ or GENERIC_WRITE, 0, nil,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

if FPort = INVALID_HANDLE_VALUE then
Begin
raise EComPortError.Create('Îøèáêà îòêðûòèÿ ïîðòà ' + PortName);

end;

try
{Set port state}
if not GetCommState(FPort, Dcb) then
raise EComPortError.Create('Error setting port ' + PortName + ' state');

Dcb.BaudRate := 10400;
Dcb.Parity := NOPARITY;
Dcb.ByteSize := 8;
Dcb.StopBits := ONESTOPBIT;

if not SetCommState(FPort, Dcb) then
raise EComPortError.Create('Error setting port ' + PortName + ' state');

//Дальше добавляю вот это и смотрю вывалившийся диалог
sleep(100);
GetCommState(FPort, Dcb);
raise EComPortError.Create(inttostr(DCB.BaudRate));
в структуре висит 9600 хоть тресни.

Ума не приложу в чем разница, Regmonom смотрел там драйвер пытается обратится в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_Ser2pl которой нет. Я ее искуственно создал, создал в ней элементы и все равно нет.

В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ser2pl

ExtBaudrate 10400,2147485840
The Fresh
Обращаюсь к общественности. Неужели у нас у одних с _3m такие проводулины может еще кто потестит. Здесь в принципе все описано. А то у меня складывается мнение что лыжи все таки у меня едут smile.gif.
lutvun
Цитата(The Fresh @ Jan 10 2007, 00:00) *
Обращаюсь к общественности. Неужели у нас у одних с _3m такие проводулины может еще кто потестит. Здесь в принципе все описано. А то у меня складывается мнение что лыжи все таки у меня едут sm.gif.

У меня есть драйвер заточенный под скорость 10400 проверял работает на Автоваз(прога диагностики) и автотулс кажется. Могу выложить там переопределена скорость в 300 бод на 10400 бод. Да извините поздороваться забыл. Здравствуйте.))))
backa
Цитата(lutvun @ May 6 2011, 21:29) *
У меня есть драйвер заточенный под скорость 10400 проверял работает на Автоваз(прога диагностики) и автотулс кажется. Могу выложить там переопределена скорость в 300 бод на 10400 бод. Да извините поздороваться забыл. Здравствуйте.))))

выложите если не сложно
lutvun
Если драйвер устройства FT232 уже установлен, для вступления изменений в силу, программное обеспечение устройства необходимо полностью деинсталлировать и установить повторно из каталога, в котором находится отредактированный INF файл. В силу особенностей операционной системы, функция обновления драйвера или удаление устройства в диспетчере устройств может не дать результата.
Для работы выбираете скорость в 300 бод (скорость в 10400 визуально отображаться не будет)
Если у кого то работать не будет то можете попробовать вот что
Находите в драйвере INF файл и там редактируете вот эту запись, я тупо вырезал и вставил строчку представленную ниже.
Если не заработает то я ко всему этому ещё редактировал реестр согласно инфы в данной ветке, если честно не знаю что помогло)))), но после редактирования реестра связи не было.
Отсюда либо редактирование драйверы помогло, либо редактирование реестра и драйвера всё вместе.
И ещё для полной информации: Винда семёрка, адаптер UAS111
[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

Нажмите для просмотра прикрепленного файла
Да, драйвер уже отредактирован можете устанавливать. Удачи.
Если у кого есть желание, прошу поделится прогами для диагностики и прошивки контроллеров Январь 7.2 (проверенными на работоспособность)
rusty
По поводу pl2303: Лучше всего чтобы значения делителя были в диапазоне 70-300.
Написал прогу на экселе которая вычисляет значение ExtBaudrate :-)
Скачать можно тут.

Кстати, вот значения ExtBaudrate для стандартных скоростей, прямо из драйвера:

std rate ExtBaudrate
6000000 2147483712
3000000 2147483776
2457600 2147483804
1228800 2147484238
921600 2147484264
812500 2147484278
806400 2147484279
614400 2147484316
460800 2147484368
406250 2147484396
403200 2147484398
268800 2147484761
230400 2147484776
201600 2147484791
161280 2147484820
134400 2147484850
128000 2147484859
115200 2147484880
57600 2147485288
38400 2147485340
28800 2147485392
19200 2147485774
14400 2147485800
9600 2147485852
7200 2147485904
4800 2147486286
3600 2147486312
2400 2147486364
1800 2147486416
1200 2147486798
600 2147486876
300 2147487310
150 2147487388
75 2147487544
galjoen
Давным-давно тупо отредактировал реестр и всё работает:
Нажмите для просмотра прикрепленного файла
yura1979
Здравствуйте!
Помогите решить проблемму с вычислениями прескалера делителя вот этого устройства для настройки нестандартной скорости 10400. Может формула есть, не знаю как проверить реальную скорость
Буду очень признателен.
сом порт

вот что еще нашел на 43 странице, но всеравно понять не могу как настроить параметры прскалера и делителя и частоты
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.