Как узнать физический адрес порта USB->RS232

moon
toxa:

а уж дальше - дело драйвера каким-то образом на аппаратном уровне взаимодействовать с переходником через usb.

Драйвер работает с USB портом, а в самом шнуре микроконтролёр который формат передачи данных USB преобразует
в формат COM, вот и все дела.

toxa

драйвер usb-шнура, который, собственно, создает виртуальное устройство, работает, в свою очередь, с драйвером usb-устройств windows. он не напрямую с железом общается. это все происходит на неком уровне абстракции, который позволяет создавать общее api для шин, классов устройств и отдельных устройств.

то что видно на закладке “ресурсы” у устройств - не более чем информация, предоставленная драйвером этого устройства. вы из своей программы не можете просто так использовать эту память, эти прерывания…

шнур не просто “преобразует один формат в другой”. у этого шнура свой собственный протокол общения со своим драйвером поверх стандартной передачи данных по шине usb, кроме того, возможно, у него есть аппаратный fifo-буфер, и вообще, не такое уж это простое устройство.

чтобы рабоать с виртуальным (и не виртуальным, любым, с точки зрения прикладного программиста windows это не имеет значения) ком-портом нужно открыть устройство \\.\COMn, где n - номер порта, через createfile, с помощью readfile/writefile - читать-писать, closehandle - закрывает порт. кроме того, можно управлять портом через функции setcomm*, а получать состояние - через getcomm* (например, getcommstate) и аналогичные функции winapi. ФИЗИЧЕСКИЕ АДРЕСА В ДАННОМ СЛУЧАЕ НЕ НУЖНЫ.

moon

Чтобы обратится к устройству, не факт по адресу, можно и \\.\COMn. (ясно)
Но унас может быть 256 виртуальных порта, как тогда, выделяется память под временные данные.
А она выделяется!
to Toxa: Где про это можно подробно посмотреть. 😵

toxa
moon:

Чтобы обратится к устройству, не факт по адресу, можно и \\.\COMn. (ясно)
Но унас может быть 256 виртуальных порта, как тогда, выделяется память под временные данные. А она выделяется!

по адресу, из обычной программы в windows обратиться к порту просто нельзя! под внутренние нужды память выделяется драйвером устройства. адреса, объем и формат данных определяется самим драйвером - сколько ему нужно, столько и драйвер выделяет. прямого доступа к этой памяти извне обычно нет.

есть еще такая вещь - vdm - virtual dos machine. для запуска дос-программ. dos-программа, работающая в vdm, может обращаться к портам по “физическому” адресу и использовать “прерывания”. но эти адреса, на самом деле, виртуальные, при обращении к ним управление перехватывается и происходит вызов драйвера windows. точно так же и эти преывания виртуальные - они эмулируются.

moon:

to Toxa: Где про это можно подробно посмотреть. 😵

В MSDN, конечно. Про драйверы - в DDK.

appolinari
toxa:

…В MSDN, конечно. Про драйверы - в DDK…

я так понимаю мачу3 ничто несветит…
100 еврейских рублёв пропали задаром…
жаль.