logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[LPC2368+DP83848I]Nie wysyła ramek, odbiera dobrze.

Szteker 23 Gru 2009 20:15 1664 2
REKLAMA
  • #1 7428399
    Szteker
    Poziom 11  
    Posty: 30
    Ocena: 25
    Witam.
    Powoli mi się kończy czas i pomysły ,dlatego proszę szanownych kolegów o pomoc.
    Układ dogaduje się z PC co do prędkości i trybu transmisji (auto-negocjacja).Konfiguracja rejestrów PHY również przebiega poprawnie.Ramki wysłane z kompa dochodzą .W drugą stronę ,DP83848 miga diodą podczas wysyłania ,ale nic nie odbieram na kompie.Funkcje inicjalizujące , wysyłające,odbierające porównywałem z przykładami z innych for ,oraz ze strony nxp i wydaje mi się że jest ok.Cały kod trochę zajmuje więc wkleiłem tylko ten znaczący wg mnie.Używam kabla krzyżowanego .

    Funkcja wysyłająca ramkę
    /*--------------------------- EMAC_SendPacket ---------------------------------*/
    
    BOOL_32 EMAC_SendPacket(void *pPacket, UNS_32 size)
    {
    	UNS_32 	Index;
    	UNS_32	IndexNext = MAC_TXPRODUCEINDEX + 1;
    	
      if(size == 0)
      {
        return(TRUE);
      }
      if(IndexNext > MAC_TXDESCRIPTORNUM)
      {
        IndexNext = 0;
      }
     
      if(IndexNext == MAC_TXCONSUMEINDEX)
      {
        return(FALSE);
      }
      Index = MAC_TXPRODUCEINDEX;
      if (size > ETH_FRAG_SIZE)
      	size = ETH_FRAG_SIZE;
      memcpy((unsigned int *)TX_BUF(Index),pPacket,size);  
      TX_DESC_CTRL(Index) &= ~0x7ff;
      TX_DESC_CTRL(Index) |= (((size - 1) & 0x7ff)|0x70000000);
      MAC_TXPRODUCEINDEX = IndexNext;
      for(z=0;z<10000;z++);	
      return(TRUE);
    }


    Konfiguracja pamięci,DMA dla wysyłania
    static void tx_descr_init (void) {
      UNS_32 i;
    
      for (i = 0; i < NUM_TX_FRAG; i++) {
        TX_DESC_PACKET(i) = TX_BUF(i);
        TX_DESC_CTRL(i)   = (1<<31) | (1<<30) | (1<<29) | (1<<28) | (1<<26) | (ETH_FRAG_SIZE-1);
        TX_STAT_INFO(i)   = 0;
      }
    
      /* Set EMAC Transmit Descriptor Registers. */
      MAC_TXDESCRIPTOR    = TX_DESC_BASE;
      MAC_TXSTATUS        = TX_STAT_BASE;
      MAC_TXDESCRIPTORNUM = NUM_TX_FRAG-1;
    
      /* Tx Descriptors Point to 0 */
      MAC_TXPRODUCEINDEX  = 0;
    }
    
  • REKLAMA
  • #2 7428517
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Szteker napisał:
    W drugą stronę ,DP83848 miga diodą podczas wysyłania ,ale nic nie odbieram na kompie.


    Sprawdzasz to Etheral'em?
  • #3 7428717
    Szteker
    Poziom 11  
    Posty: 30
    Ocena: 25
    Sprawdzałem WireShark(chyba jakiś nowy ethereal) ,CommView .Zainstaluje Etheral'a jak sie uporam z systemem .Jak się psuje to wszystko na raz.

    Dzisiaj sprawdzałem rejestry testowe w MAC :MAC_TSV0,MAC_TSV1 ,wszystko ok żadnych błędów.
    Później użyłem kabla prostego dalej to samo .(DP83848 rozróżnia Auto-MDIX)
    Na innym kompie też to samo.
    Załączyłem loopback w PHY również nie wysyła.
    PCB projektowałem na bazie schematu MCB2300 (płytka Keila) ,dorzuciłem tam jeszcze rezystory wg specyfikacji DP83848.
    MCB2300
    Gniazdko J0011D21 .

    Problem rozwiązany .Wstyd się przyznać.Błąd na płytce ,zamieniona linia TXD1 z TXD0 .
REKLAMA