Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2364 EMAC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
khorght
Здравствуйте,форумчане. Пытаюсь запустить EMAC на LPC2364, PHY KSZ8031RNL, инициализация проходит как положено, PHY стартует, на REF_CLK 50Мгц как положено,пробовал два варианта объвяления массивов дескрипторов-буфферов и в обоих вариантах получаю следующее - вижу что пакеты приходят и якобы уходят(про адский косяк с тем что в данной серии первый отправленный пакет не обновляет TxConsumeIndex регистр молчу) но судя тому что есть в памяти по адресам буферов и контрол дескрипторов... там ничего не меняется, тоесть я получаю 4 пакета, отпускаю их вижу(инкрементирую соответстующий регистр), что пришли еще пакеты,но судя по выводу в терминал данные там не меняются, тоесть RxProduceIndex показывает что пришли новые пакеты а данные старые, тоесть EMAC не записал полученные пакеты и в памяти в дебаге я вижу старые данные по соответствующим адресам. проект в IAR 6.50.3, icf стандартный для Flash, ничего не менял, BASE адрес EMAC DMA 0x7FE00000, все дескрипторы и буферы сидят в следующих 16кб, как и положено. Вот оба варианта попытки инициалзицации:

Этот своровал из примера для 24xx
Код
/* EMAC Memory Buffer configuration for 16K Ethernet RAM. */
#define NUM_RX_FRAG         4           /* Num.of RX Fragments 4*1536= 6.0kB */
#define NUM_TX_FRAG         2           /* Num.of TX Fragments 3*1536= 4.6kB */
#define ETH_FRAG_SIZE       1536        /* Packet Fragment size 1536 Bytes   */

#define ETH_MAX_FLEN        1536        /* Max. Ethernet Frame Size          */

/* EMAC variables located in 16K Ethernet SRAM */
#define RX_DESC_BASE        0x7FE00000
#define RX_STAT_BASE        (RX_DESC_BASE + NUM_RX_FRAG*8)
#define TX_DESC_BASE        (RX_STAT_BASE + NUM_RX_FRAG*8)
#define TX_STAT_BASE        (TX_DESC_BASE + NUM_TX_FRAG*8)
#define RX_BUF_BASE         (TX_STAT_BASE + NUM_TX_FRAG*4)
#define TX_BUF_BASE         (RX_BUF_BASE  + NUM_RX_FRAG*ETH_FRAG_SIZE)

/* RX and TX descriptor and status definitions. */
#define RX_DESC_PACKET(i)   (*(unsigned int *)(RX_DESC_BASE   + 8*i))
#define RX_DESC_CTRL(i)     (*(unsigned int *)(RX_DESC_BASE+4 + 8*i))
#define RX_STAT_INFO(i)     (*(unsigned int *)(RX_STAT_BASE   + 8*i))
#define RX_STAT_HASHCRC(i)  (*(unsigned int *)(RX_STAT_BASE+4 + 8*i))
#define TX_DESC_PACKET(i)   (*(unsigned int *)(TX_DESC_BASE   + 8*i))
#define TX_DESC_CTRL(i)     (*(unsigned int *)(TX_DESC_BASE+4 + 8*i))
#define TX_STAT_INFO(i)     (*(unsigned int *)(TX_STAT_BASE   + 4*i))
#define RX_BUF(i)           (RX_BUF_BASE + ETH_FRAG_SIZE*i)
#define TX_BUF(i)           (TX_BUF_BASE + ETH_FRAG_SIZE*i)


это первоначальный

Код
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=4
ETH_DescrTypeDef RxDscrTab[ETH_RXBUFNB];/* Ethernet Rx Descriptor */
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=4
ETH_DescrTypeDef TxDscrTab[ETH_TXBUFNB];/* Ethernet Tx Descriptor */
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=8
ETH_RxStatusTypeDef RxStatusTab[ETH_RXBUFNB];/* Ethernet Rx Status */
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=4
ETH_TxStatusTypeDef TxStatusTab[ETH_TXBUFNB];/* Ethernet Tx Status */
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=4
uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE]; /* Ethernet Receive Buffer */
#pragma location="EMAC_DMA_RAM"
#pragma data_alignment=4
uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE]; /* Ethernet Transmit Buffer */



Гугление результатов не дало, кто-то натыкался на такую проблему в lpc17xx,но там как раз парень писал буферы в общее ОЗУ, куда у EMAC доступа нет. Подскажите в чем может быть дело. Спасибо.
khorght
пошел топорным методом - подогнал пример из FreeRTOS, сверил построчно, у меня делается ровно то-же самое, только через самописную индус-стайл библиотеку. проверяю пример без подвязки lwip, тупо выводя в терминал полученный пакет или посылая arp(arp стопроцентно нормальный, взят из проекта на stm32, там всё работало, весь самописный стэк протоколов отрабатывал как положено) результат - пакет якобы ушел, а wireshark молчит, регистр TSV0 вещает, что у меня length error(вычесть единичку из длины пакета перед тем как писать в дескриптор не забыл), пакеты якобы, приходят но у всех поголовно length error, crc error и т.д. и самое расчудесное, что если посмотреть что же там пришло... оказывается у пакетов перманентно пустые первые 12 байт, тоесть мак-адреса Езернет пакета куда-то исчезают или в лучшем случае иногда пакет забит 0xFF в первых 63 байтах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.