Перейти к содержанию
    

Совместное использование ATMega128L и CS8900A-CQ3

Решил подключить ATMega128 к локальной сети. Купил олимексовскую плату CS8900A-h, с установленным контроллером CS8900A-CQ3. ATMega128 без подключенной к ней плате CS8900A-h работает нормально, но при подключенни CS8900A-h, питание падает с 3.3 В до 3.1В и Mega выключается. Пробовал поднять питание до номинального уровня, но не помогло. Пробовал просто подать питание на плату CS8900A-h, от того же источника питания, что питается Mega, но Mega все равно выключается. Не могу понять в чем проблема. Кто знает подскажите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На какой частоте у вас мега?

Если частота ниже 8Mhz, то чип может работать влоть до 2.7В. А проблема с отключением на 3.1В, может быть связана с BOD, либо если есть внешний супервизор питания то с ним. Варианты решения проблемы:

1. Отключить BOD (или внешний супервизор)

2. Повысить мощность источника питания, чтобы не было просадки питания.

 

Если же чип у вас на частоте выше 8Mhz, то он не обязан вообще работать от 3.3V. Решение:

Запитать от 5V.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мега работает на 4 МГц. Напряжение питание довел до уровня 3,25 В, Но мега все равно отключается как только подключаю CS8900A-H. :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мега работает на 4 МГц. Напряжение питание довел до уровня 3,25 В, Но мега все равно отключается как только подключаю CS8900A-H. :crying:

Проверьте все супервизоры если есть таковые, может один пичек проходит в момент старта и все ресетиться. И почему так падает напряжение??? Толщина проводника или слабость блока питания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблему решил.Проблема действительно была в блоке питания. Подключил осцилограф и оказалось, что примерно через 250 мкс, напряжение питания падает до 1.2В, что приводит к отключению Меги. Всем спасибо, что помогли. Теперь буду пытаться заставить CS8900 передавать пакеты. Еще раз большое спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключил CS8900A к ATMega128, написал функции чтения/записи для работы с CS8900A, все работает нормально, удалось передать кадр в сеть и удачно получить на своем компьютере. Начал писать функции для того что бы прочитать принятый кадр из CS8900A, тут та и начались проблемы. Начинаю пинговать свое устройство, читаю регистр статуса RxEvent, устанавливается флаг RxOK и флаг Broadcast, сигнализирующий что принят широковещательный запрос. Читаю RxStatus Word, тоже нормально считывается (читаю с порта 0), а дальше, когда начинаю считывать с того же порта 0 длину принятого кадра считывается 0. Читаю как положено сначала старший байт потом младший. Пробовал обращаться непосредственно к регистру RxLength, через указатель регистра тоже самое. Может кто с подобной проблемой сталкивался подскажите пожалуйста. Ниже привожу функцию которой пытаюсь прочитать данные из порта 0:

 

#define dir_data DDRD //направление шины данных

#define read_data PIND //Для чтения данных с шины данных

#define IOR (0b00010000)

#define IOW (0b00100000)

 

unsigned int ReadHB1ST8900(unsigned char Address)

{

unsigned int ReturnValue;

ReturnValue=0;

data = 0;

dir_data = 0x00; // настройка порта данный на ввод

addr = IOR | IOW | (Address + 1); // установка адреса. Старший байт

addr &= ~IOR; // строб чтения

delay_us(100);

ReturnValue = read_data;// читаю данные с шины данных

delay_us(10);

addr = IOR | IOW | Address; // установка адреса. Младший байт

ReturnValue =ReturnValue<<8; // сдвиг влево

addr &= ~IOR; // строб чтения

delay_us(100);

ReturnValue |= read_data; // читаю данные с шины данных. Получение младшего байта

delay_us(10);

addr |= IOR; // Завершаю процедуру чтения

dir_data = 0xff; // настройка порта данный на вывод

 

return ReturnValue;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Maddy

А в сторону avrlib'а посмотреть ? он правда CS8900 поддерживает - но может поможет ?

Procyon AVRlib

Изменено пользователем Maddy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начинаю пинговать свое устройство, читаю регистр статуса RxEvent,

Тогда 0 в RxLength - ожидаемый результат, т.к. после чтения этого регистра emac выбрасывает текущий фрейм.

 

Reading the RxEvent register signals to the CS8900A that the host is finished with the current frame, and wants to start processing the next frame.

 

Поэтому читать надо RxStatus - потом RxLength и только после того как фрейм вычитан и обработан - прочитать RxEvent чтобы мак перешел к следующему фрейму.

 

 

 

PS: В вашей функции задержки в 10-100us не нужны, ну максимум вставить 1 NOP или продублировать обращение к порту. Мега дрыгает ногами медленнее сигналов ISA шины, так что задержки - лишние.

 

Ну и подключить CS89 к внешней шине не судьба была?

Чтение регистров было бы много проще:

 

#define nic_ReadReg( addr )\
  (*(V8 *)(NIC_BASE + (addr)))
  
#define nic_WriteReg(addr, val)\
  (*(V8 *)(NIC_BASE + (addr)) = (val))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за предложение Уважаемый defunct, я попробовал то, что Вы говорите, но вот тут снова проблема, если я сначала читаю RxEvent и потом RxStatus, то в RxStatus как и положено точное значение RxEvent, затем я EEPROM меги читаю принитый фрейм, причем тоже читается и считавается он через 2 байта. т.е. читается 2 байта как положено принятого фрейма потом пропуск 2 принятых байт снова 2 байта и т.д. И, что еще интересно читаю я не как написано с Resive/Transmit Data (Port 0) потом с Port 1 и снова Port0 и т.д., а читается с начала с адреса 0002h (Port1), потом 0001h (Port0), снова 0001h и 0000h. По другому если читаю 0001h потом 0000h, 0001h и т.д. считывает 0. Я запутался окончательно. Скорее всего я, что то упустил, может ошибка в алгоритме? Алгоритм следующий:

1. Инициализация CS8900

1.1 Сброс CS8900;

1.2 Установка MAC адреса CS8900;

2. Настройка приемника

2.1 В RxCTL устанавливаю биты Promiscuous, Broadcast, CRCerrorA, вобшем устанавливаю все биты что бы любой кадр был принят;

3. Разрешаю баботу приемника.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

затем я EEPROM меги читаю принятый фрейм, причем тоже читается и считавается он через 2 байта. т.е. читается 2 байта как положено принятого фрейма потом пропуск 2 принятых байт снова 2 байта и т.д.

Странно, такое впечатление что у Вас что-то с адресами напутано или в железе или в программе.

Если работаете в режиме IO-Space, то порты у вас 16-ти разрядные. Было бы неплохо принимать не в eeprom, а в ОП меги, чтобы исключить побочный эффект медленной записи eeprom (если я правильно понял ваш пост).

 

И, что еще интересно читаю я не как написано с Resive/Transmit Data (Port 0) потом с Port 1 и снова Port0 и т.д., а читается с начала с адреса 0002h (Port1), потом 0001h (Port0), снова 0001h и 0000h. По другому если читаю 0001h потом 0000h, 0001h и т.д. считывает 0.

??

В ДШ написано что, весь фрейм читать из порта 0 (0x0000)..

 

В "MemoryMode" фрейм лежит начиная с адреса 0x404

 

1. Инициализация CS8900

....

Раз RxStatus показывает наличие фрейма, то с инициализацией надо полагать все Ок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал смотреть аппартную часть, и возникло сомнение куда подключать пин SBHE, в одних схемах он подключен к питанию в дргих посажен на землю. В моем случае он подключен к питанию. Подскажите кто знает наверняка куда его сажать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...