alexsandr-ter 0 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Добрый день Уважаемые форумчане! Кто может мне помощь в решении проблемы: есть макетки ATmega16A и enc28j60 в соответствии с данной темой http://we.easyelectronics.ru/electro-and-p...s-enc28j60.html написал прошивку, но как всегда ничего не работает :crying: Уже весь мозг сломал. Вроде все сделал как указано на сайте, но что-то не стреляет. Проект прикладываю. Кто сможет, помогите ENC28j60_v1.1.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Сам прилично времени потратил на мучения с этим кристаллом. Проверьте следующее: 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 пакеты. Очень помогает в отладке забавных казусов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexsandr-ter 0 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба Не поделишься готовым проектом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба Библиотеку не менял. Сейчас попробую вырезать необходимое для работы сети. Прилагаю файл. Всё должно компилироваться. Из особенностей работы - контроллер большую часть времени находится в спячке, из которой его пробуждает таймер. Если это не нужно - закомментировать "asm("sleep");" в main():while(1) Все необходимые файлы вложил, должно работать. Собиралось под ATMega1284p, потому в какой-то мере код нужно будет править. Порой сильно. code.txt Забавно. Запрещено загружать .c файл. А .txt - можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexsandr-ter 0 23 ноября, 2015 Опубликовано 23 ноября, 2015 (изменено) · Жалоба Спасибо! Изменено 23 ноября, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться