Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-окт-22 22:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-июл-25 11:56 
Не в сети

Зарегистрирован: 2018-июл-24 10:53
Сообщения: 1
Проблемы с Ethernet:
Настроили микроконтроллер 1986ВЕ1т второй ревизии на работу по Ethernet, поставили кварц на 12 MHz, умножили на 12 с помощью умножителя тактовой частоты. В результате получили 144 MHz, однако, пакеты пересылаемые по Ethernet периодически пропадают.
В чем может быть причина???

(код настройки тактирования и работы по ethernet взяты из примера, единственное изменение –
RST_CLK->PLL_CONTROL=(11<<8)|(1<<2); )
void clock_cfg(void) // Настройка тактирования
{
uint32_t temp;
RST_CLK->PER_CLOCK |= (1 << 27);
temp = BKP->REG_0E;
temp &= 0xFFFFFFC0;
BKP->REG_0E = temp | (7 << 3) | 7;

RST_CLK->HS_CONTROL=0x00000005;
while((RST_CLK->CLOCK_STATUS&0x0C)!=0x0C);
RST_CLK->CPU_CLOCK=0x00000002;
RST_CLK->PLL_CONTROL=(11<<8)|(1<<2); // 12 * (11 + 1) = 144 MHz
while((RST_CLK->CLOCK_STATUS&0x02)!=0x02);
RST_CLK->PER_CLOCK|=0x08;
EEPROM->CMD=4<<3;
RST_CLK->PER_CLOCK&=(~0x08);
RST_CLK->CPU_CLOCK|=0x00000106;
RST_CLK->ETH_CLOCK=(1<<24)|(1<<27)|(3<<28);
RST_CLK->PER_CLOCK|=(1<<14)|(1<<6)|(1<<21)|(1<<25)|(1<<29);
RST_CLK->TIM_CLOCK=0x01000000; /*TIMER1 enable*/
RST_CLK->UART_CLOCK=(1 << 24);
}

(Код отправки сообщений по Ethernet)
unsigned int ethernet_WriteRAM(void* buf, unsigned int size)
{
unsigned int head, tail;
unsigned short tmp[2];
unsigned int tmp32;
unsigned int* src;
unsigned int* dst;
unsigned short i;
head = ETHERNET->X_Head; //
tail = ETHERNET->X_Tail; //

if(head > tail)
{
tmp[0] = head - tail; tmp[1] = 0;
}
else
{
tmp[0] = ETH_RAM_FULL_SIZE - tail; mp[1] = head - ETH_RAM_SIZE_X;
}

if(size > (tmp[0] + tmp[1] - 2 * sizeof(unsigned int))){
return 0;
}
tmp32 = size;

src = buf;
dst = (unsigned int*)(ETH_RAM_BASE_ADDR + tail);

*dst++ = tmp32;
tmp[0] -= sizeof(unsigned int);

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE))
dst = (unsigned int*)ETH_RAM_BASE_X;


tmp32 = (size + sizeof(unsigned int) - 1)/sizeof(unsigned int);

if(size <= tmp[0]){
for(i = 0; i < tmp32; i++){
*dst++ = *src++;
}
}
else{
tmp32 -= tmp[0]/sizeof(unsigned int);

for(i = 0; i < tmp[0]/sizeof(unsigned int); i++)
*dst++ = *src++;
dst = (unsigned int*)ETH_RAM_BASE_X;
for(i = 0; i < tmp32; i++)
*dst++ = *src++;
}

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE)){
dst = (unsigned int*)ETH_RAM_BASE_X;
}

tmp32 = 0;
*dst++ = tmp32;

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE)){
dst = (unsigned int*)ETH_RAM_BASE_X;
}

ETHERNET->X_Tail = (unsigned int)dst;
return size;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-июл-31 10:42 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
Вторая ревизия 1986ВЕ1Т выпускалась с 27 по 36 неделю 2012-го года.
- С 36-й недели 2012 года пошла 3-я ревизия
- С 1-й недели 2014 года выпускалась 4-я ревизия
- С 45 недели 2016 года - 6-я ревизия

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

Для работы с Ethernet лучше использовать 4-ю или 6-ю ревизии, в них возможна работа без потери пакетов через штатные функции SPL. 6-я ревизия предпочтительнее, подробности в errata - https://ic.milandr.ru/products/mikrokon ... /#docs_tab

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-01 09:21 
Не в сети
Аватара пользователя

Зарегистрирован: 2016-июн-15 13:22
Сообщения: 43
Открыть
NickNick писал(а):
Проблемы с Ethernet:
Настроили микроконтроллер 1986ВЕ1т второй ревизии на работу по Ethernet, поставили кварц на 12 MHz, умножили на 12 с помощью умножителя тактовой частоты. В результате получили 144 MHz, однако, пакеты пересылаемые по Ethernet периодически пропадают.
В чем может быть причина???

(код настройки тактирования и работы по ethernet взяты из примера, единственное изменение –
RST_CLK->PLL_CONTROL=(11<<8)|(1<<2); )
void clock_cfg(void) // Настройка тактирования
{
uint32_t temp;
RST_CLK->PER_CLOCK |= (1 << 27);
temp = BKP->REG_0E;
temp &= 0xFFFFFFC0;
BKP->REG_0E = temp | (7 << 3) | 7;

RST_CLK->HS_CONTROL=0x00000005;
while((RST_CLK->CLOCK_STATUS&0x0C)!=0x0C);
RST_CLK->CPU_CLOCK=0x00000002;
RST_CLK->PLL_CONTROL=(11<<8)|(1<<2); // 12 * (11 + 1) = 144 MHz
while((RST_CLK->CLOCK_STATUS&0x02)!=0x02);
RST_CLK->PER_CLOCK|=0x08;
EEPROM->CMD=4<<3;
RST_CLK->PER_CLOCK&=(~0x08);
RST_CLK->CPU_CLOCK|=0x00000106;
RST_CLK->ETH_CLOCK=(1<<24)|(1<<27)|(3<<28);
RST_CLK->PER_CLOCK|=(1<<14)|(1<<6)|(1<<21)|(1<<25)|(1<<29);
RST_CLK->TIM_CLOCK=0x01000000; /*TIMER1 enable*/
RST_CLK->UART_CLOCK=(1 << 24);
}

(Код отправки сообщений по Ethernet)
unsigned int ethernet_WriteRAM(void* buf, unsigned int size)
{
unsigned int head, tail;
unsigned short tmp[2];
unsigned int tmp32;
unsigned int* src;
unsigned int* dst;
unsigned short i;
head = ETHERNET->X_Head; //
tail = ETHERNET->X_Tail; //

if(head > tail)
{
tmp[0] = head - tail; tmp[1] = 0;
}
else
{
tmp[0] = ETH_RAM_FULL_SIZE - tail; mp[1] = head - ETH_RAM_SIZE_X;
}

if(size > (tmp[0] + tmp[1] - 2 * sizeof(unsigned int))){
return 0;
}
tmp32 = size;

src = buf;
dst = (unsigned int*)(ETH_RAM_BASE_ADDR + tail);

*dst++ = tmp32;
tmp[0] -= sizeof(unsigned int);

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE))
dst = (unsigned int*)ETH_RAM_BASE_X;


tmp32 = (size + sizeof(unsigned int) - 1)/sizeof(unsigned int);

if(size <= tmp[0]){
for(i = 0; i < tmp32; i++){
*dst++ = *src++;
}
}
else{
tmp32 -= tmp[0]/sizeof(unsigned int);

for(i = 0; i < tmp[0]/sizeof(unsigned int); i++)
*dst++ = *src++;
dst = (unsigned int*)ETH_RAM_BASE_X;
for(i = 0; i < tmp32; i++)
*dst++ = *src++;
}

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE)){
dst = (unsigned int*)ETH_RAM_BASE_X;
}

tmp32 = 0;
*dst++ = tmp32;

if(dst >= (unsigned int*)(ETH_RAM_BASE_ADDR + ETH_RAM_FULL_SIZE)){
dst = (unsigned int*)ETH_RAM_BASE_X;
}

ETHERNET->X_Tail = (unsigned int)dst;
return size;
}
Закрыть

Не думали что проблема может крыться в слишком большой тактовой частоте?

1 и 2 ревизии работают максимум на 140 МГц, о чем не двусмысленно намекает первая страница в спецификации https://ic.milandr.ru/upload/iblock/342/3427b314090e8433e55813ad1c50f239.pdf

_________________
cdeblog.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-25 12:30 
Не в сети

Зарегистрирован: 2013-фев-16 18:20
Сообщения: 56
Откуда: РФ, г. Курск
Vasiliy писал(а):
Для работы с Ethernet лучше использовать 4-ю или 6-ю ревизии, в них возможна работа без потери пакетов через штатные функции SPL. 6-я ревизия предпочтительнее, подробности в errata - https://ic.milandr.ru/products/mikrokon ... /#docs_tab

А что по поводу пятой ревизии?

_________________
"Грабить один банк три раза подряд - я восхищаюсь твоим стилем, Роберто!"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-27 17:21 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
Пятая ревизия не выходила в серию

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-28 10:47 
Не в сети

Зарегистрирован: 2013-фев-16 18:20
Сообщения: 56
Откуда: РФ, г. Курск
Vasiliy писал(а):
Пятая ревизия не выходила в серию

Переключаю процессор в режим bootloader, по адресу 0хFFF считываю значение 0хAD. Это какая ревизия?

_________________
"Грабить один банк три раза подряд - я восхищаюсь твоим стилем, Роберто!"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-28 12:16 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1157
Откуда: Тула
brutal_codemaker писал(а):
Vasiliy писал(а):
Пятая ревизия не выходила в серию

Переключаю процессор в режим bootloader, по адресу 0хFFF считываю значение 0хAD. Это какая ревизия?

viewtopic.php?f=34&t=3915&p=22572#p22572

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-авг-29 09:18 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
Страница 40 спецификации: 0хAD - 6 ревизия
Остальные там же

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-02 14:00 
Не в сети

Зарегистрирован: 2016-май-13 14:05
Сообщения: 4
Не буду плодить темы с одинаковым названием, поэтому спрошу тут. Я в своей работе тоже столкнулся с проблемой пропуска пакетов. Серия мк 1802.
Ethernet контроллер работает в линейном режиме. Раз в 40 миллисекунд должен принимать два пакета размером примерно по 200-250 байт. Наличие принятых пакетов Ethernet контроллером обнаруживается по разнице head tail. Кроме этого к мк подключены две микросхемы внешней ОЗУ, в которую постоянно пишутся и считываются данные по адресам начиная с 0x60000000. Проблема заключается в том, что не реже (а то и сильно чаще) чем раз в секунду пришедший по ethernet пакет не принимается (head tail приемника равны).
Если из программы убрать использование внешней памяти (перенести хранение данных в executable секцию внутренней ОЗУ), и ничего больше не менять, все начинает работать нормально и принимается каждый пакет.
Буду рад прочитать что стоило бы проверить и возможные решения проблемы.

P.S. Опишите пожалуйста схему тактирования и настройки мк соответствующую рекомендациям к пункту «0010 Ошибка тактирования MAC контроллера» Errata.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-03 11:34 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
Блок Ethernet - отдельное периферийное устройство со своей памятью. Ему впринципе без разницы чем занимается ядро. Пришел пакет - он аппаратно будет принят и сохранен. Ядро при этом может работать с чем-то еще, например с внешней памятью. Но рано или поздно память в блоке Ethernet закончится и необходимо ее вычитывать, чтобы новые пакеты было куда сохранять. Следовательно опрос регистров RHead и RTail должен происходить достаточно часто, чтобы успевать вычитывать память приемника Ethernet, не допуская ее переполнения.

Необходимо проверить следующее:
- Выставляется ли флаг переполнения OVF - на случай если работа с внешней памятью длится долго и пакеты забивают весь буфер. Если флаг выставляется, то регистром Delimeter можно отдать под приемную часть больше места.
- Битые пакеты не сохраняются. Поэтому, необходимо отследить флаги статуса на случай, если из-за влияния помех на плате пакет принимается с ошибками. Например, если дорожки с сигналами Ethernet и внешней шины проходят рядом.

Это первое что приходит в голову.

По ошибке «0010 Ошибка тактирования MAC контроллера» достаточно не включать делитель частоты для блока Ethernet. В спецификации стр. 102, описание регистра ETH_CLock прямо указано: поле ETH_BRG - всегда задавать 0.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-03 15:45 
Не в сети

Зарегистрирован: 2016-май-13 14:05
Сообщения: 4
Ядро тактируется от генератора на 16 Мгц через умножитель на 8, блок ethernet от генератора на 25 Мгц (MDR_RST_CLK->ETH_CLOCK=(1<<24)|(1<<27)|(3<<28);).
Проверка новых данных (разница head tail) в блоке ethernet и их считывание происходит каждые 5 микросекунд.
Флаг переполнения OVF не выставляется, в процессе работы выставляются только XF_OK и RF_OK. Но пакеты продолжают пропускаться.
Линии ведущие к памяти находятся на удалении от линий интерфейса ethernet и отделены другими дорожками (jtag). Jtag в работе не используется, только для отладки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-03 18:37 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
А кто раздает пакеты и на какой скорости?
Соединял отладочные платы 1986ВЕ1Т и 1986ВЕ3Т на столе при 100МБит/с. Проблем не было.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-04 08:57 
Не в сети

Зарегистрирован: 2016-май-13 14:05
Сообщения: 4
Первый вариант, когда пакеты раздает программа на ПК. Устройство подключено напрямую к сетевой карте. Режим выбран "полностью автоматический", и сетевая карта показывает подключение на 100 Мбитах. При этом передаются два пакета по 214 байт каждые 40 +/- 5 миллисекунд.

Второй вариант, когда пакеты отправляет другое оборудование через мост настроенный на ПК через две сетевые карты. Тоже на 100 Мбитах, но по одному пакету 214 байт каждый, раз в 20 миллисекунд.

В обоих вариантах отправка пакетов контролируется через wireshark. По принятию пакета в устройстве на передачу отправляется пустой массив на 200 байт, который очень легко отслеживать в wireshark'е, а потом принятые данные копируются либо во внешнюю, либо внутреннюю ОЗУ. При использовании внешней памяти некоторые пакеты пропускаются, и соответственно не отправляется пустой массив. Объем буферов настроен по 4кбайта (MDR_ETHERNET1->ETH_Dilimiter = 0x1000;).

На 10 Мбитах тоже пробовал соединяться, пропуски появляются реже, но все же есть.

Устройство в себе содержит два мк 1986ве1т. Самая новая серия, как я писал выше, 1802, у второго 1734. Разницы в работе между ними нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ethernet: теряются пакеты
СообщениеДобавлено: 2018-сен-05 13:52 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 162
Откуда: ПКК "Миландр"
Вышлите код минимального размера на support@milandr.ru и логи из Wareshark для большего понимания (с наличием пропуска и без).

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB