Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Boot ROM на сетевой карточке RTL8139D
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Demeny
Смотрел даташиты на котроллеры PCI-Ethernet от Realtek. Заметил интересную особенность, например, на чипе RTL8139B микросхема Boot ROM подключена "нормальным образом", то есть линии адреса A0-A16 и данных D0-D7 ROM (а заодно и RD/WR# и CS/OE#) подключены к отдельным выводам RTL8139B. Как это работает, мне понятно - RTL8139B декодирует адрес из диапазона ROM на шине PCI, далее выставляет соотв. адрес на ROM, OE#=0, получает данные от ROM и выставляет их на PCI. Всё логично.
Теперь смотрим RTL8139D - там нет выделенных линий на линии адреса и данных ROM, эти линии расшарены с линиями PCI интерфейса, а именно A0-A16 (ROM) объединены с AD0-AD16 (PCI) , а линии данных D0-D7 (ROM) объединены с AD24-AD31 (PCI). Выделенной линией для Boot ROM осталасть только ROMCS/OEB.
Мне непонятно, как осуществляется доступ к ROM в этом случае ? Как чип RTL8139D "ухитряется" считать данные из ROM прямо по линиям PCI ? Ведь ROM микросхема может оказаться достаточно медленной на чтение (порядка 70 нс).
rezident
Цитата(Demeny @ Aug 11 2008, 20:26) *
Мне непонятно, как осуществляется доступ к ROM в этом случае ? Как чип RTL8139D "ухитряется" считать данные из ROM прямо по линиям PCI ? Ведь ROM микросхема может оказаться достаточно медленной на чтение (порядка 70 нс).
Читает данные из BOOTROM вовсе не чип сетевой карты, а основной процессор после прохождения POST-программы основного BIOS. После успешного прохождения POST сканируются адреса из выделенного для BIOS внешних устройств диапазона. При обнаружении определенной сигнатуры (я уже запамятовал ее, что-то типа 0x55AA) определяется смещение адреса этого BIOS и ему передается управление.
В Википедии кое-что есть на эту тему.
Demeny
Цитата(rezident @ Aug 11 2008, 18:52) *
Читает данные из BOOTROM вовсе не чип сетевой карты, а основной процессор после прохождения POST-программы основного BIOS. После успешного прохождения POST сканируются адреса из выделенного для BIOS внешних устройств диапазона. При обнаружении определенной сигнатуры (я уже запамятовал ее, что-то типа 0x55AA) определяется смещение адреса этого BIOS и ему передается управление.

То, что Вы описали, справедливо для ISA-устройств. На картах PCI по-другому - в конфигурационном пространстве есть регистр базового адреса Boot ROM, в него в процессе PnP записывается 32-битный адрес, на который маппится Boot ROM (аналогично BAR-регистрам). Декодирование этого адреса осуществляет PCI-контроллер, и возвращает при чтении данные из ROM. А дальше - проверяется сигнатура, передаётся управление и т. п.
Вопрос в другом - как удаётся совместить линии PCI AD[0]-AD[31] и линии адреса и данных ROM ?
rezident
Цитата(Demeny @ Aug 12 2008, 00:21) *
Вопрос в другом - как удаётся совместить линии PCI AD[0]-AD[31] и линии адреса и данных ROM ?
А какая принципиальная разница будет ли ретранслировать данные контроллер PCI или они будут выдаваться непосредственно м/с ROM, дешифрация которой осуществляется контроллером PCI?
Demeny
Цитата(rezident @ Aug 12 2008, 03:27) *
А какая принципиальная разница будет ли ретранслировать данные контроллер PCI или они будут выдаваться непосредственно м/с ROM, дешифрация которой осуществляется контроллером PCI?

Поскольку адрес на PCI-карту всегда приходит с двумя нулевыми младшими битами (32-bit alignment), а нужный байт выбирается с помощью C/BE0-3 , то выставленный адрес нельзя использовать непосредственно для выборки данных из ROM, иначе мы будем получать только каждый четвёртый байт sad.gif
Отсюда вывод - PCI-контроллер сначала сам декодирует адрес, используя в т. ч. линии C/BE0-3, после этого уже обращается в ROM с нужным адресом. И даже если микросхема ROM очень медленная - контроллер PCI не завершает транзакцию до тех пор, пока не получит данные от ROM. Наверное, так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.