Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCI Burst Memory Write Master Transaction
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
AlexTim
Собственно сделано устройство, альтеровская корка 4.0. Передаю пакетами по 32 слова в режиме Burst Memory Write Master Transaction данные в выделенный сегмент памяти размером 4 Мбайта.
Точнее хотелось бы, но когда мои донные должны были бы попасть в адреса на границе 4 кбайт, мост выставляет ошибку и корка выдает 'Disconnect Without Data'. И если обработать ошибку, то уходишь в цикл и крутишся до посинения.
Если дампить память данные действительно иногда теряются.
voffka
Спецификация 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).
AlexTim
Похоже, но
- почему граница проходит через каждые 4КВ
- и я перередаю пакетами по 32 слова т.е. 128 байт и границу, если она есть, не пересекаю
voffka
1. 4KB - размер страницы памяти. Транзакция может работать с данными, располагающимися в одной странице.

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

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

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

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