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

 
 
> Не видится 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
 
Start new topic
Ответов
XVR
сообщение Nov 13 2009, 10:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #5


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

Группа: Свой
Сообщений: 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
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- 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


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

 


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


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