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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32 Eth. Обработка ошибок
pitt
сообщение Dec 31 2015, 04:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Работаю с собственным HAL. Возникает ошибка AIS(TPSS) при тяжелой нагрузке. Пока не получается восстановиться и перезапустить DMA. Нет ли кода, но не вообще, а именно для подобного случая(обработка ошибок) или личного опыта, чтобы поделиться.

Спасибо.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 1 2016, 08:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



У меня достаточно объёмный проект. Включая Ethernet и 3 USART. USARTы тоже через DMA. Ethernet - драйвер от ST с небольшими правками + LWiP. Наблюдал картину сбоев (очень редких - 1 в месяц при запросах 1 в сек) DMA. Характер вычисляю косвенным способом.
В принципе, есть соответствующие исключения в регистрах DMA. Попробовал обработать. Не получилось. ((
Обрабатываю таймаутом. То есть в обработчике DMA по векторам ошибок просто выхожу (это не мешает работе, так как каждая транзакция, фактически инициализация DMA), а более высокий уровень проверяет завершена ли операция.
Так работает.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 1 2016, 09:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pitt @ Dec 31 2015, 07:41) *
Возникает ошибка AIS(TPSS) при тяжелой нагрузке.

Вот некое описание ядра MAC, и там есть список причин, по которым срабатывает TPS:
Цитата
The transmit process remains running, until one of the following events occurs:
• The hardware or software reset is issued. Setting the CSR0.0 (SWR) bit can perform the software reset.
After the reset, all the internal registers return to their default states. The current descriptor's position in
the transmit descriptor list is lost.
• A stop transmit command is issued by the host. This can be performed by writing 0 to the
CSR6.13 (ST) bit. The current descriptor's position is retained.
• The descriptor owned by the host is found. The current descriptor's position is retained.
• The transmit FIFO underflow error is detected. An underflow error is generated when the transmit FIFO is
empty during the transmission of the frame. When it occurs, the transmit process enters a suspended
state. Transmit automatic polling is internally disabled, even if it is enabled by the host by writing the TAP
bits. The current descriptor's position is retained.

Вот и посмотрите, может быть, у вас одно из этих событий происходит.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 1 2016, 15:50
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Всех с Новым Годом!

Могу добавить к перечню ошибок FBES, только мой вопрос пока, по крайней мере, не от чего, а как обработать, т.е. восстановить нормальную работу: плата немеет. Есть ли возможность перезапустить TxDMA FSM без полной переинициализации, т.к тогда плата еще и оглохнет,а это недопустимо.
Для сведения:
- Я не использую TCP/IP.
- добиться ошибок, когда в сети только 2 устройства не получается.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 1 2016, 17:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pitt @ Jan 1 2016, 18:50) *
Могу добавить к перечню ошибок FBES

Тогда добавьте ещё 3 бита: EBS.

Цитата(pitt @ Jan 1 2016, 18:50) *
Есть ли возможность перезапустить TxDMA FSM без полной переинициализации, т.к тогда плата еще и оглохнет,а это недопустимо.

Попробуйте. Вероятно, нужно всего лишь дёрнуть DMATPDR. Предварительно устранив причину сбоя, естественно.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 1 2016, 18:46
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Я сообщаю об ошибках, которые зафиксировал сам, а не перечень потенциальных возможностей.
Код
void eth_rst_tx_fifo (void) {
  ETH->DMAOMR |= ETH_DMAOMR_FTF;
  while (!!(ETH->DMAOMR & ETH_DMAOMR_FTF));
  ETH->DMAOMR &= ~ETH_DMAOMR_ST;
  ETH->DMAOMR |=  ETH_DMAOMR_ST;
}

void ETH_IRQHandler (void) {
  eth_frame_s x_cb;
  uint32_t    dmasr;

  dmasr = ETH->DMASR;
  
  if (ETH->DMAIER & (ETH_DMAIER_RBUIE|ETH_DMAIER_RIE)) {
      /*********************/
  }

  if (ETH->DMAIER & ETH_DMAIER_TIE) {
      /*********************/
  }
  if (!!(dmasr & ETH_DMASR_AIS)) {
    if (eh_cb != NULL) eh_cb(dmasr);  // call back if exists
    eth_rst_tx_fifo();
  }
  ETH->DMASR &= ETH_DMASR_NIS|ETH_DMASR_AIS|ETH_DMA_INTR;  // unmasked errors
  ETH->DMATPDR = 0;                      // Resume DMA transmission

}


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 2 2016, 05:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pitt @ Jan 1 2016, 21:46) *
Я сообщаю об ошибках, которые зафиксировал сам, а не перечень потенциальных возможностей.

Ну, ежели не желаете фиксировать биты EBS, я же не могу вас заставить, верно? laughing.gif
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 2 2016, 15:50
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(scifi @ Jan 2 2016, 00:56) *
Ну, ежели не желаете фиксировать биты EBS, я же не могу вас заставить, верно? laughing.gif

У меня РАЗРЕШЕНО прерывание по этому биту, но не зафиксировано.
Код
#define ETH_DMAIER_AI_ERRS (ETH_DMAIER_TPSIE|\
                            ETH_DMAIER_TJTIE|\
                            ETH_DMAIER_ROIE |\
                            ETH_DMAIER_TUIE |\
                            ETH_DMAIER_RBUIE|\
                            ETH_DMAIER_RPSIE|\
                            ETH_DMAIER_RWTIE|\
                            ETH_DMAIER_FBEIE)



--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 8 2016, 13:09
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Так таки никто и не?


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 10 2016, 04:54
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Так вот:
AIS по причине FBES, а значение EBS: 3
Цитата
Bits 25:23 EBS: Error bits status
These bits indicate the type of error that caused a bus error (error response on the AHB interface). Valid only with the fatal bus error bit (ETH_DMASR register [13]) set. This field does not generate an interrupt.
Bit 23 1 Error during data transfer by TxDMA 0 Error during data transfer by RxDMA
Bit 24 1 Error during read transfer 0 Error during write transfer
Bit 25 1 Error during descriptor access 0 Error during data buffer access

Знаю, что прием продолжается без особых проблем, а вот передачу TxDMA перезапустить не удается.
Не очень понимаю как интерпретировать значение EBS 3, за исключением очевидной ошибки TxDMA.

Сообщение отредактировал pitt - Jan 10 2016, 05:21


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 16 2016, 17:13
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Какие действия надо предпринять чтобы сбросить биты EBS в регистре DMASR. Я подозреваю, что именно это причина всех моих проблем.
Ниже состояние всех DMA registers(hex)
DMABMR = 0241200
DMATPDR = 0
DMARPDR = 0
DMARDLAR = 20002B38
DMATDLAR = 20002B98
DMASR = 0189A0C2
DMAOMR = 02202002
DMAIER = 0001A3FB
DMAMFBOCR = 00000022
DMARSWTR = 0
DMACHTDR = 20002B98
DMACHRDR = 20002B78
DMACHTBAR = 0
DMACHRBAR = 0

Сообщение отредактировал pitt - Jan 17 2016, 02:54


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 23 2016, 15:27
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Уваяжаемые коллеги!

Смею обратиться к вас с просьбой написать с использованием Cube или StdPeripheralLibrary следущую программу: Принимает фрейм, адресованный только к собственному mac-address, и тут же посылает его назад отправителю, по принятому mac-address. Никаких других функций и операций. Бесконечный цикл. Обратите внимание, нет никакого протокола поверх Ethernet. Необходим исходный текст программы. Предпочтительнее MDK, но GCC ok as well.
Я проверю, выдерживает ли она тот тест, от которого умирает мой TxDMA: PC с определенной периодичностью посылает короткий(20 байт + padding) фрейм на мой мак, wireshark наблюдает.
На сегодняшний день рабочая гипотеза в том, что если прием фрейма закончен в процессе TxDMA, то передача в FIFO обрывается и не восстанавливается, сбросить биты EBS в DMASR не удается.

Из железа у меня есть STM32F4, ну и F2, если понадобится. Портировать не проблема, хотя использовать стандартное железо предпочтительнее.

Заранее спасибо.

Сообщение отредактировал pitt - Jan 23 2016, 15:29


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 23 2016, 19:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pitt @ Jan 10 2016, 07:54) *
AIS по причине FBES, а значение EBS: 3

Вангую, что MAC бежит по цепочке дескрипторов для передачи и натыкается на тот, который вы не успеваете заполнить. Кстати, у меня такого быть не может, ибо передаю в режиме "store and forward".

Цитата(pitt @ Jan 10 2016, 07:54) *
Знаю, что прием продолжается без особых проблем, а вот передачу TxDMA перезапустить не удается.

Вангую, что плохо пытаетесь.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 23 2016, 21:54
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(scifi @ Jan 23 2016, 14:41) *
Вангую, что MAC бежит по цепочке дескрипторов для передачи и натыкается на тот, который вы не успеваете заполнить. Кстати, у меня такого быть не может, ибо передаю в режиме "store and forward".

В момент прерывания по AIS(FBES) дескриптор , который должен быть отправлен принадлежит DMA, это установленный факт. Кроме тог, подобная ошибка действительно останавливает TxDMA, но является основанием для FBES.
A потому, что выйти из этого состояния т.е очистить биты EBS не удается, TxDMA не восстанавливаеться.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Neborak
сообщение Jan 29 2016, 08:56
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 13-04-09
Пользователь №: 47 609



Добрый день. Имеем плату te-stm32f107 и прототип устройства собранного по такой же схеме. Загрузил и слегка модифицировал "LwIP TCP/IP stack demonstration for STM32F107xx (AN3102)" (добавил udp сокет и обрабатываю данные). Иногда при старте отладки на плате (плата была подключена к локальной сети офиса через гигабитный свич) программа стартовала, но не появлялись прерывания от модуля Ethernet, моменты были очень редкие, по-этому не обращал на них особого внимания. Когда был собран прототип, его установили на будущее рабочее место (подключен в изолированную локальную сеть из 20 узлов). Сейчас стабильно, почти каждый день, при включении моего устройства, оно не пингуется, помогает повторное переподключение питания, а программа функционирует как положено. Сразу вспомнил про проблемы с отладкой и появилось предположение, что пока программно-аппаратная часть микроконтроллера инициализируется, rtl8201 может, по какой-то причине, не сообщать о приеме нового микроконтроллеру. Кто сталкивался с подобным? Или пните в нужном направлении.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 29 2016, 13:16
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Neborak @ Jan 29 2016, 03:56) *
Добрый день. Имеем плату te-stm32f107 и прототип устройства собранного по такой же схеме. Загрузил и слегка модифицировал "LwIP TCP/IP stack demonstration for STM32F107xx (AN3102)" (добавил udp сокет и обрабатываю данные). Иногда при старте отладки на плате (плата была подключена к локальной сети офиса через гигабитный свич) программа стартовала, но не появлялись прерывания от модуля Ethernet, моменты были очень редкие, по-этому не обращал на них особого внимания. Когда был собран прототип, его установили на будущее рабочее место (подключен в изолированную локальную сеть из 20 узлов). Сейчас стабильно, почти каждый день, при включении моего устройства, оно не пингуется, помогает повторное переподключение питания, а программа функционирует как положено. Сразу вспомнил про проблемы с отладкой и появилось предположение, что пока программно-аппаратная часть микроконтроллера инициализируется, rtl8201 может, по какой-то причине, не сообщать о приеме нового микроконтроллеру. Кто сталкивался с подобным? Или пните в нужном направлении.

По-моему, Ваш вопрос - это совершенно иная тема. Тем не менее, а Вы просто используете чей-то код или это свой? В любом случае, почитайте регистры phy
Код
...
  ST802RT1_REG_XSTAT,       // 17 - Receiver configuration information and interrupt status register
  ST802RT1_REG_XRCNT,       // 18 - Receiver event interrupts register
...

Может быть не всегда успевает слинковаться с сетью. Кстати, у Вас очень устаревший phy. Даже ST от него отказалась.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Neborak
сообщение Jan 29 2016, 15:04
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 13-04-09
Пользователь №: 47 609



Цитата(pitt @ Jan 29 2016, 17:16) *
По-моему, Ваш вопрос - это совершенно иная тема. Тем не менее, а Вы просто используете чей-то код или это свой? В любом случае, почитайте регистры phy
Код
...
  ST802RT1_REG_XSTAT,       // 17 - Receiver configuration information and interrupt status register
  ST802RT1_REG_XRCNT,       // 18 - Receiver event interrupts register
...

Может быть не всегда успевает слинковаться с сетью. Кстати, у Вас очень устаревший phy. Даже ST от него отказалась.

Спасибо за наводку, пока собираю информацию.
Я пример от ST использую, накопал, что при инициализации в отсутствии линка в течении определенного таймаута (примерно 5 сек.) досрочно завершается иниицализация Ethernet и что-то по DMA.
Пока сделал на каждый этап инициализации и работы программы свою комбинация свечения светодиодов, что бы можно было определить состояние. Гляну, что там получится, вторым гляну, что там с этим линком, в принципе, нет линка, стоит уйти в сброс и попытаться инициализироваться снова.
Плохо, что в прототип не заложили uart, что бы обслуживающий персонал мог логировать самостоятельно, еще проблема в том, что мне не разрешают дергать питание, что бы воспроизвести проблему чаще, утром - включили, вечером - выключили. А проблема проявляется именно когда включается все, среди дня многократно дергаю питание прототипа и ничего.
По phy, использовали такой как стоял в плате от терры, решили в первом прототипе не экспериментировать, потому, что опыта ноль было. Сейчас хочется поставить с возможностью подключения внешнего сигнала (25МГц с MCO микроконтроллера), что посоветуете?
P.S. Обманул по задержке при отсутствии линка, секунд 15 получается с момента старта программы до получения ошибки от инициализации Ethernet.

Сообщение отредактировал Neborak - Jan 29 2016, 16:05
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 29 2016, 17:44
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Neborak @ Jan 29 2016, 18:04) *
По phy, использовали такой как стоял в плате от терры, решили в первом прототипе не экспериментировать, потому, что опыта ноль было. Сейчас хочется поставить с возможностью подключения внешнего сигнала (25МГц с MCO микроконтроллера), что посоветуете?

KSZ8081RNA. Полёт нормальный.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jan 30 2016, 01:04
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Neborak @ Jan 29 2016, 10:04) *
Спасибо за наводку, пока собираю информацию.
Я пример от ST использую,
По phy, использовали такой как стоял в плате от терры, решили в первом прототипе не экспериментировать, потому, что опыта ноль было. Сейчас хочется поставить с возможностью подключения внешнего сигнала (25МГц с MCO микроконтроллера), что посоветуете?
P.S. Обманул по задержке при отсутствии линка, секунд 15 получается с момента старта программы до получения ошибки от инициализации Ethernet.

Их примеры можно исполоьзовать только как референс, написано ногами, как, впрочем, и документация.
Прочитайте регистры, которые я привел - должны что-нибудь просветить.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Neborak
сообщение Feb 23 2016, 15:01
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 13-04-09
Пользователь №: 47 609



Ребята, выявил причину проблем (не до конца), в моем модуле было предусмотрено управляемое питание подключаемых внешних устройств через полевой транзистор. Как временный вариант внешние устройства питались от своего БП, мой модуль от своего, а в полевом транзисторе обратный диод. Подключив как предпологалось с самого начала - питание внешних устройств идет только через мой модуль, все работает без сбоев в течении 3 недель.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 15:11
Рейтинг@Mail.ru


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