Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Hardware (аппаратные средства) > проблемы с получением доступа к EEPROM у чипа i82546 (эзернет)


Автор: Arisu 06.06.07, 07:20
Мучаю этот нещасный интеловский изернет (82546GB) с его епромом выносным.

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

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

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 соответственно в порты пишут и читают.
)

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    /* ----------------------------------------------------------------- */
    void GntEEPROMAcces( DWORD *EECDAddr )
    {
    DWORD Reg;
     
    /* reset REQ, GNT and FWE */
    FreeEEPROMAccess( EECDAddr ); //(тут просто нолики в эти биты записываются для надёжности)
     
    /* 1b to REQ */
    Reg = InDword( *EECDAddr );
    Reg = Reg | 0x40;
    OutDword( Reg, *EECDAddr );
     
    /* waiting 1b from GNT */
    while ( 1 ) {
    Reg = InDword( *EECDAddr );
    if ( Reg & 0x80 ) break;
    }
     
    /* 10b to FWE */
    Reg = InDword( *EECDAddr );
    Reg = Reg & 0xFFFFFFCF;
    Reg = Reg & 0x20;
    OutDword( Reg, *EECDAddr );
     
    return;
    } /* --------------------------------------------------------------- */

Вот и весь урюк в том, что вот вот этой еденицы в GNT я могу ждать хоть до завтрашнего утра.. не ставит он её и всё тут.

ЗЫ
на всякий:
EECD это 32 битный регистр и ввод/вывод у него тоже 32-битный.
ЗЫ2
SPI тут не причём! до него дело ещё не дошло! я пока общаюсь только с Master чипом

Автор: kolobok0 06.06.07, 14:06
Цитата Arisu @
Мучаю этот нещасный интеловский изернет (82546GB) с его епромом выносным.

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

если я Вас правильно понял конечно же...
Что говорит даташит на данную милкосхему ? Обчно в даташитах есть примеры работы с переферией. Обычно в епром пишут запретив прерывания, и посылая строгую магическую последовательность (зависит от самого производителя)... Дабы защититься от самопроизвольной записи при сбоях...

с уважением
(круглый)

Автор: Arisu 06.06.07, 18:21
блин. пишу же что конкретно ЭТО не SPI ещё. это уровнем выше. как писать в микруху я знаю )) делал уже. НО вот это дренной контроллер, который выступает в роли SPI Master - не даёт доступа к микрухе слэйву.

У контроллера есть регистр для запроса доступа к микрухе (ну типа что бы знать использует он её сам сейчас или нет) .. это бит REQ
И если контроллеру микруха сейчас нафег не сдалась, то он возвращает 1б в регистр GNT.

но ничерта он туда 1 не возвращает )) а пока он этого не сделает - я не имею доступа к контактам SPI (Di, Do, Sk, Cs)

Автор: ЫукпШ 09.06.07, 10:38
Попробуй вставить задержки между операциями in/out. Сделай
программу помедленнее.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)