Конференция "WinAPI" » Как увеличить скорость Com порта [D7, WinXP]
 
  • bob © (13.03.12 09:45) [0]
    Все API функции работают со скоростью COM порта не более 256К
    а гипертерминал работает вплоть до 921600. Собственно вопрос: как добиться понимания WIN API скоростей больше 256К или как это делает гипертерминал (т.е. фактически он должен быть написан минуя WIN API)
  • RWolf © (13.03.12 10:00) [1]
    точно не работают? как проверяли?
  • sniknik © (13.03.12 10:10) [2]
    > а гипертерминал работает вплоть до 921600.
    а там не бит в сек? тогда это = 112.5К.
  • bob © (13.03.12 10:19) [3]
    to RWolf очень просто написал простейшую прогу на API запустил и проверил на 115200 работает потом подключил к терминалу платку на Cortex M3 и на скорости 921600 отладил все проблемы и тогда решил написать прогу обработки на дельфях. установил в DCB.BaudRate = 921600 и получил ошибку начал разбираться и дошел до функции GetCommProperties(CHandle, CommProp);
    которая возвращает возможности порта а там засада больше чем 128К скорость драйвера виндовоза не может быть и соответственно не позволяет ее установить. в инете пишут о драйверках которые позволяют увеличить скорость но или я тупой или это все гавно. Вот собственно в чем проблема может кто сталкивался
  • RWolf © (13.03.12 10:31) [4]
    непохоже, чтобы гипертерминал использовал что-то, кроме стандартного API для работы с последовательными портами, у hypertrm.dll в таблице импорта только стандартные функции.
    можно помониторить системные вызовы на предмет передаваемых гипертерминалом аргументов — возможно, это прояснит, каким образом ему удаётся открыть порт на скорости 900 кбод.

    моё мнение — если такие скорости действительно нужны, нужно смотреть в сторону USB.
  • bob © (13.03.12 11:14) [5]
    com проще и он есть здесь и сейчас и на компе и на Crtex:) а с USB надо разбираться а это время. А к вопросу помониторить если вкратце это как и чем? Хотя он стандартные функции может вызывать для стандартных же вещей а инициализацию порта проводить свими средствами вероятность маленькая но так может быть.
  • RWolf © (13.03.12 11:29) [6]
    API Monitor, например.
  • bob © (13.03.12 11:43) [7]
    доигрался с разными USB конверторами и выяснилась такая штука у меня три порта родной - №2 и конверторы №3 и №4 так вот функция GetCommProperties(CHandle, CommProp); возвращает CommProp.dwMaxBaud и dwSettableBaud следующие значения
    №2 00020000 100067FFF
    №3 10000000 100067FF9
    №4 10000000 100066B70
    отсюда вывод если dwMaxBaud = 10000000 значит порт позволяет пользователю устанавливать произвольную скорость (старшая единичка) а нули говорят об отсутствии ограничения а в случае с портом №2 нельзя установить произвольную скорость порта (только фиксированную) и ограничение по скорости в 115200. dwSettableBaud говорить о возможности установить стандартную скорость (не более 128К) побитно это так с младшего BAUD_075 = $00000001,BAUD_110 = $00000002,BAUD_134_5 = $00000004,BAUD_150 = $00000008,BAUD_300 = $00000010,BAUD_600 = $00000020,
    BAUD_1200 = $00000040, BAUD_1800 = $00000080, BAUD_2400 = $00000100,  BAUD_4800 = $00000200, BAUD_7200 = $00000400, BAUD_9600 = $00000800;
    BAUD_14400 = $00001000,BAUD_19200 = $00002000,BAUD_38400  = $00004000;
    BAUD_56K    = $00008000,BAUD_128K   = $00010000,BAUD_115200 = $00020000;
    BAUD_57600  = $00040000;  BAUD_USER   = $10000000;
  • bob © (13.03.12 11:46) [8]
    спасибо за общение. в очередной раз понял тщательней надо доки читать и правильно интерпретировать результаты опытов :)
  • bob © (13.03.12 12:03) [9]
    да к стати забыл сказать что терминал тупо показывает стандартный набор скоростей и проверяет возможность установки порта с этой скоростью только в момент подключения порта, а это происходит  с большой задержкой после нажатия ок причем кнопик применить вообще ничего не проверяет
  • Дмитрий (21.03.12 10:07) [10]
    В доках к USB-COM конверторам как правило пишут максимальную скорость. Также сталкивался с "кривыми" конверторами, которые не держали заявленную макс. скорость...
  • Anatoly Podgoretsky © (21.03.12 14:13) [11]
    Win API определяет скорости только до CBR_256000
  • Anatoly Podgoretsky © (21.03.12 14:14) [12]
  • tesseract © (21.03.12 16:35) [13]

    > Также сталкивался с "кривыми" конверторами, которые не держали
    > заявленную макс. скорость...


    Есть очень большая зависимость от шума транзисторов на конвертере и качества кабелей. Да и на конвертерах написано "ДО", а не "зуб даю".  


    > Win API определяет скорости только до CBR_256000


    Ну так const CBR_512000=512000; и всё.
 
Конференция "WinAPI" » Как увеличить скорость Com порта [D7, WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0]