Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/39: Рейтинг темы: голосов - 39, средняя оценка - 4.90
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
1

Отправка пакетов в enc28j60

02.12.2013, 15:14. Просмотров 7063. Ответов 14
Метки нет (Все метки)

Здравствуйте уважаемые форумчане. Хочу у Вас спросить про алгоритм отправки пакета в enc28j60. Автор вот этой статьи http://we.iosyitistromyss.ru/itistro-an ... 28j60.html предлагает вот такой алгоритм:
Код
void enc28j60_send_packet(uint8_t *data, uint16_t len)
{
while(enc28j60_rcr(ECON1) & ECON1_TXRTS)
{
// TXRTS may not clear - ENC28J60 bug. We must risit
// transmit logic in couse of Tx error
if(enc28j60_rcr(EIR) & EIR_TXERIF)
{
enc28j60_bfs(ECON1, ECON1_TXRST);
enc28j60_bfc(ECON1, ECON1_TXRST);
}
}

enc28j60_wcr16(EWRPT, ENC28J60_TXSTART);
enc28j60_write_buffer((uint8_t*)"\x00", 1);
enc28j60_write_buffer(data, len);

enc28j60_wcr16(ETXST, ENC28J60_TXSTART);
enc28j60_wcr16(ETXND, ENC28J60_TXSTART + len);

enc28j60_bfs(ECON1, ECON1_TXRTS); // Request packet send
}
мне в нем не понятен участок отвечающий за запись управляющего байта, а именно, почему после enc28j60_write_buffer((uint8_t*)"\x00", 1); идет сразу запись данных в буфер enc28j60_write_buffer(data, len);, хотя EWRPT, продолжает указывать на ENC28J60_TXSTART, ведь в этом случае записанное в первый байт число \x00 будет затерто записываемыми данными и управляющий байт будет утерян.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 15:14
Ответы с готовыми решениями:

Atmega16 + enc28j60. enc28j60 перестает отвечать
Столкнулся с непонятной проблемой, прошу помочь. С чем и как работаю В своей системе использую...

ENC28J60 + DHCP = проблема
Доброго дня, уважаемые форумчане. Встала задача обмениваться данными по локальной сети. Почитал...

PIC18F60J67 ENC28J60 Разъем с трансформатором
опрос такой интересный))) Вопщем я купил неправильный разъем для ENC28J60, PIC18F60J67. Эти...

Библиотека ENC28J60 CCS GCC
Доброго времени суток! У меня огромная просьба к сообществу. Я нашел просто потрясающую...

Проблема с ENC28J60 - через некоторое время отваливается
Привет. Взял тупо проект дихальта из статьи http://iosyitistromyss.ru/pinboard-ii-e ... 28j60.html...

14
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
02.12.2013, 15:30 2
Позиция во внутреннем буфере ENC28J60 автоматически сдвигается после каждой записи. Такое поведение задаётся управляющим битом AUTOINC, который по умолчанию включен.
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 15:37 3
Стоп! Но тогда в конце, когда записывается число в ETXND, к len нужно прибавить единицу, т.*е. у него написано так enc28j60_wcr16(ETXND, ENC28J60_TXSTART + len); а я считаю что должно быть так enc28j60_wcr16(ETXND, ENC28J60_TXSTART + len + 1);
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 15:41 4
Еще хочу спросить, что вы понимаете под "Позиция во внутреннем буфере ENC28J60 автоматически сдвигается после каждой записи". Вы имеете в виду, что к EWRPT прибавляется размер записанного буфера, или он просто инкрементируется?
0
02.12.2013, 15:41
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
02.12.2013, 15:44 5
Цитата Сообщение от Kvosshtoym
Еще хочу спросить, что вы понимаете под "Позиция во внутреннем буфере ENC28J60 автоматически сдвигается после каждой записи". Вы имеете в виду, что к EWRPT прибавляется размер записанного буфера, или он просто инкрементируется?
Закидываете в буфер один байт - указатель позиции сдвигается на единицу. Записываете по очереди 1024 байта - в итоге позиция сдвигается на 1*1024=1024.
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 15:50 6
Ну тогда точно надо одын прибавить к длине, или я не прав?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
02.12.2013, 16:16 7
Цитата Сообщение от Kvosshtoym
Ну тогда точно надо одын прибавить к длине, или я не прав?
Тогда уж лучше вычесть единицу, чтобы выполнялось условие (ETXND - ETXST)==(len-1)
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 16:34 8
Все..., понял. Раз так надо, значит надо.
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 18:19 9
И последний вопрос. Я правильно понял, что "\x00" - это и есть управляющий байт?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
02.12.2013, 18:29 10
Цитата Сообщение от Kvosshtoym
И последний вопрос. Я правильно понял, что "\x00" - это и есть управляющий байт?
Судя по комментариям в статье - да. Но я бы с даташитом для надёжности сверился: нормальное ли значение 0x00 для управляющего байта.
0
Kvosshtoym
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 15
02.12.2013, 19:13 11
Спасибо за помощь и дельные советы. Буду пробовать.
0
pomdriw
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
07.01.2015, 18:26 12
Здравствуйте, коллеги!

После ресета не всегда (один из пяти примерно) запускается enc28j60.
Зависает на следующем цикл
void enc28j60_send_packet(uint8_t *data, uint16_t len)
{
while(enc28j60_rcr(ECON1) & ECON1_TXRTS)
{
// TXRTS may not clear - ENC28J60 bug. We must risit
// transmit logic in couse of Tx error
if(enc28j60_rcr(EIR) & EIR_TXERIF)
{
enc28j60_bfs(ECON1, ECON1_TXRST);
enc28j60_bfc(ECON1, ECON1_TXRST);
}
}

Кто-нибудь сталкивался с таким поведением enc?
Подскажите что проверить и куда копать?
0
sitimur
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
07.01.2015, 18:40 13
Эта фукция зависает в цикле, так и не дождавшись необходимых данных от сетевой МК, у меня такая была проблемма, решилась заменой кварца на 25 мгц, из старой сетевой карты.
0
pomdriw
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 26
07.01.2015, 18:59 14
Но данные-то мы не ждем. Регистры успешно читаются. Но нет готовности передатчика :(
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
07.01.2015, 23:27 15
Цитата Сообщение от pomdrew
Но данные-то мы не ждем. Регистры успешно читаются. Но нет готовности передатчика :(
Попробуйте передатчик сперва чем-то занять, а уж потом ждите от него готовности (окончания передачи).

Покажите инициализацию.
0
07.01.2015, 23:27
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2015, 23:27

Какой стек для Ethernet ATmega128 + ENC28J60 выбрать?
Подскажите пожалуйста, какой стек поможет мне решить следующую задачу: Нужно отправлять данные на...

Отправка пакетов
Подскажите пожалуйста, как и про помощи каких компонентов посылать пакеты на сервер онлайн игр....

Отправка пакетов
Доброго времени суток. Давно интересовался данной функцией , о найти толкового ответа , как ей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru