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

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

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

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

|
Цитата(BSV @ Nov 12 2009, 21:54)  Начните с простого. Что за комп? Что за плата? Питание на ядро ПЛИС и блоки ввода-вывода подается? Правильное? Конфигурация в ПЛИС грузится? Комп самый обычный, настольный.., материнка ASUS P5Q, плата выполнена в формате compactPCI, подключенная через плату сопряжения.. сама плата в итоге будет вставляться в слот крейта и подключаться по кросс плате к мини ПЭВМ в соседнем слоте.. Питание на плате сопряжения от PCI есть и оно правильное.., горят соответствующие св. диоды и проверял тестером... Моя плата питается, соответственно, от платы сопряжения. Питание на ядро ПЛИС подается точно.. она конфигурируется, проверял ChipScope'ом. Само устройство пока пустое, просто сделал пока несколько регистров: 1. Read_Only. 2. Write_Only и 3. Read_and_WRITE, пока хочу проверить как будут они читаться и писаться по шине.. Цитата Необходимо чтобы было корректно реализовано конфигурационное пространство и команды, обеспечивающие его чтение и запись. Не совсем понимаю.. есть адресное пространство на шине PCI компьютера, есть адресное пространство внутри PCI устройства.. как зарегистрировать себя в адресном пространстве шины.. ? Забыл сказать, устройство не является мастером шины.. Оно должно на шину что-то послать, чтобы ее включили или как?
Сообщение отредактировал mSimple - Nov 12 2009, 19:35
|
|
|
|
|
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 имеет в своем составе драйвер, дающий доступ ему к физическому адресному пространству. Но Вам для написания собственного софта общения с платой это никак не поможет.
|
|
|
|
|
Nov 18 2009, 18:24
|

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

|
Спасибо всем.. все получилось. по крайней мере на уровне PCI Scope. Его дебагером мои регистры и пишутся и читаются... Цитата(cioma @ Nov 18 2009, 19:00)  ОК, для особо дотошных - заменить "при подаче питания" на "до момента опроса биосом"  Например, если это плис, то она должна успеть сконфигурироваться за этот короткий промежуток времени, и ответить на конфигурационные циклы биоса. Если не ответила, то зачастую клок от этого слота будет отключен. Не знаю как у других, но судя по всему у меня успевает  При просмотре BAR в нем лежит какой-то адрес.. наверное, значит кто-то его туда вписал. Устройство видно в диспетчере устройств и Винда просит драйвер. Думаю для программистов этого будет достаточно. Хотя, я не уверен конечно, в свойствах устройства нет используемых ресурсов.. это может быть из-за того, что плис не успела ответить? Или просто из-за отсутствия драйвера так?
Сообщение отредактировал mSimple - Nov 18 2009, 18:27
|
|
|
|
|
Nov 23 2009, 11:21
|

Знающий
   
Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950

|
Цитата(mSimple @ Nov 18 2009, 22:24)  При просмотре BAR в нем лежит какой-то адрес.. наверное, значит кто-то его туда вписал. Биос вписал Цитата(mSimple @ Nov 18 2009, 22:24)  Устройство видно в диспетчере устройств и Винда просит драйвер. Думаю для программистов этого будет достаточно. Хотя, я не уверен конечно, в свойствах устройства нет используемых ресурсов.. это может быть из-за того, что плис не успела ответить? Или просто из-за отсутствия драйвера так? А какие ресурсы использует устройство? Про бар я понял - используется PCI MEM или IO. А что с прерываниями, или PCI Expansion ROM, или какие еще могут быть ресурсы? User defined регистры появятся в списке, только когда их туда добавит драйвер, а пока - только ресурсы определенные стандартом.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|