Jump to content

    

Попытка реализации PTP протокола на STM32F417

Я сейчас разрабатываю программу на базе платы TE-STM32F417MCU. В ней я пытаюсь, в том числе, реализовать поддержку PTP протокола. Однако я столкнулся со следующей проблемой.Системный таймер, ответственный за PTP, генерирует прерывание, если его текущее время превышает значение, записанное в регистрах target time. При этом устанавливается флаг TSTS в регистре ETH_MACSR. Данный флаг очищается как только производится чтение из регистра ETH_MACSR, так гласит Reference manual. Однако в режиме отладки я наблюдал , что после прочтения регистра никакого снятия флага TSTS не происходит и программа застревает в обработчике. Вследствие этого пришлось ввести в обработчик цикл, который снова и снова считывает содержимое регистра ETH_MACSR

до тех пор пока флаг TSTS не очищается. Однако этого я смог добиться только в режиме отладки. Когда же я прошиваю контроллер и запуская его на исполнение без программатора, то программа застревает в этом цикле навечно, т.е флаг TSTS так и не сбрасывается. Буду благодарен любым соображениям по этому поводу . Спасибо

Share this post


Link to post
Share on other sites

Нарвался на ту же проблему с STM32F407 на Discovery. При чем, если читать состояние этого флага в регистре ETH->MACSR с помощью ST-LINK в окне дебаггера , то этот флажок успешно сбрасывается! А изнутри - никак!

Может есть прогресс в этом вопросе с февраля?

Edited by Sekat

Share this post


Link to post
Share on other sites

К сожалению, нет. В итоге, я использовал трансивер физического уровня dp83640 с поддержкой протокола IEE 1588 и на его основе успешно реализовал поддержку протокола PTP в своём проекте. Я задавал вопрос в комьюнити STM по данной проблеме и, судя потому, как они резко прекратили обсуждения, после того, как я послал им проект, в котором можно наблюдать проявление данной проблемы, я сделал вывод, что это аппаратный баг, который делает невозможным реализацию протокола PTP только средствами контроллера STMF417. Хотя возможно я и ошибаюсь.

Share this post


Link to post
Share on other sites
К сожалению, нет. В итоге, я использовал трансивер физического уровня dp83640 с поддержкой протокола IEE 1588 и на его основе успешно реализовал поддержку протокола PTP в своём проекте. Я задавал вопрос в комьюнити STM по данной проблеме и, судя потому, как они резко прекратили обсуждения, после того, как я послал им проект, в котором можно наблюдать проявление данной проблемы, я сделал вывод, что это аппаратный баг, который делает невозможным реализацию протокола PTP только средствами контроллера STMF417. Хотя возможно я и ошибаюсь.

 

Спасибо за ответ.

Да. Видел я этот тред в коммьюнити, даже там тоже написал. Относительно официальной поддержки - действительно, по опыту предыдущих общений с СТ -очень тяжело чего-либо добиться. Реализация в трансивере - выход из положения, однако для моего проекта это существенно менее удобно.

 

Не уверен что все так совсем плохо для реализации только средствами STM.

1. PTP можно реализовать и без этого прерывания средствами только контроллера, практически без ущерба для точности.

2. У меня меня есть несколько иные планы на это прерывание от таймера (не для целей PTP), которые так же надеюсь реализовать иными методами, однако без привлечения дополнительно аппаратного обеспечения.

 

Конечно же нормальная работа этого прерывания облегчила бы жизнь, однако официально писать им в поддержку по этому поводу не стану - жалко времени.

 

Share this post


Link to post
Share on other sites
Добрый день. Столкнулся с той же самой проблемой на stm32f417.

Ваша тема на форуме st?

Подскажите, как решили данную проблему. Если возможно, выложите исходный код.

Да. Проблема преодолена.

С Новым Годом! Держите Новогодний подарок:

       if (ETH->MACSR & ETH_MACSR_TSTS){
// Есть прерывание от "будильника PTP"
       ETH->PTPTTHR=ETH->PTPTSHR+MyConst;// Переустановить будильник
       if(ETH->PTPTSSR&ETH_PTP_FLAG_TSTTR){// Эта команда очищает не только флаг ETH_PTP_FLAG_TSTTR, но и ETH_MACSR_TSTS. 
           ETH->PTPTSCR|=ETH_PTPTSCR_TSITE;
// Ваш код
//
}}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this