реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> посоветуйте стек для ENC28J60
Br.Misha
сообщение Jan 29 2012, 16:12
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Делаю один девайсик с Ethernet интерфейсом, состоит из Atmega32+модуль с ENC28J60 (купил на ибее).
От этой микры мне надо только чтобы она работала в качестве сервера, чтобы клиент мог открыть http страницу. Сначала взял этот стек http://we.easyelectronics.ru/electro-and-p...http-i-cgi.html , сначала работало нормально, но потом страница перестала влазить в один пакет, а отправить несколько у меня не получилось, я даже там в комментах спрашивал что не так, но никто не ответил. Далее попробовал этот http://www.rlocman.ru/shem/schematics.html?di=55066 , все примере в инете с этим стеком сделаны на atmega88/168 и еще каких то, где есть CLKPR, ниодного примера не нашел на 8, 16 или 32, но все же решил его попробовать. Взял пример, переписал под атмегу32, подключил, но роутер ее почему то не увидел (не назначил IP), думал, что проблема с SPI. Попробовал установить какую то частоту на выходе CLKOUT, она установилась, поэтому что не так, я хз.
Может кто то посоветовать нормальный стек, где можно отправлять страницу в несколько пакетов?
Спасибо!
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 29 2012, 16:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Br.Misha @ Jan 29 2012, 22:12) *
поэтому что не так, я хз.
Наверное сначала с этим нужно решить проблему


--------------------
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Jan 29 2012, 16:47
Сообщение #3


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



при включении устройства на разъеме lan загорается только зеленый светодиод, а желтый не горит, значит, данные через сеть не передаются.
Кстати, Почему то все устройства с этим стеком сделаны по одинаковой схеме: http://www.rlocman.ru/i/File/2009/05/12/1.pdf . Здесь тактирование МК от самой ENC28J60 (12.5 мгц), а у меня тактируется мега от кварца 16 мгц, но врятли проблема в этом. Еще на схеме выход INT подключен к внешнему прерыванию микроконтроллера, но в исходниках нигде это прерывание не используется, поэтому я его не подключал
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Jan 31 2012, 11:09
Сообщение #4


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Вобщем решил я использовать тот стек, что был в примере с atmega88, он рабочий, просто почему то в списке устройств роутера не отображается (наверно потому что без DHCP). Осталась одна проблема: как отправлять страницу в несколько пакетов?
Go to the top of the page
 
+Quote Post
coolbassnik
сообщение Jan 31 2012, 16:31
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 22-10-10
Из: Украина
Пользователь №: 60 348



Может как раз проблема с тактовой частотой ? Из-за этого тайминги в программе могут поменяться, возможно поэтому и не работает код.
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Jan 31 2012, 16:59
Сообщение #6


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Говорю же, что уже работает, тайминги переписал. Как отправить страницу в несколько пакетов?
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Feb 1 2012, 18:23
Сообщение #7


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



вот страницу отправляю с помощью www_server_reply(), вот ее содержимое:
Код
// you must have initialized info_data_len at some time before calling this function
//
// This info_data_len initialisation is done automatically if you call
// packetloop_icmp_tcp(buf,enc28j60PacketReceive(BUFFER_SIZE, buf));
// and test the return value for non zero.
//
// dlen is the amount of tcp data (http data) we send in this packet
// You can use this function only immediately after make_tcp_ack_from_any
// This is because this function will NOT modify the eth/ip/tcp header except for
// length and checksum
void www_server_reply(uint8_t *buf,uint16_t dlen)
{
        make_tcp_ack_from_any(buf,info_data_len,0); // send ack for http get
        // fill the header:
        // This code requires that we send only one data packet
        // because we keep no state information. We must therefore set
        // the fin here:
        buf[TCP_FLAGS_P]=TCP_FLAGS_ACK_V|TCP_FLAGS_PUSH_V|TCP_FLAGS_FIN_V;
        make_tcp_ack_with_data_noflags(buf,dlen); // send data
}

Страница отправляется нормально, но не могу понять, почему. Если верить комментам в коде, то make_tcp_ack_from_any просто отправляет ack для начала передачи, но зачем ей передавать указатель на массив, в котором хранится страница для отправки, при том что make_tcp_ack_from_any изменяет некоторое содержимое этого массива?
Да, кстати, страница здесь передается вот так:

А так должна передаваться страница в несколько пакетов:
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 00:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016