Jump to content

    

LwIP link up/down

Приветствую.

Есть ли какое-то событие/семафор/др. при срабатывании link up/down?

Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал.

Share this post


Link to post
Share on other sites
1 hour ago, doom13 said:

Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал.

Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя.

Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле?

Share this post


Link to post
Share on other sites
7 minutes ago, haker_fox said:

Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя. 

Спасибо, с этим понятно. Думал так делать, но пока пытаюсь понять. есть ли стандартная опция/возможность.

8 minutes ago, haker_fox said:

Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле?

Если кабель дёргать то сообщения в stdout кидает (если не ошибаюсь), поэтому решил, что оно само мониторит состояние сети и возможно есть какая-то возможность привязаться к данному событию.

//netif.h
#if LWIP_NETIF_LINK_CALLBACK
  /** This function is called when the netif link is set to up or down
   */
  netif_status_callback_fn link_callback;
#endif /* LWIP_NETIF_LINK_CALLBACK */
  
#if LWIP_NETIF_LINK_CALLBACK
void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback);
#endif /* LWIP_NETIF_LINK_CALLBACK */

Такое вот нахожу

Share this post


Link to post
Share on other sites
22 hours ago, haker_fox said:

Ведь о кабеле только PHY может сказать. А у неё прерываний нет...

Вот как раз у PHY обычно есть прерывания для события изменения состояния линка (например у KSZ8091 это регистр 0x1B).

Заводите выход прерывания от PHY на ногу контроллера, ловите прерыание, шлёте семафор и отрабатываете callback функцию LwIP.

Share this post


Link to post
Share on other sites
1 hour ago, ksv198 said:

Вот как раз у PHY обычно есть прерывания для события изменения состояния линка

Возможно. Видимо просмотрел. Хотя мы использовали LAN8720, возможно у неё тоже есть.

Share this post


Link to post
Share on other sites
7 hours ago, haker_fox said:

Возможно. 

Встречается косяк на платах с сетевыми сэмплами в инете - нет проводка с выхода прерывания физики на мк. посему в примерах крутят поллинг так-же... не у всех хватает терпения перерыть регистры физики в ДШ.

Share this post


Link to post
Share on other sites
2 hours ago, kolobok0 said:

не у всех хватает терпения перерыть регистры физики в ДШ.

Точно, хотя в моём случае мне дали готовое железо, и, как всегда, торопили со сроками. Сейчас посмотрел на даташит Lan8720, действительно увидел прерывания.

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