реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не видится PCI устройство, почему?
mSimple
сообщение Nov 12 2009, 17:36
Сообщение #1


Частый гость
**

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



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

Отсюда вопрос: какие необходимо выполнить условия, чтобы устройство определилось.. ? Что оно должно сделать для этого?

Прошу прощения за ламерский вопрос, просто с PCI первый раз столкнулся.
Заранее благодарю всех за ответ.
Go to the top of the page
 
+Quote Post
BSV
сообщение Nov 12 2009, 18:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Начните с простого.
Что за комп? Что за плата?
Питание на ядро ПЛИС и блоки ввода-вывода подается? Правильное? Конфигурация в ПЛИС грузится?

Необходимо чтобы было корректно реализовано конфигурационное пространство и команды, обеспечивающие его чтение и запись.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
mSimple
сообщение Nov 12 2009, 19:26
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 13 2009, 10:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



PCI работает в терминах 3х разных адресных пространств - память, IO и конфигурационное. В последнем пространстве расположены регистры, отвечающие за работу собственно PCI устройства. Там есть некоторый набор стандартных регистров, по содержимому которых система опознает тип PCI устройства (да и вообще его наличие). Если вы не реализуете хотя бы минимальный набор этих регистров, ваше PCI устройство никто не увидит.
Смотрите описание PCI.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Nov 13 2009, 13:49
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 13 2009, 14:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(mSimple @ Nov 13 2009, 16:49) *
во вторых, базовый адрес я назначил 80000000h - 80001FFFh,

Это, извините, как? Базовый адрес назначает BIOS в процессе инициализации PnP PCI. А не Вы (откуда Вы знаете, пересекли свой девайс с кем нибудь на шине или нет? А PnP-манагер знает).

А читать-писать без драйвера никак. Надо замапить пространство памяти карты в виртуальное пространство процесса, что можно сделать только из нулевого кольца. Или, как вариант, расположиться в IO-space и спокойно работать через нечто вроде giveio.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Nov 13 2009, 14:37
Сообщение #7


Частый гость
**

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



Цитата(SM @ Nov 13 2009, 17:18) *
Это, извините, как? Базовый адрес назначает BIOS в процессе инициализации PnP PCI. А не Вы (откуда Вы знаете, пересекли свой девайс с кем нибудь на шине или нет? А PnP-манагер знает).

Возможно это разные какие-то базовые адреса blink.gif
Я сделал 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 smile.gif
Другое дело, почему-то в регистры для записи ничего не пишется (( Будем разбираться дальше

Сообщение отредактировал mSimple - Nov 13 2009, 14:40
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 13 2009, 14:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(mSimple @ Nov 13 2009, 17:37) *
Возможно это разные какие-то базовые адреса blink.gif
Я сделал 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 имеет в своем составе драйвер, дающий доступ ему к физическому адресному пространству. Но Вам для написания собственного софта общения с платой это никак не поможет.
Go to the top of the page
 
+Quote Post
cioma
сообщение Nov 17 2009, 13:44
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



Если не изменяет память при подаче питания в BAR устройства должен быть размер запрашиваемого куска, а уж биос этот размер считае и запишет назад в BAR стартовый адрес.
Go to the top of the page
 
+Quote Post
BSV
сообщение Nov 17 2009, 14:26
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Цитата(cioma @ Nov 17 2009, 16:44) *
Если не изменяет память при подаче питания в BAR устройства должен быть размер запрашиваемого куска, а уж биос этот размер считае и запишет назад в BAR стартовый адрес.
Изменяет, спецификацию перечитайте biggrin.gif .


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Nov 17 2009, 14:36
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



PCI LOCAL BUS SPECIFICATION, REV. 3.0, стр 226
Если в 2х словах: размер "запрашиваемого куска" закодирован "0" в возвращаемой, после чтения с конфиг пространства бара, инфе (биты 31-4).
2 BSV - так что вроде всё верноlaughing.gif
Go to the top of the page
 
+Quote Post
BSV
сообщение Nov 17 2009, 15:17
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



То, что размер определяется постоянной нулевой частью регистра - это вне всякого сомнения. Только не то, что бы он там лежал при включении питания. Топикстартер приводил алгоритм определения размера потребной области БИОСом.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
cioma
сообщение Nov 18 2009, 16:00
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



ОК, для особо дотошных - заменить "при подаче питания" на "до момента опроса биосом" smile.gif
Например, если это плис, то она должна успеть сконфигурироваться за этот короткий промежуток времени, и ответить на конфигурационные циклы биоса. Если не ответила, то зачастую клок от этого слота будет отключен.
Go to the top of the page
 
+Quote Post
mSimple
сообщение Nov 18 2009, 18:24
Сообщение #14


Частый гость
**

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



Спасибо всем.. все получилось. по крайней мере на уровне PCI Scope. Его дебагером мои регистры и пишутся и читаются...

Цитата(cioma @ Nov 18 2009, 19:00) *
ОК, для особо дотошных - заменить "при подаче питания" на "до момента опроса биосом" smile.gif
Например, если это плис, то она должна успеть сконфигурироваться за этот короткий промежуток времени, и ответить на конфигурационные циклы биоса. Если не ответила, то зачастую клок от этого слота будет отключен.


Не знаю как у других, но судя по всему у меня успевает smile.gif При просмотре BAR в нем лежит какой-то адрес.. наверное, значит кто-то его туда вписал. Устройство видно в диспетчере устройств и Винда просит драйвер. Думаю для программистов этого будет достаточно. Хотя, я не уверен конечно, в свойствах устройства нет используемых ресурсов.. это может быть из-за того, что плис не успела ответить? Или просто из-за отсутствия драйвера так?

Сообщение отредактировал mSimple - Nov 18 2009, 18:27
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 23 2009, 11:21
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 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 регистры появятся в списке, только когда их туда добавит драйвер, а пока - только ресурсы определенные стандартом.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016