проблемы с получением доступа к EEPROM у чипа i82546 (эзернет)

Тема в разделе "WASM.ELECTRONICS", создана пользователем Arisu, 5 июн 2007.

  1. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    Мучаю этот нещасный интеловский изернет с его епромом выносным.

    Столкнулся с непоняткой: по какой-то причине чип (контроллер интеловский) не даёт разрешение на работу с его епромом. Хотя я всё делаю по инструкции.

    Вот в даташите написано:

    To directly access the eeprom, software should follow these steps:
    1. Write a 1b to the EEPROM request bit (EECD.REQ)
    2. Read the EEPROM grant bit (EECD.GNT) until it becomes 1b. It remains 0b as long as the hardware is accessing the EEPROM.
    3. можете читать и писать теперь

    Вот мой код:

    (
    в регистре EECD:
    6 бит это REQ,
    7 бит это GNT,
    5-4 биты это FWE (доступ на запись)
    )

    (
    функции InDword и OutDword соответственно в порты пишут и читают.
    )

    Код (Text):
    1. /* ----------------------------------------------------------------- */
    2. void GntEEPROMAcces( DWORD *EECDAddr )
    3. {
    4.     DWORD Reg;
    5.    
    6.         /* reset REQ, GNT and FWE */
    7.         FreeEEPROMAccess( EECDAddr ); //(тут просто нолики в эти биты записываются для надёжности)
    8.    
    9.         /* 1b to REQ */
    10.         Reg = InDword( *EECDAddr );
    11.         Reg = Reg | 0x40;
    12.         OutDword( Reg, *EECDAddr );
    13.        
    14.         /* waiting 1b from GNT */
    15.         while ( 1 ) {
    16.             Reg = InDword( *EECDAddr );
    17.             if ( Reg & 0x80 ) break;
    18.         }
    19.        
    20.         /* 10b to FWE */
    21.         Reg = InDword( *EECDAddr );
    22.         Reg = Reg & 0xFFFFFFCF;
    23.         Reg = Reg & 0x20;
    24.         OutDword( Reg, *EECDAddr );
    25.    
    26.         return;
    27. } /* --------------------------------------------------------------- */
    Вот и весь урюк в том, что вот вот этой еденицы в GNT я могу ждать хоть до завтрашнего утра.. не ставит он её и всё тут.
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Может быть вводить\выводить не двойные слова, а байты? Или в документации так и написано?
     
  3. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    регистры DWORDовые и ввод вывод тоже 32-ух битный. это точно