делал ЦАП на R2R... и на быстрой ШИМ...
LEVV2006 писал(а):зависает если большую нагрузку подключать в соседнюю розетку 220в.
LEVV2006 писал(а):какие мне необходимо проверять статус регистры что понять что конкретно зависло?
в идеале прочитать все регистры))
Добавлено after 17 minutes 12 seconds:а по моему это глючная библиотека... которая не работает в условиях помех...
я не использую библиотек... у меня ничего никогда не зависает...
ну тогда надо сидеть и разбираться))
W5500 состоит из двух частей - физический уровень и ядро... для обработки пакетов...
почти все регистры поддерживают чтение / запись
выше кидал исходники
регистр 0x2E отвечает за физический уровень.
////////////////////////////////////////////////////////////////// W5500 PHY:
// перед настройкой PHY сделать программный Cброс PHY:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x2E; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
tx=0x00; SPI(); // Data -0x00
tx=0x00; SPI(); // Data -0x00
PORTB.0=1; // SS W5500
// пишем режим PHY:
// 1... .... RST - 1.
// .1.. .... программная настройка режима - 1
// ..0. .... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// ...0 .... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// .... 1... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// .... .1.. Duplex Status
// .... ..0. Speed Status
// .... ...1 Link Status
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x2E; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
tx=0xC8; SPI(); // Data -0xC8 (10 Мбит/с, Full-duplex)
tx=0x00; SPI(); // Data -0x00
PORTB.0=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
можно его читать и контролировать Link. (Link дублируется жёлтым диодом).
когда отвалится Link мы об этом узнает прочитав этот регистр.
дальше можно прочитать и остальные регистры...
////////////////////////////////////////////////////////// настройка W5500:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x01; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
// -шлюз
tx=192; SPI(); // Gateway Address (GAR0) (0x0001 - Address)
tx=168; SPI(); // Gateway Address (GAR1) (0x0002 - Address)
tx=0; SPI(); // Gateway Address (GAR2) (0x0003 - Address)
tx=1; SPI(); // Gateway Address (GAR3) (0x0004 - Address)
// -маска
tx=255; SPI(); // Subnet Mask Address (SUBR0) (0x0005 - Address)
tx=255; SPI(); // Subnet Mask Address (SUBR1) (0x0006 - Address)
tx=255; SPI(); // Subnet Mask Address (SUBR2) (0x0007 - Address)
tx=0; SPI(); // Subnet Mask Address (SUBR3) (0x0008 - Address)
// -MAC (Wiznet_01:02:03)
tx=0x00; SPI(); // Source Hardware Address (SHAR0) (0x0009 - Address)
tx=0x08; SPI(); // Source Hardware Address (SHAR1) (0x000A - Address)
tx=0xDC; SPI(); // Source Hardware Address (SHAR2) (0x000B - Address)
tx=0x01; SPI(); // Source Hardware Address (SHAR3) (0x000C - Address)
tx=0x02; SPI(); // Source Hardware Address (SHAR4) (0x000D - Address)
tx=0x03; SPI(); // Source Hardware Address (SHAR5) (0x000E - Address)
// -IP
tx=192; SPI(); // Source IP Address (SIPR0) (0x000F - Address)
tx=168; SPI(); // Source IP Address (SIPR1) (0x0010 - Address)
tx=0; SPI(); // Source IP Address (SIPR2) (0x0011 - Address)
tx=3; SPI(); // Source IP Address (SIPR3) (0x0012 - Address)
PORTB.0=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////// Socket_2 - TCP:
// Протокол: пишем протокол TCP Socket_2:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x00; SPI(); tx=0x4C; SPI(); // Address Registers + Control Registers
tx=0x01; SPI(); // Data -0x01 (protocol TCP).
PORTB.0=1; // SS W5500
// Порт: пишем Socket_2 Source Port:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x04; SPI(); tx=0x4C; SPI(); // Address Registers + Control Registers
tx=0x00; SPI(); // Data -0x00 (порт 00)
tx=0x50; SPI(); // Data -0x50 (порт 80)
PORTB.0=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
Socket_2_OPEN:
////////////////////////////////////////////////////////////////////////////////
// пишем команду OPEN Socket_2:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x01; SPI(); tx=0x4C; SPI(); // Address Registers + Control Registers
tx=0x01; SPI(); // Data -0x01 (OPEN)
PORTB.0=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
// пишем команду LISTEN Socket_2:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x01; SPI(); tx=0x4C; SPI(); // Address Registers + Control Registers
tx=0x02; SPI(); // Data -0x02 (LISTEN)
PORTB.0=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
Socket_2_LISTEN:
////////////////////////////////////////////////////////////////////////////////
// читаем статус Socket_2:
PORTB.0=0; // SS W5500
tx=0x00; SPI(); tx=0x03; SPI(); tx=0x48; SPI(); // Address Registers + Control Registers
tx=0x00; SPI(); x1 = rx; // Data -0x14 (SOCK_LISTEN)
PORTB.0=1; // SS W5500
///////////////////////////////////////////////////////// Socket_2_LISTEN: (Ждём SYN):
//0x14-LISTEN, 0x16-SYN, 0x17-ESTABLISHED, 0x11-DISCON,
//0x1C-CLOSE_WAIT, 0x18-FIN_WAIT, 0x00-FIN/ACK.
if (x1 != 0x14) goto Socket_2_ESTABLISHED; // > Socket_2_ESTABLISHED
goto Socket_2_LISTEN; // > Socket_2_LISTEN
////////////////////////////////////////////////////////////////////////////////
...
по этим регистрам можно определить в каком режиме находится W5500 в данный момент:
режим 0x14-LISTEN,
режим 0x16-SYN,
режим 0x17-ESTABLISHED,
режим 0x11-DISCON,
режим 0x1C-CLOSE_WAIT,
режим 0x18-FIN_WAIT,
режим 0x00-FIN/ACK.
...
может просто W5500 завис в одном из этих режимов... и дальше программа не работает))
а можно прочитать и все остальные регистры... регистры дополнительной настройки... но это самые главные регистры.