Непонятки ENC28J60


Ковыряясь с ENC28J60 обнаружил неприятный глюк/баг/косяк теряются пакеты, немного, но относительно часто и особенно при интенсивном обмене стало сильно заметно при использовании DMA. ковыряясь дальше обнаружил, что по какойто причине бит PHCON1_PDPXMD переключается сам собой и теряются пакеты, ибо сказаны в датащите, что при переключении режима дуплекса поведение не определено и пакеты могут терятся. Стэк от Лайфловер, его уже пытал не сознается :) да и маловероятно, что это, что-то из стэка.

Создал тикет в микрочипе:

Area: Analog/Interface Products
Product Group: SAMINT
Product: ENC28J60

Problem Description:
Hi,
we used and ENC28J60 in small web servers w STM32F103 and STM32F303 w (SPI speed 18MHz) hosts and I'm trying to find the cause of packets lost.
Device almost works well but from time to time it losts a packets, not too much but without any reason — as I found incoming packets.
for example ~1 packets per ~1000 -5000 incoming in comm port mode ~100 packets per second rate, during udp connection and maybe ~5 for 600 packets for HTTP file transfer per second.
Looked at memory occupied by rx buffer and incoming packet count — they are ok during network exchange( rx/tx memory divided half/half).
I use full duplex mode, аs found in datasheet PHCON1_PDPXMD and MACON3_FULDPX should be both in 1 for fullduplex or both 0 for half duplex, otherwise behavior indeterminated and may loose a packets.
What I found strange that during work bit PHCON1_PDPXMD is switched by something from one to zero and back many times during network exchange.
Why PHCON1_PDPXMD is switching and is it a cause of packet loss?

Ответ (если кратко то да при переключении такое может происходить почему переключается хз проверьте плату еще раз :) ):

Problem Resolution:
Hello Yuri,

I apologize for the delayed response to this ticket. We are experiencing high ticket volume. So, it took more time to revert back to you.

It is possible that due to PDPXMD bit's frequent reversal (0 to 1 and vice versa) the data is lost. The ENC28J60 datasheet describes that «LEDB is unique in that the connection of the LED is automatically read on Reset and determines how to initialize the PHCON1.PDPXMD bit. If the pin sources current to illuminate the LED, the bit is cleared on Reset and the PHY defaults to half-duplex operation. If the pin sinks current to illuminate the LED, the bit is set on Reset and the PHY defaults to full-duplex operation. Figure shows the two available options. If no LED is attached to the LEDB pin, the PDPXMD bit will reset to an indeterminate value.» So, I would check if the part is not resetting every now and then and reverting the PXPXMD bit in the half duplex mode. Also, please check if the oscillator works correctly at all the times.

While, your schematic looks okay to me, I am not sure if there are any issues while assembling it or while laying out the board. So, you might want to test on that side as well.

Проверяю так: PHCON1_PDPXMD&enc28j60_rcr16(PHCON1)
Меняется только при обмене данными т.к. выводил на светодиодик когда обмена нет то он в одном положении.

Кто еще плотно ковырялся с енцшкой видел что-то подобное?

  • -1
  • 30 марта 2015, 11:44
  • GYUR22

Комментарии (2)

RSS свернуть / развернуть
Глюкавая она, эта ENC-ка.
Кстати, он упоминает LEDB. В эррате есть рекомендация включать параллельно светодиоду резистор на 10к, иначе схема определения полярности диода может сбоить.
0
  • avatar
  • Vga
  • 30 марта 2015, 17:55
Там все равно фулдуплекс командой (без надежды на самоопределение) запускается — и я пробовал менять полярность светодиодов одна фигня, но хрен бы сним работала тупо в халфдуплекс так ведь она переключается по непонятной причине!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.