oldAlex 0 20 декабря, 2006 Опубликовано 20 декабря, 2006 · Жалоба Собственно сделано устройство, альтеровская корка 4.0. Передаю пакетами по 32 слова в режиме Burst Memory Write Master Transaction данные в выделенный сегмент памяти размером 4 Мбайта. Точнее хотелось бы, но когда мои донные должны были бы попасть в адреса на границе 4 кбайт, мост выставляет ошибку и корка выдает 'Disconnect Without Data'. И если обработать ошибку, то уходишь в цикл и крутишся до посинения. Если дампить память данные действительно иногда теряются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
voffka 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба Спецификация 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oldAlex 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба Похоже, но - почему граница проходит через каждые 4КВ - и я перередаю пакетами по 32 слова т.е. 128 байт и границу, если она есть, не пересекаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
voffka 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба 1. 4KB - размер страницы памяти. Транзакция может работать с данными, располагающимися в одной странице. 2.Здесь имеет значение не размер транзакции,а совокупность адреса и размера. Т.е. если транзакция размером 128 байт обращается по адресу, удаленному от границы меньше,чем на 128 байт, то происходит пересечение границы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oldAlex 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба Спасибо, что Вы подтвердили мои мысли. Когда система выделяет раздел памяти он выравнивает границу до 2 КБ, но мы не верили и проверяли - не обнанывает. Чтобы хоть как то, пришлось последнюю посылку сокращать на 2 слова. В результате в дампе последние 2 слова пустые. Сложившаяся ситуация совершенно не устраивает, и вообще все как то абсурдно получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
voffka 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба не за что) А почему бы не выровнять адрес обращений?тогда не пришлось бы обрезать посылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oldAlex 0 21 декабря, 2006 Опубликовано 21 декабря, 2006 · Жалоба Я ж говорю - выровнено. И загружаю адреса: ххххххх00 либо ххххххх80. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tosha 0 25 декабря, 2006 Опубликовано 25 декабря, 2006 · Жалоба У меня было такое, что bridge обрывал чтение на половине, даже без выравнивания. Заменил команду чтения на Memory Read Multiple, частично помогло. Для записи делать ничего не пришлось, т.к. данные всегда улетали полностью. Сделал следующее: проверяю количество действительно переданных слов. (Даже если операция чтения/записи заканчивается по Target Disconnect without data, те данные которые успели передаться с установленными IRDY и TRDY - валидны. См. описание PCI) Потом повторяется команда, но уже не сначала а со следующего адреса, по которому данные не были переданы. А вообще странно что именно последние 2 слова не прописываются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться