Перейти к содержанию
    

PCI Burst Memory Write Master Transaction

Собственно сделано устройство, альтеровская корка 4.0. Передаю пакетами по 32 слова в режиме Burst Memory Write Master Transaction данные в выделенный сегмент памяти размером 4 Мбайта.

Точнее хотелось бы, но когда мои донные должны были бы попасть в адреса на границе 4 кбайт, мост выставляет ошибку и корка выдает 'Disconnect Without Data'. И если обработать ошибку, то уходишь в цикл и крутишся до посинения.

Если дампить память данные действительно иногда теряются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спецификация PCI 2.3 (page 66):

 

This might be because the burst crosses a resource boundary or a resource conflict occurs.

 

Если транзакция пересекает границу 4 KB (resource boundary), то это и вызывает Disconnect (в соответствии со спецификацией). Необходимо избегать таких пакетов (варьировать размер/адрес таким образом, чтобы не пересекалась граница 4KB).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, но

- почему граница проходит через каждые 4КВ

- и я перередаю пакетами по 32 слова т.е. 128 байт и границу, если она есть, не пересекаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. 4KB - размер страницы памяти. Транзакция может работать с данными, располагающимися в одной странице.

 

2.Здесь имеет значение не размер транзакции,а совокупность адреса и размера. Т.е. если транзакция размером 128 байт обращается по адресу, удаленному от границы меньше,чем на 128 байт, то происходит пересечение границы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, что Вы подтвердили мои мысли.

Когда система выделяет раздел памяти он выравнивает границу до 2 КБ, но мы не верили и проверяли - не обнанывает.

Чтобы хоть как то, пришлось последнюю посылку сокращать на 2 слова. В результате в дампе последние 2 слова пустые.

 

Сложившаяся ситуация совершенно не устраивает, и вообще все как то абсурдно получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не за что)

 

А почему бы не выровнять адрес обращений?тогда не пришлось бы обрезать посылку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня было такое, что bridge обрывал чтение на половине, даже без выравнивания. Заменил команду чтения на Memory Read Multiple, частично помогло. Для записи делать ничего не пришлось, т.к. данные всегда улетали полностью. Сделал следующее: проверяю количество действительно переданных слов. (Даже если операция чтения/записи заканчивается по Target Disconnect without data, те данные которые успели передаться с установленными IRDY и TRDY - валидны. См. описание PCI) Потом повторяется команда, но уже не сначала а со следующего адреса, по которому данные не были переданы. А вообще странно что именно последние 2 слова не прописываются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...