Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для Windows/Dos > физический адрес USB flash |
Автор: piritus 20.9.2007, 14:29 |
Подскажите, пожалуйста, как узнать при помощи только прерываний BIOS узнать физический адрес USB flash-накопителя |
Автор: 10110111 20.9.2007, 18:52 |
Для доступа к любому USB-девайсу надо программить хост-контроллер, к которому подрублен девайс. А насчет них - на сайты: EHCI и UHCI - Intel OHCI - <кто-то там, не знаю точно(гугл в помощь)> Далее есть несколько протоколов работы юсб флешек, про них точно не скажу, т.к. сам еще в этом не разобрался. |
Автор: piritus 20.9.2007, 18:56 |
привер бы, а то так хз что делать... |
Автор: MAKCim 20.9.2007, 19:23 |
piritus, через PCI BIOS можно http://www.ctyme.com/intr/rb-2373.htm class code = 0Ch subclass code = 03h interface = FEh (или 00h, 10h, 20h, 80h) после получения bus/device/function номеров пользуемся http://www.ctyme.com/intr/rb-2377.htm и http://www.ctyme.com/intr/rb-2391.htm для чтения и записи BAR-ов (Base Address Registers) устройства да, вот еще, возьми datasheet на свой чипсет и почитай про USB контроллер (программирование, конфигурирование) |
Автор: piritus 20.9.2007, 19:56 |
Благодарю. SI = device index (0-n) как его узнать? interface = FEh (или 00h, 10h, 20h, 80h) почему или-или? как PCI будет искать устройства на USB? я наверное не точно выразился... Нужно узнать серийный номер флешки, т.е. ее отличительная особенность (типа MAC'а на сетевых картах), программа, использующая привязку к железу... |
Автор: MAKCim 20.9.2007, 21:10 |
думаю, перебором разные номера интерфейсов соответствуют разным компонентам 00h Universal Serial Bus (USB) following the Universal Host Controller Specification 10h Universal Serial Bus (USB) following the Open Host Controller Specification 20h USB2 host controller following the Intel Enhanced Host Controller Interface 80h Universal Serial Bus with no specific programming interface FEh USB device (not host controller) я ж говорю, при помощи PCI BIOS находишь USB контроллер дальше по спецификации на чипсет с ним работаешь |
Автор: piritus 21.9.2007, 07:33 |
почему в регистрах не передается адрес на буфер, т.е. мне нужно считать "02h WORD device ID (read-only)" где он располагается в памяти? для чего нужна спецификация на чипсет, если меня интересует device ID? |
Автор: piritus 23.9.2007, 11:24 |
DI = register number (0000h-00FFh, must be multiple of 4) - как его узнать 02h WORD device ID (read-only) - как считать |
Автор: MAKCim 23.9.2007, 11:49 | ||
смещение в конфигурационном простанстве PCI устройства в твоем случае PCI устройство - это USB контроллер описание регистров конфигурационного пространства ищи в спецификации на чипсет это где? |
Автор: piritus 23.9.2007, 11:58 |
в PCI BIOS v2.0c+ - READ CONFIGURATION DWORD после описания функции: Format of PCI Configuration Data: Offset Size Description (Table 00878) 00h WORD vendor ID (read-only) (see #00732 at AX=B102h) FFFFh returned if requested device non-existent 02h WORD device ID (read-only) 04h WORD command register (see #00879) 06h WORD status register (see #00880) 08h BYTE revision ID 09h 3 BYTEs class code |
Автор: MAKCim 23.9.2007, 12:37 |
piritus, каждое PCI устройство имеет конфигурационное пространство по различным смещениям в нем храняться различные регистры, которые отвечают за включение/выключение определенных функций устройства и его идентификацию Format of PCI Configuration Data: Offset Size Description (Table 00878) 00h WORD vendor ID (read-only) идентификатор производителя устройства (для Intel 8086h) FFFFh returned if requested device non-existent 02h WORD device ID (read-only) идентификатор устройства для данного производителя 04h WORD command register (see #00879) включение/выключение различной функциональности 06h WORD status register (see #00880) регистр статуса устройства 08h BYTE revision ID 09h 3 BYTEs class code |
Автор: piritus 23.9.2007, 12:59 | ||
у меня по PCI Configuration Map (SMBUS-D31:F3) 00-01h VID Vendor ID 8086h RO 02-03h DID Device ID 2413h RO т.е. что бы узнать DeviceID, register number должен быть равен 0000h, т.к. значение должно быть кратно 4. Так? тогда получится что-то типа:
но Device ID - это как я понял не ID flash-накопителя, а ID host контроллера USB и в моем случае дефолтным является значение: 2413h как тогда узнать ID флешки? |
Автор: MAKCim 23.9.2007, 14:39 | ||
piritus,
|
Автор: piritus 23.9.2007, 14:46 | ||
пока я редактировал сообщение, ты уже ответил ![]() у меня по PCI Configuration Map (SMBUS-D31:F3) 00-01h VID Vendor ID 8086h RO 02-03h DID Device ID 2413h RO т.е. что бы узнать DeviceID, register number должен быть равен 0000h, т.к. значение должно быть кратно 4. Так? тогда получится что-то типа:
но Device ID - это как я понял не ID flash-накопителя, а ID host контроллера USB и в моем случае дефолтным является значение: 2413h как тогда узнать ID флешки? |
Автор: MAKCim 23.9.2007, 15:42 | ||||
Device ID = 2413h это SMBus контроллер, а не USB еще раз говорю, посмотри какой у тебя USB контроллер на чипсете потом сходи http://www.pcidatabase.com/vendor_details.php?id=1302 и найди нужный Device ID после того, как найдешь USB контроллер, с помощью него определишь подключенные устройства (в т. ч флешку) |
Автор: piritus 23.9.2007, 16:39 |
вот что нашлось по моему чипсету: 0x24D2 Chip Number: 82801EB/ER Chip Description: USB UHCI Controller #1 0x24D4 Chip Number: 82801EB/ER Chip Description: USB UHCI Controller #2 0x24D7 Chip Number: 82801EB/ER Chip Description: USB UHCI Controller #3 0x24DE Chip Number: 82801EB/ER Chip Description: USB UHCI Controller #4 USB контроллер найден, как с его помощью определять устройства? данные для FIND PCI CLASS CODE, как я понял, тоже берутся из спецификации, тогда для моего случая class code будет 000c0300h |
Автор: piritus 23.9.2007, 19:23 |
посмотрел еще, чем отличается "Поиск устройства PCI" от "Поиск кода класса PCI"... при чтении конфигурации номер какого регистра писать... как определить USB контроллер... как определить устройство... в общем я совсем запутался. если можешь приведи, пожалуйста, пример считывания заводского идентификатора flash'ки, подключенной к шине USB. |
Автор: MAKCim 24.9.2007, 09:49 |
piritus, 1. Скачай http://download.intel.com/technology/usb/UHCI11D.pdf UHCI 2. Определи базовый адрес регистров UHCI (смещение 20h в конфигурационном пространстве UHCI) 3. Скачай спецификацию USB для определения команд, идентифицирующих устройства на шине 4. Используя 1, 2, 3 ищи то, что тебе нужно пример не приведу, поскольку с этим не работал да и времени нет |
Автор: piritus 24.9.2007, 17:51 |
1. Это нужно для FIND PCI CLASS CODE, как я понял... CLASS CODE REGISTER Address Offset: 09-0Bh Default Value: 010180h Attribute: Read Only Size: 24 bits This register contains the device programming interface infomation related to the Sub-Class Code and Base Class Code definition. This register also identifies the Base Class Code and the function sub-class in relation to the Base Class Code. Bit Description 23:16 Base Class Code (BASEC). 0Ch=Serial Bus controller. 15:8 Sub-Class Code (SCC). 03h=Universal Serial Bus Host Controller. 7:0 Programming Interface (PI). 00h=No specific register level programming interface defined. как понимать, что Default Value имеет значение 010180h, а в описании ниже, значение равно 0с0300h ? ;====================================================== 2. Базовый адрес регистров UHCI - это USB BASE--IO SPACE BASE ADDRESS REGISTER? Address Offset: 20-23h Default Value: 00000001h Attribute: Read/Write Size: 32 bits This register contains the base address of the USB I/O Registers Bit Description 31:16 Reserved. Hardwired to 0s. Must be written as 0s. 15:5 Index Register Base Address. Bits [15:5] correspond to I/O address signals AD [15:5], respectively. 4:1 Reserved. Read as 0. 0 Resource Type Indicator (RTE) - RO. This bit is harswired to 1 indicating that the base address field in this register maps to I/O space. 3. Пролистал спецификацию несколько раз и не нашел команд, идентифицирующих устройства на шине 4. "Используя 1, 2, 3 ищи то, что тебе нужно" какая функция? |
Автор: PRT 16.10.2007, 15:52 |
Советую посмотреть http://forum.sources.ru/index.php?showtopic=113980&view=showall |