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

Atmega16a + enc28j60

Добрый день Уважаемые форумчане!

 

Кто может мне помощь в решении проблемы:

есть макетки ATmega16A и enc28j60

в соответствии с данной темой http://we.easyelectronics.ru/electro-and-p...s-enc28j60.html

написал прошивку, но как всегда ничего не работает :crying:

Уже весь мозг сломал.

 

Вроде все сделал как указано на сайте, но что-то не стреляет.

 

Проект прикладываю. Кто сможет, помогите

ENC28j60_v1.1.7z

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


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

Сам прилично времени потратил на мучения с этим кристаллом.

Проверьте следующее:

1. Инициализируется ли чип PHY.

2. Корректно ли отвечает на запись данных.

 

В своём случае, с этой же библиотекой, был рабочий код:

void ntp_rq(void) {
    console_put_fromPGM(TXT_SEND_NTP_RQ); // Сообщаем в консоль, что запрашиваем время.
    eth_frame_t *frame = (void*)net_buf;        // Начинаем собирать пакет NTP. Берём начало буфера и наносим на него структуру.
    ip_packet_t *ip = (void*)(frame->data);        // IP пакет инкапсулируется в ETH
    udp_packet_t *udp = (void*)(ip->data);        // UDP пакет в IP
    ntp_data_t *ntp_data = (void*)(udp->data);    // А NTP данные находятся в UDP пакете.
    // Яйцо в зайце, заяц в утке, утка под кроватью в больнице (>_>)
    udp->to_port = htons(123);
    udp->from_port = htons(55555);            // Случайный номер. Может, там не будет никаких служб...
    ntp_data->flags = 0xE3;                // Это я взял из TCPDUMP'а со своего ПеКа.
    ntp_data->stratum = 0;                // Unspecified/invalid
    ntp_data->poll = 3;                // Polling interval - ХЗ, что это такое.
    ntp_data->precision = 16;            // 2^16 (О, да, мы ОЧЕНЬ высокого мнения о себе)
    ntp_data->root_delay = 0x00010000;        // Честно скопировано!
    ntp_data->root_dispersion = 0x00010000;        // Аналогично!
    ntp_data->root_ID = 0;                // Empty =]
    ntp_data->reference_timestamp = 0;        // Мы хотим узнать время.
    ntp_data->originate_timestamp = 0;        // Мы не знаем и этого.
    ntp_data->receive_timestamp = 0;        // И этого...
    ntp_data->transmit_timestamp = 0;        // Типа мы после сброса.
    udp->len = sizeof(ntp_data_t);            // Размер пакета.
    ip->to_addr = inet_addr(10,0,1,1);        // Прокатит? Пока что так. Захардварено, потом будет браться из EEPROM'а
    udp_send(frame, udp->len);
    // Пока-пока, пакетик.  (⌒ω⌒)ノ
};

 

После lan_init() может потребоваться выждать значительно больше 30мс. Попробуйте увеличить время до 1с.

Эта штука может просто не отправить пакет, т.к. ещё нет линка на порту. Кстати, об этом будет запись в том же буфере отправки (полистайте мануал на микросхему - мне помог решить приличное количество вопросов).

 

Кстати, не вижу, чтобы при отправке пакета заполняли все IP поля - IP адрес и порт как назначения, так и получателя.

Советую включиться сетевой картой в сам модуль и ловить в WireShark пакеты. Очень помогает в отладке забавных казусов.

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


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

Библиотеку не менял.

Сейчас попробую вырезать необходимое для работы сети.

 

Прилагаю файл. Всё должно компилироваться.

Из особенностей работы - контроллер большую часть времени находится в спячке, из которой его пробуждает таймер. Если это не нужно - закомментировать "asm("sleep");" в main():while(1)

 

Все необходимые файлы вложил, должно работать.

Собиралось под ATMega1284p, потому в какой-то мере код нужно будет править. Порой сильно.

code.txt

Забавно. Запрещено загружать .c файл. А .txt - можно.

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


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

Спасибо!

Изменено пользователем IgorKossak
бездумное цитирование

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


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

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

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

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

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

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

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

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

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

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