CS8900A

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Мое почтение, All!

Вопрос к тем, кто сопрягался с эзернетом на сабжевом чипе.
Hе могу толком послать кадр. Статус линии - в порядке, пишу команду в TXcmd,
затем длину в TXlen, проверяю TXbidERR, Ready4TXNOW, запихиваю кадр - и тишина.
TXevent не содержит ни признака ошибки, ни призкака успешной отправки.
Однако, если не трогать TXcmd и оперировать с TXlen, кадры уходт по всем
правилам. Фигня какая-то. Команду давать надо все-таки.
Кристал 3.3В, rev.D.
16 bit I/O mode, AEN посажен на землю, SBHE дергается после сброса, оперирую
адресом, данными, IOW и IOR, без прерываний и DMA. Вроде все по даташиту.
Да, кстати, на прием все работает замечательно.

Удачи тебе.
Андрей.

CS8900A
Fri Dec 26 2003 20:21, Andrey Teplyakov wrote to All:

 AT> Мое почтение, All!

 AT> Вопрос к тем, кто сопрягался с эзернетом на сабжевом чипе.
 AT> Hе могу толком послать кадр. Статус линии - в порядке, пишу команду в
 AT> TXcmd, затем длину в TXlen, проверяю TXbidERR, Ready4TXNOW, запихиваю
 AT> кадр - и тишина.
 AT> TXevent не содержит ни признака ошибки, ни призкака успешной отправки.
 AT> Однако, если не трогать TXcmd и оперировать с TXlen, кадры уходт по всем
 AT> правилам. Фигня какая-то. Команду давать надо все-таки.
 AT> Кристал 3.3В, rev.D.
 AT> 16 bit I/O mode, AEN посажен на землю, SBHE дергается после сброса,
 AT> оперирую адресом, данными, IOW и IOR, без прерываний и DMA. Вроде все по
 AT> даташиту.


Посмотри как сдесь сделано, может поможет.
Полные исходники - http://download.intrinsyc.com/supported/tools/i-boot-lite /
///////////////////////////////////////////////////////////////////////////////

// Copyright(c) 2001 Intrinsyc Software Inc. All rights reserved.
//
// Module name:
//
//      ethernet_cs8900a.c
/
// tx_packet_ethernet
// PURPOSE: Transmits a packet.
// PARAMS:  (IN) u16 * to return the MAC address.
// RETURNS: 1 for success, 0 for failure.
///////////////////////////////////////////////////////////////////////////////
/
int
tx_packet_ethernet(u8 *data,
                   u16 size)
{
   int i = 0;
   u16 temp = 0;
   u32 time = get_time_timer();

   //initiate tx sequence
   writecs(TX_CMD_REQ, TX_AFTER_ALL | TX_PAD);
   writecs(TX_LENGTH, size);

   //wait for the chip to free room in it's internal buffer
   while(!(readcs(BSR) & READY_FOR_TX_NOW))
   {
      if(time < get_time_timer() - NET_TIMEOUT)
      {
         return 0;
      }
   }

   //give the packet to the chip
   for(i = 0; i < (size / sizeof(u16));i++)
   {
      *(volatile u16 *)(BASE_ADDR + TX_FRAME_PORT) =  *(u16 *)data;
      data += sizeof(u16);
   }

   //if we are sending a packet of uneven size, send the last byte.
   if(size % sizeof(u16))
   {
      *(volatile u16 *)(BASE_ADDR + TX_FRAME_PORT) = *data;
   }

   //check for tx errors
   temp = readcs(TX_EVENT);
   if(temp &
      (TX_EXCESSIVE_COL |
       TX_JABBER |
       TX_LOST_CRS |
       TX_OUT_OF_WINDOW |
       TX_SQE_ERROR))
   {
      return 0;
   }

   //if there are no errors, assume everything is ok
   return 1;
}

/Sam [samoutin(ат)hotbox.ru]


Site Timeline