Andrey_L 0 March 25, 2020 Posted March 25, 2020 · Report post Добрый день! Столкнулся с проблемой: Есть плата собственной разработке на smartFusion2 (M2S050T-1FG484I) в ней используется встроенный блок Serdes с выходом на PCIExpress x 1. Разработка идет в среде Libero SoC 11.6 с использованием SystemBilder'a. Для простоты сделан простенький проект где встроенный процессор и Serdes связаны по шине AHB, процессор мастер, Serdes - slave. Плата подключена к шине PCIExpress через анализатор шины PCIE Lecroy Edge T1-4. Во встроенном процессоре написана простенькая программа - пришел символ по RS232 - выдать в Serdes 32разр. фиксированное слово по фиксированному адресу. После включения питания - все устойчиво работает - нажал кнопку в терминалке - получил захваченную транзакцию MemWr на анализаторе. Всё работает под Windows 7 - плата нормально видится (как неопознанное устр-во, драйверов пока не написали...) Если сделать перезагрузку компьютера с платой без выключения питания - всё также хорошо восстанавливается и работает. Проблема в том что в плате необходимо предусмотреть возможность перезагрузки встроенного процессора, например от внешнего WDT таймера, когда например, встроенный процессор повис. Сброс встроенного процессора возможен только через один вход - FAB_RESET. Подключение выхода внешнего WDT (он на плате есть) к контакту FAB_RESET приводит к перезагрузке встроенного процессора и всей его периферии (в том числе и SerDes'a). Вход ручного сброса этого WDT подключен с сбросу шины PCIe. Если сброс платы происходит от сброса шины PCIe - то всё ок (см. выше - это перезагрузка компьютера без выкл. питания), если сброс платы происходит от срабатывания WDT - возникает проблема. После этого сброса процессор нормально перезапускается, а вот с SerDes'ом проблемы. Он вроде бы нормально переинициализировался (в Win7 плата видна), выход встр. процессора SDIF_READY устанавливается в акт. состояние, при активности сигнала FAB_RESET'а я вижу на анализаторе PCIe транзакции LinkDown/LinkUP, кучу транзакций TS1,TS2, но при попытке записать из процессора в Serdes, последний опускает сигнал HREADY шины AHB в лог.0 (не готов) и не подымает его обратно в лог.1 (как он делает когда все работает). Транзакции MemWR на PCIE при этом нет. Возникает вопрос - кто-нибудь пытался сделать похожее, может не на Smartfusion2? Т.е перегружал SerDes подключенный к PCIe без наличия сброса с шины PCIe? Можно, конечно, поставить блокировку на сигналы сброса SerDes'a при наличии FAB_RESET'a, но мне кажется Serdes должен нормально переинициализироваться и без блокировок..... Quote Share this post Link to post Share on other sites More sharing options...
gosha-z 1 March 30, 2020 Posted March 30, 2020 · Report post Просмотрел свой PolarFire - у него сброс только со стороны PCI-Express по PERSTN, с локальной стороны сброса нет. Quote Share this post Link to post Share on other sites More sharing options...
Джеймс 0 April 1, 2020 Posted April 1, 2020 · Report post On 3/25/2020 at 10:04 AM, Andrey_L said: Добрый день! Столкнулся с проблемой: Если решение не найдете, то с этим лучше в тех. поддержкуhttps://www.microsemi.com/product-directory/product-support/4217-fpgas-socs-support Contact Information Technical support Web... только регистрацию на сайте сделайте, если нет еще Quote Share this post Link to post Share on other sites More sharing options...
Andrey_L 0 April 4, 2020 Posted April 4, 2020 · Report post Добрый день! В общем решение нашел - опишу коротенько, думаю кому-нибудь пригодится. Написали программку под QNX 6.x аналогичную Win7. Эффект был такой же, но было одно но - если после внутр. сброса на плате из платы в "root" ничего не записывать, а программу под QNX перезапустить, то дальше всё работает не повисая... Из этого был сделан вывод что "виноват" root на PCIe - он не знал что плата перезапустилась и транзакций от платы вида Link down/link up ему было не достаточно для понимания состояния платы. Возможно в этом поведении "виноват" используемый в тестовой машине старый чипсет (max - PCIe Gen1) - может все "root"'ы не реагируют на транзакции link up/down - не знаю. Попробовал под Win7 переинициализировать root - удалить/обновить устройство в диспетчере задач не помогло. Помогла кнопка включить/выключить устройство - анализатор показал, что при выключении от "root" уходит транзакция на перевод устройства в спящий режим (L1 или L2 - не помню). Кнопка "включить устройство" - от "root" уходит транзакция "link up" и всё - плата работает. В настройках Serdes'а в Libero поддержка режима L1/L2 была включена (что было бы, если была бы выключена - не знаю - экспериментов не ставил). В дальнейшем планирую сделать генерацию платой прерывания при любом запуске/перезапуске программы встроенного процессора, а драйвер в "root"е включает/выключает эту плату в обработчике этого прерывания.... Спасибо всем за помощь. Quote Share this post Link to post Share on other sites More sharing options...
Джеймс 0 April 5, 2020 Posted April 5, 2020 · Report post 10 hours ago, Andrey_L said: В общем решение нашел - опишу коротенько, думаю кому-нибудь пригодится. Написали программку под QNX 6.x аналогичную Win7. Эффект был такой же, но было одно но - Спасибо, интересно! Использование QNX вызывает уважение Quote Share this post Link to post Share on other sites More sharing options...