Перейти к содержанию

    

Bagler

Участник
  • Публикаций

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Вопрос прояснился. Если кому понадобится в будущем, ответ таков: В уникальном идентификаторе записана информация о кремниевой пластине, из которой сделана микросхема, о положении чипа на этой пластине, о дате производства и т.п. Adesto принципиально не раскрывает структуру этого идентификатора и лишь гарантирует его уникальность для каждого чипа.
  2. Добрый день. Для разрабатываемого девайса стоит вопрос присвоения каждому экземпляру индивидуального номера. В девайсе имеется флеш память AT25DF321A, в ней есть однократно программируемый регистр (OTP Security Register) размером 128 байт. Из них первые 64 доступны для записи пользователем, в последующие 64 производителем записано некоторое уникальное значение. В даташите сказано буквально следующее: The remaining 64-bytes of the OTP Security Register (byte locations 64 through 127) are factory programmed by Adesto® and will contain a unique value for each device. Хотелось бы не морочить голову с генерацией и записью своих собственных значений и использовать уже зашитые производителем флеши данные. К сожалению, в даташите никак не раскрыто, что же именно он записывает в это unique value. Кто сталкивался с этим вопросом, подскажите, пожалуйста. Спасибо заранее.
  3. Здравствуйте! Довелось столкнуться с довольно редким зверем - W7500. Камешек интересный, но с документацией у него так себе, может быть кто работал с ним и может подсказать. В документации об этом ни слова, но исходя из примеров от производителя можно предположить, что прерывание DMA вызывается по двум событиям: ошибке DMA и при завершении транзакции DMA. Есть ли возможность в прерывании DMA узнать какой из каналов завершил транзакцию? Контроллер DMA у них не своей собственной разработки, а готовый - PrimeCell μDMA Controller (PL230), в документации к нему такой инфы я тоже не нашёл. Подскажите, пожалуйста, если имели дело с такими железками. Спасибо заранее.
  4. Цитатаа что говорит wireshark? Wireshark помог)). Когда включаю Wireshark на прослушивание ping появляется! Выключаю - пропадает. Попробовал на другой сетевой - то же самое. Фигня какая-то... ЦитатаMAC-адрес выставляли руками? если да, то бит broadcast-а ненароком не поставили? Проверил ещё раз, всё нормально, бит сброшен. Цитатазаведите кусок памяти и пишите из контрольных точек ID пакета. Вам нужно всего 2 точки. Методом приближений быстро вычислите проблему. не плохие начальные срезы: выход-вход драйвера нижнего уровня, IP, ICMP(echo) послали пачку (штук 10). брэйк дебаг - смотрите где и какие проходили пакеты. проблемное место опять делите лапопалам и т.д... вплоть до инструкции языка... Сейчас попробую.
  5. Здравствуйте, уважаемые форумчане! Начал разбираться с микросхемкой Ethernet контроллером AX88796C. Использую программный стек lwIP, завести соединение удалось, данные по UDP и TCP пересылаются. Проблема в следующем: очень много пакетов теряется при передаче. При пинге пакетами по 32 байта через каждые 5 секунд теряется 83% пакетов, причём проходит ровно каждый шестой пакет. Время пинга 3-4мс - в норме. Увеличивая паузу между пингами, процент потерь падает пропорционально. Плата соединена с сетевой картой компа напрямую, никаких свитчей между ними нет. Похоже, что переполняется некий буфер приёма, который освобождается со временем. Какой и где - пока не пойму. Чтение даташита ситуацию не прояснило. Кто сталкивался с подобным, подскажите пожалуйста в чём проблема. Лог пинга: КодAddress;Date;Time;Status;Responce 192.168.1.181;01.10.2014;14:24:25;Good;Replay from 192.168.1.181: bytes=32 time=7ms TTL=255 192.168.1.181;01.10.2014;14:24:32;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:24:38;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:24:44;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:24:50;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:24:56;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:02;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:07;Bad;Replay from 192.168.1.181: bytes=32 time=4ms TTL=255 192.168.1.181;01.10.2014;14:25:13;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:19;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:26;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:33;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:40;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:45;Bad;Replay from 192.168.1.181: bytes=32 time=3ms TTL=255 192.168.1.181;01.10.2014;14:25:51;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:25:58;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:04;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:11;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:18;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:23;Bad;Replay from 192.168.1.181: bytes=32 time=3ms TTL=255 192.168.1.181;01.10.2014;14:26:29;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:36;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:43;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:49;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:26:56;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:27:01;Bad;Replay from 192.168.1.181: bytes=32 time=3ms TTL=255 192.168.1.181;01.10.2014;14:27:08;Bad;Request Timed Out 192.168.1.181;01.10.2014;14:27:14;Bad;Request Timed Out Настройки чипа взяты из примера AN00032 от Energy Micro, тоже приведу их: Код/*Software Reset*/   axspi_write_reg(PSR_RESET, P0_PSR);   axspi_write_reg(PSR_RESET_CLR, P0_PSR);   /* Make sure AX88796C is ready */   timer_reset();   while (1)   {     tmp16 = axspi_read_reg(P0_PSR);     if ((tmp16 & PSR_DEV_READY) && (tmp16 != 0xFFFF))     {       break;     }     if (timer_tick() > 2000)     {       LWIP_DEBUGF(NETIF_DEBUG, ("Device not ready..\n\r"));       /* return 0; */     }   }   tmp16 = axspi_read_reg(P0_BOR);   while (1)   {     tmp16 = axspi_read_reg(P0_BOR);     if (tmp16 == 0x1234) break;   }   /*Register compresion = 0 */   tmp16 = axspi_read_reg(P4_SPICR);   axspi_write_reg((tmp16 & ~(SPICR_RCEN | SPICR_QCEN)), P4_SPICR);   /*Set mac for AX88796C chip*/   ax88796c_set_mac_addr(netif);   /*Set crc*/   ax_set_csums();   /* Stuffing packet */   tmp16 = axspi_read_reg(P1_RXBSPCR);   /* Disable stuffing packet */   /* Enable stuffing packet */   axspi_write_reg(tmp16 | RXBSPCR_STUF_ENABLE, P1_RXBSPCR);   /* Enable RX packet process */   axspi_write_reg(RPPER_RXEN, P1_RPPER);   /*set INT pin */   tmp16 = axspi_read_reg(P0_FER);   tmp16 = (tmp16 | FER_RXEN | FER_TXEN | FER_BSWAP | FER_IRQ_PULL | FER_INTLO);   axspi_write_reg(tmp16, P0_FER);   /*set PHY */   ax_phy_init(); /**************************************************************************//** * Function Name: ax_phy_init * Purpose: phy initialize procedure. * Params:    none * Returns:    none * Note: *****************************************************************************/ void ax_phy_init(void) {   uint16_t tmp16;   /* Setup LED mode */   axspi_write_reg((LCR_LED0_EN | LCR_LED0_DUPLEX | LCR_LED1_EN |                    LCR_LED1_100MODE), P2_LCR0);   tmp16 = axspi_read_reg(P2_LCR1);   axspi_write_reg((tmp16 & LCR_LED2_MASK) | LCR_LED2_EN | LCR_LED2_LINK, P2_LCR1);   tmp16 = (POOLCR_PHYID(0x10) | POOLCR_POLL_EN | POOLCR_POLL_FLOWCTRL | POOLCR_POLL_BMCR);   axspi_write_reg(tmp16, P2_POOLCR);   ax88796c_mdio_write(0x10, 0x04, SPEED_DUPLEX_AUTO);   ax88796c_mdio_write(0x10, 0x00, RESTART_AUTONEG); } /**************************************************************************//** * Function Name: etherdev_init * Purpose: ax88796 initialize procedure. * Params: * Returns:    none * Note: *****************************************************************************/ static void ax88796c_mdio_write(uint16_t phy_id, uint16_t loc, uint16_t val) {   uint16_t timeout;   uint16_t tmp16;   axspi_write_reg(val, P2_MDIODR);   axspi_write_reg((MDIOCR_RADDR(loc) | MDIOCR_FADDR(phy_id) | MDIOCR_WRITE), P2_MDIOCR);   for (timeout = 0; timeout < 10000; timeout++)   {     tmp16 = axspi_read_reg(P2_MDIOCR);     if ((tmp16 & MDIOCR_VALID) != 0)     {       break;     }   } } Впервые пишу сюда, так что не обессудьте если что не так))