Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PLX 9052 - 16-битный режим и сигналы Local Bytes Enable
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Белый пони
Здравствуйте!

Имеется PCI-плата, в которой происходит общение шины PCI с портом параллельного воода вывода NEC D71055 через микросхему PLX9052. Вот примерно набросал:


На С++ написанна программа, и налажен обмен, при ширине шины PLX - 8 бит. Выбор порта и запись/чтение на NEC произвожу командами outb/inb/outw/inw(данные, порт). Значения "порт": базоый адрес, базовый адрес+1, базовый адрес+2 и базовый адрес+3. Соотвествующие значения выставляются на LBE0# и LBE1#, а оттуда на A0 и A1. Происходит запись/чтение байта из портов 0,1,2 и 3, соответственно. Всё работает.

Проблема появилась, когда надо было расширить шину для обмена по 16 бит. Поменял соответстующий бит в EEPROM'е. Но теперь при записи в порт получается полный бред.

В датащите прочитал, что в 16-битном режиме меняется работа LBE0#...LBE3#. Вот так:

Цитата
Byte enables are encoded based upon configured bus
width:

32-Bit Bus
Four byte enables indicate which of the four bytes are
active during a data cycle.
· LBE3# Byte Enable 3 = LAD[31:24]
· LBE2# Byte Enable 2 = LAD[23:16]
· LBE1# Byte Enable 1 = LAD[15:8]
· LBE0# Byte Enable 0 = LAD[7:0]

16-Bit Bus
LBE[3,1:0]# are encoded to provide BHE#, LA1, and
BLE#.
· LBE3# Byte High Enable (BHE#) = LAD[15:8]
· LBE2# Unused
· LBE1# Address bit 1 (LA1)
· LBE0# Byte Low Enable (BLE#) = LAD[7:0]

8-Bit Bus
LBE[1:0]# are encoded to provide LA[1:0].
· LBE3# Unused
· LBE2# Unused
· LBE1# Address bit 1 (LA1)
· LBE0# Address bit 0 (LA0)


Когда адрес просто выставлялся двумя битами - мне всё понятно. А как выбирать нужный порт теперь и куда делся LA0#, я совсем не понимаюsad.gif

Не подскажите в чём дело?

Извиняюсь, за много букв, просто не знаю где проблема, хотя бы примерно.
В неправильной перепрошивке EEPROM'а? Или в моём непонимании как преобразуются сигналы C/BE# в LBE# и как это связано и адресом порта в который я пытаюсь записать?

sad.gif
Andrew Su
Добрый день.
16-Bit Bus
LBE[3,1:0]# are encoded to provide BHE#, LA1, and
BLE#.
· LBE3# Byte High Enable (BHE#) = LAD[15:8]
· LBE2# Unused
· LBE1# Address bit 1 (LA1)
· LBE0# Byte Low Enable (BLE#) = LAD[7:0]

Если вы выполняете байтное обращение к четному адресу, то
BHE# = 1 BLE# = 0 и данные на LAD[7:0]
Если вы выполняете байтное обращение к нечетному адресу, то
BHE# = 0 BLE# = 1 и данные на LAD[15:8]
Если вы выполняете словное обращение к четному адресу, то
BHE# = 0 BLE# = 0 и данные на LAD[15:8] и LAD[7:0]
Если вы выполняете словное обращение к нечетному адресу, то точный
порядок выполнения операции я не воспроизведу, но по моему, она выполняется
за два цикла, сначала один байт, а потом другой.
Если приведенная вами схема точна, то, по всей видимости, вам не удастся реализовать 16-битный
обмен без корректировки схемы.
Кстати, а каким образом старший байт шины LAD[15:8] предполагается завести в NEC? Или он туда заходит?
Удачи.
Белый пони
Цитата(Andrew Su @ Jan 22 2011, 16:37) *
Если вы выполняете байтное обращение к четному адресу, то
BHE# = 1 BLE# = 0 и данные на LAD[7:0]
Если вы выполняете байтное обращение к нечетному адресу, то
BHE# = 0 BLE# = 1 и данные на LAD[15:8]
Если вы выполняете словное обращение к четному адресу, то
BHE# = 0 BLE# = 0 и данные на LAD[15:8] и LAD[7:0]
Если вы выполняете словное обращение к нечетному адресу, то точный
порядок выполнения операции я не воспроизведу, но по моему, она выполняется
за два цикла, сначала один байт, а потом другой.
Если приведенная вами схема точна, то, по всей видимости, вам не удастся реализовать 16-битный
обмен без корректировки схемы.
Кстати, а каким образом старший байт шины LAD[15:8] предполагается завести в NEC? Или он туда заходит?
Удачи.


Спасибо за помощь!

На старшем байте LAD[15:8] - перемычки, чтобы можно было "снаружи" руками выставить нужный байт (номер платы, например), и затем его прочитать вместе с рабочей информацией на LAD[7:0]. Запись, соответственно в него не ведётся.

С чтением, собственно, проблем нет, наверно потому, что, как я прочитал на википедии, при чтении Byte Enable'ы можно игнорировать:
Цитата
For reads, it is always legal to ignore the byte enable signals and simply return all 32 bits; cacheable memory resources are required to always return 32 valid bits. The byte enables are mainly useful for I/O space accesses where reads have side effects.

http://en.wikipedia.org/wiki/Conventional_PCI
я и читаю всё кучей, потом уже распределю какой байт куда.

А запись при работе происходит во второй и третий порты ( БАЗОВЫЙ АДРЕС+2 и БАЗОВЫЙ АДРЕС+3), по одному байту. Т.е. мне надо выставлять нужный байт на LAD[7:0], чтобы при этом на A[1:0] было 10 и 11 соответственно (кстати, сейчас понял, что непонятно есть ли инверсия на А[1:0], вроде на схеме не обозначенно, но в 8 битном режиме всё обменивается правильно, наверно есть, в понедельник проверю).

Если я правильно понял, то:

При записи байта в порт BASE+2 (чётный):
LBE0#/BLE# = 0
LBE1#/LA1 = 1 (в этом режиме он не инвертирован, судя по датащиту)
LBE2# -
LBE3#/HBE# = 1
и фактически происходит запись в первый (BASE+1) порт NEC'а ? (A1=1 A0=0 , + инверсия) И записывается туда байт как раз выставленный на LAD[7:0].

При записи байта в порт BASE+3:
LBE0#/BLE# = 1
LBE1#/LA1 = 1
LBE2# -
LBE3#/HBE# = 0
и фактически происходит запись в нулевой (BASE+0) порт NEC'а ? (A1=1 A0=1 , + инверсия) Причём для записи данные выставляются на LAD[15:8], и тут проблема sad.gif

А получится ли у меня в принципе записать в нечётный порт данные с LAD[7:0]?
(несовпадение адресов можно программно подправить, как я понял, для записи в BASE+2 - писать в BASE+1, для записи в BASE+3 - в BASE+0)
Белый пони
Цитата(Белый пони @ Jan 22 2011, 21:23) *
(кстати, сейчас понял, что непонятно есть ли инверсия на А[1:0], вроде на схеме не обозначенно, но в 8 битном режиме всё обменивается правильно, наверно есть, в понедельник проверю).
Проверил, инверсии, естественно, нет. В 8-ибтом режиме LBE0# и LBE1# работают как неинвертированные LA0 и LA1.

Т.е. адреса совпадают. А вот вопрос записи в нечётный порт данных с LAD[7:0] остаётся sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.