Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему PCIe может повесить windows?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
dmitry-tomsk
Столкнулся с проблемой отладки PCIe аппаратного блока Virtex-5. Свой контроллер осуществляет чтение из памяти PC по pcie - отправляет mrd запросы, ждёт cpld ответы. Если обмен типа - запрос передачи блока (размер до 1 мбайта, не влияет), затем ожидание окончания, затем следующий запрос - всё нормально. Если ожидания нет и чтение идёт непрерывно - виснет винда, а обмен идёт! Чипскоп показывает непрерывный поток cpld в ответ на mrd запросы. Конфигурация блока - completion streaming, до 32 запросов на чтение перед получением первого ответа. Где можно поискать ошибку? Уже и идей то не осталось, всё проверил. За состоянием буферов на материнке следил чипскопом, в нуле только non-posted data, причём всегда. Передача данных в память PC спокойно идёт на полной скорости (mwr запросы).
Voiceц
Цитата(dmitry-tomsk @ Oct 1 2010, 21:48) *
Столкнулся с проблемой отладки PCIe аппаратного блока Virtex-5. Свой контроллер осуществляет чтение из памяти PC по pcie - отправляет mrd запросы, ждёт cpld ответы. Если обмен типа - запрос передачи блока (размер до 1 мбайта, не влияет), затем ожидание окончания, затем следующий запрос - всё нормально. Если ожидания нет и чтение идёт непрерывно - виснет винда, а обмен идёт! Чипскоп показывает непрерывный поток cpld в ответ на mrd запросы. Конфигурация блока - completion streaming, до 32 запросов на чтение перед получением первого ответа. Где можно поискать ошибку? Уже и идей то не осталось, всё проверил. За состоянием буферов на материнке следил чипскопом, в нуле только non-posted data, причём всегда. Передача данных в память PC спокойно идёт на полной скорости (mwr запросы).

Попробуйте не пересекать в запросе границу адреса 4 кБ, что означает в вашем случае (размер запроса до 1 МБ) запрашивать данные не за один раз, а за несколько. Вот выдержка из протокола (2.0), раздел 2.2.7:
Requests must not specify an Address/Length combination which causes a Memory Space access to cross a 4-KB boundary.
• Receivers may optionally check for violations of this rule. If a Receiver implementing this check determines that a TLP violates this rule, the TLP is a Malformed TLP
♦ If checked, this is a reported error associated with the Receiving Port (see Section 6.2)
Удачи.
dmitry-tomsk
Границы блока не пересекаются. Тесты целостности данных проходят. И при паузах между обменами ОС не виснет.
vmp
Может быть вы просто занимаете всю полосу пропускания памяти или контроллера? В результате процессору нет возможности читать из памяти команды и данные, что выглядит как "зависание".
Если после "зависания" остановить обмены, система отвиснет?
dmitry-tomsk
Цитата(vmp @ Oct 4 2010, 10:41) *
Может быть вы просто занимаете всю полосу пропускания памяти или контроллера? В результате процессору нет возможности читать из памяти команды и данные, что выглядит как "зависание".
Если после "зависания" остановить обмены, система отвиснет?

PCIex1 никак не может занять всю полосу, кроме того передача из устройства в память РС на полной скорости и непрерывно заисания не производит. Была идея, что кто-то пытается прочитать из устройства, например, регистр состояния, а входной буфер занят. Вот драйвер в ОС и ждёт ответа, но ведь это должно контроллироваться враппером или самим блоком PCIe V-5. Да и как это проверить?
dmitry-tomsk
Дополню, что если completion streaming отключить и ограничить число запросов до 8/MAX_READ_SIZE/RCB (4 на моей материнке), то зависания не происходит, но скорость чтения всего 165 МБайт в секунду, против 203 МБайт в секунду скорости чтения.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.