|
Не видится PCI устройство, почему? |
|
|
|
Nov 12 2009, 17:36
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Здравствуйте уважаемые! Помогите с таким вопросом: выпала задача разработать устройство с интерфейсом PCI на ПЛИС на языке VHDL. В качестве компонента контроллера PCI, был взят проверенный компонент написанный не мной. По ModelSim вроде даже все работает.. регистры пишутся и читаются. Вставляю все это хозяйство в комп и тишина.. ничего! Скачал PCIsope, он тоже моего устройства не видит...  Что-то я забыл, не могу понять что. Отсюда вопрос: какие необходимо выполнить условия, чтобы устройство определилось.. ? Что оно должно сделать для этого? Прошу прощения за ламерский вопрос, просто с PCI первый раз столкнулся. Заранее благодарю всех за ответ.
|
|
|
|
|
 |
Ответов
|
Nov 13 2009, 13:49
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(XVR @ Nov 13 2009, 13:11)  PCI работает в терминах 3х разных адресных пространств - память, IO и конфигурационное. В последнем пространстве расположены регистры, отвечающие за работу собственно PCI устройства. Там есть некоторый набор стандартных регистров, по содержимому которых система опознает тип PCI устройства (да и вообще его наличие). Если вы не реализуете хотя бы минимальный набор этих регистров, ваше PCI устройство никто не увидит. Смотрите описание PCI. Так, что-то получилось.. устройство видится как PCI Scope, так и в диспетчере устройств Windows, сконфигурировал адресное пространство, назначил базовый адрес, включил I/O и MEM space decoding. что получилось смотрите на картинках. во первых смущает строка "Problem 00000001h" Кто знает, что она значит? во вторых, базовый адрес я назначил 80000000h - 80001FFFh, теперь мне не понятно, а как читать/писать во внутренние регистры устройства по этим адресам? в устройстве есть: REG_ONLY_READ BASE_ADDR + x"00000000" REG_ONLY_WRITE BASE_ADDR + x"00000004" REG_READ_AND_WRITE BASE_ADDR + x"00000008" И возможно ли это вообще с помощью PCI-scope и без какого либо драйвера? Необходимо какой-то скрипт писать на С для этого?
Сообщение отредактировал mSimple - Nov 13 2009, 13:52
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 13 2009, 14:18
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(mSimple @ Nov 13 2009, 16:49)  во вторых, базовый адрес я назначил 80000000h - 80001FFFh, Это, извините, как? Базовый адрес назначает BIOS в процессе инициализации PnP PCI. А не Вы (откуда Вы знаете, пересекли свой девайс с кем нибудь на шине или нет? А PnP-манагер знает). А читать-писать без драйвера никак. Надо замапить пространство памяти карты в виртуальное пространство процесса, что можно сделать только из нулевого кольца. Или, как вариант, расположиться в IO-space и спокойно работать через нечто вроде giveio.
|
|
|
|
|
Nov 13 2009, 14:37
|

Частый гость
 
Группа: Свой
Сообщений: 98
Регистрация: 21-02-08
Из: г. Москва
Пользователь №: 35 268

|
Цитата(SM @ Nov 13 2009, 17:18)  Это, извините, как? Базовый адрес назначает BIOS в процессе инициализации PnP PCI. А не Вы (откуда Вы знаете, пересекли свой девайс с кем нибудь на шине или нет? А PnP-манагер знает). Возможно это разные какие-то базовые адреса Я сделал PCI Scop'ом следующее: 1. в BAR0 отправил FFFFFFFF, сконфигурировал BAR0 т.о. enable size detection 2. прочитал BAR0, т.о. узнал размер BAR0 3. записал в BAR0 0x8000_0000 - мой базовый адрес 4. записал в Command Register 0x000001C3 - включил I/O и MEM space decoding 5. все, как видно на второй картинке, базовый адрес присвоился (до этого он был равен 0x00000000) и диаппазон соответствует указанному мной внутри устройтва ) Цитата А читать-писать без драйвера никак. Надо замапить пространство памяти карты в виртуальное пространство процесса, что можно сделать только из нулевого кольца. Или, как вариант, расположиться в IO-space и спокойно работать через нечто вроде giveio. А как же я тогда открыв окно DEBUG в PCI Scope и вписав там "R.D 80000000" (команда чтения Double Word по адресу) вижу Memory read 80000000: 37550029 ").U7" Где 37550029 значение записанное в регистр REG_READ_ONLY  Другое дело, почему-то в регистры для записи ничего не пишется (( Будем разбираться дальше
Сообщение отредактировал mSimple - Nov 13 2009, 14:40
|
|
|
|
|
Nov 13 2009, 14:47
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(mSimple @ Nov 13 2009, 17:37)  Возможно это разные какие-то базовые адреса Я сделал PCI Scop'ом следующее: 1. в BAR0 отправил FFFFFFFF, сконфигурировал BAR0 т.о. enable size detection 2. прочитал BAR0, т.о. узнал размер BAR0 3. записал в BAR0 0x8000_0000 - мой базовый адрес 4. записал в Command Register 0x000001C3 - включил I/O и MEM space decoding 5. все, как видно на второй картинке, базовый адрес присвоился (до этого он был равен 0x00000000) и диаппазон соответствует указанному мной внутри устройтва ) Да, я все это понимаю, но это некорректно. Вы абсолютно уверены, что по адресу 0x8000000 в Вашей системе ничего и никого нет? Суть в том, что после загрузки системы PnP манагер должен сконфигурировать все устройства, а Вы - только считать все присвоенные в процессе конфигурации адреса. Но не писать их туда. Цитата(mSimple @ Nov 13 2009, 17:37)  А как же я тогда открыв окно DEBUG в PCI Scope и вписав там "R.D 80000000" (команда чтения Double Word по адресу) вижу Memory read 80000000: 37550029 ").U7" Ну значит PCI Scope имеет в своем составе драйвер, дающий доступ ему к физическому адресному пространству. Но Вам для написания собственного софта общения с платой это никак не поможет.
|
|
|
|
Сообщений в этой теме
mSimple Не видится PCI устройство, почему? Nov 12 2009, 17:36 BSV Начните с простого.
Что за комп? Что за плата?
Пит... Nov 12 2009, 18:54 mSimple Цитата(BSV @ Nov 12 2009, 21:54) Начните ... Nov 12 2009, 19:26 cioma Если не изменяет память при подаче питания в BAR у... Nov 17 2009, 13:44 BSV Цитата(cioma @ Nov 17 2009, 16:44) Если н... Nov 17 2009, 14:26 Kuzmi4 PCI LOCAL BUS SPECIFICATION, REV. 3.0, стр 226
Есл... Nov 17 2009, 14:36 BSV То, что размер определяется постоянной нулевой час... Nov 17 2009, 15:17 cioma ОК, для особо дотошных - заменить "при подаче... Nov 18 2009, 16:00 mSimple Спасибо всем.. все получилось. по крайней мере на ... Nov 18 2009, 18:24  Shivers Цитата(mSimple @ Nov 18 2009, 22:24) При ... Nov 23 2009, 11:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|