ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
247527
Ralex (12.04.2011 15:08, просмотров: 3271)
Вопрос знатокам работы PCI шины Речь идет об обычной PCI 2.2, не PCIe. В общем, есть у меня SOC с PCI controller, который содержит так же арбитр. К этому SOC подсоединены две микросхемы - RTL8100 (чип ethernet) и SII3512 (чип SATA). Сигналы INTA их обьединены по И и заведены на прерывание процессора SOC, а так же раздельно на GPIO чтобы понять кто вызвал INTA. На встроенный в SOC арбитр шины заведены REQA от RTL8100, REQB от SII3512. Он им выдает соответственно GNTA, GNTB чтобы дать побыть мастером. Вопрос в чем, по отдельности работают прекрасно, вместе при мизерной нагрузке тоже, но стоит нагрузке чуток возрасти (да и то, копеечные в общем-то значения - 1-2 мегабайта в секунду суммарно прокачивается по PCI в этот момент), как случается какой-то глитч - сначала драйвер RTL8100 ругается что микросхема не может ни выгрузить в память приемный буфер, ни загрузить буфер для отправки из памяти. КОнтроллер SATA кричит что не дождался готовности SATA устройства для следующей операции и так же отваливается. На шине в этот момент происходит нечто нечеловеческое - с большой скоростью то LAN то SATA взводят свои REQ, им поочереди приходит GNT, после чего похоже идет аборт или еще что-то мрачнее, и микросхема получившая GNT бросает шину, которая тут же уходит на управление её соперницы. Ну и всё это циклит бесконечно, очевидно что никакие транзакции пройти не смогут в такой ситуации. PCI Latency стоит у обоих в 64 такта, но судя по осциллу они даже не вырабатывают эти 64 такта. Непонятно какие там могут быть транзакции когда драйвер уже упал и ничего не требует от микросхемы, что же тогда заставляет её требовать управление шиной? Зачем? Ну и собственно что мешает им работать нормально совместно? Есть ли какие-то идеи по этому поводу? Есть ли способы получить больше информации если нет лог. анализатора способного писать и разбирать шину?