Jump to content

    

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

Recommended Posts

proga

Я сейчас разрабатываю программу на базе платы 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

sekat

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

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

Edited by Sekat

Share this post


Link to post
Share on other sites

proga

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

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

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

 

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

 

Share this post


Link to post
Share on other sites

hasuman_

Добрый день. Столкнулся с той же самой проблемой на stm32f417.

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

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

Share this post


Link to post
Share on other sites

sekat
Добрый день. Столкнулся с той же самой проблемой на 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.