let's see 0 31 декабря, 2015 Опубликовано 31 декабря, 2015 · Жалоба Работаю с собственным HAL. Возникает ошибка AIS(TPSS) при тяжелой нагрузке. Пока не получается восстановиться и перезапустить DMA. Нет ли кода, но не вообще, а именно для подобного случая(обработка ошибок) или личного опыта, чтобы поделиться. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба У меня достаточно объёмный проект. Включая Ethernet и 3 USART. USARTы тоже через DMA. Ethernet - драйвер от ST с небольшими правками + LWiP. Наблюдал картину сбоев (очень редких - 1 в месяц при запросах 1 в сек) DMA. Характер вычисляю косвенным способом. В принципе, есть соответствующие исключения в регистрах DMA. Попробовал обработать. Не получилось. (( Обрабатываю таймаутом. То есть в обработчике DMA по векторам ошибок просто выхожу (это не мешает работе, так как каждая транзакция, фактически инициализация DMA), а более высокий уровень проверяет завершена ли операция. Так работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Возникает ошибка 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. Вот и посмотрите, может быть, у вас одно из этих событий происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Всех с Новым Годом! Могу добавить к перечню ошибок FBES, только мой вопрос пока, по крайней мере, не от чего, а как обработать, т.е. восстановить нормальную работу: плата немеет. Есть ли возможность перезапустить TxDMA FSM без полной переинициализации, т.к тогда плата еще и оглохнет,а это недопустимо. Для сведения: - Я не использую TCP/IP. - добиться ошибок, когда в сети только 2 устройства не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Могу добавить к перечню ошибок FBES Тогда добавьте ещё 3 бита: EBS. Есть ли возможность перезапустить TxDMA FSM без полной переинициализации, т.к тогда плата еще и оглохнет,а это недопустимо. Попробуйте. Вероятно, нужно всего лишь дёрнуть DMATPDR. Предварительно устранив причину сбоя, естественно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 1 января, 2016 Опубликовано 1 января, 2016 · Жалоба Я сообщаю об ошибках, которые зафиксировал сам, а не перечень потенциальных возможностей. 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 } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 2 января, 2016 Опубликовано 2 января, 2016 · Жалоба Я сообщаю об ошибках, которые зафиксировал сам, а не перечень потенциальных возможностей. Ну, ежели не желаете фиксировать биты EBS, я же не могу вас заставить, верно? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 2 января, 2016 Опубликовано 2 января, 2016 · Жалоба Ну, ежели не желаете фиксировать биты EBS, я же не могу вас заставить, верно? :laughing: У меня РАЗРЕШЕНО прерывание по этому биту, но не зафиксировано. #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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 8 января, 2016 Опубликовано 8 января, 2016 · Жалоба Так таки никто и не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 10 января, 2016 Опубликовано 10 января, 2016 (изменено) · Жалоба Так вот: 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. Изменено 10 января, 2016 пользователем pitt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 16 января, 2016 Опубликовано 16 января, 2016 (изменено) · Жалоба Какие действия надо предпринять чтобы сбросить биты 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 Изменено 17 января, 2016 пользователем pitt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 23 января, 2016 Опубликовано 23 января, 2016 (изменено) · Жалоба Уваяжаемые коллеги! Смею обратиться к вас с просьбой написать с использованием Cube или StdPeripheralLibrary следущую программу: Принимает фрейм, адресованный только к собственному mac-address, и тут же посылает его назад отправителю, по принятому mac-address. Никаких других функций и операций. Бесконечный цикл. Обратите внимание, нет никакого протокола поверх Ethernet. Необходим исходный текст программы. Предпочтительнее MDK, но GCC ok as well. Я проверю, выдерживает ли она тот тест, от которого умирает мой TxDMA: PC с определенной периодичностью посылает короткий(20 байт + padding) фрейм на мой мак, wireshark наблюдает. На сегодняшний день рабочая гипотеза в том, что если прием фрейма закончен в процессе TxDMA, то передача в FIFO обрывается и не восстанавливается, сбросить биты EBS в DMASR не удается. Из железа у меня есть STM32F4, ну и F2, если понадобится. Портировать не проблема, хотя использовать стандартное железо предпочтительнее. Заранее спасибо. Изменено 23 января, 2016 пользователем pitt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба AIS по причине FBES, а значение EBS: 3 Вангую, что MAC бежит по цепочке дескрипторов для передачи и натыкается на тот, который вы не успеваете заполнить. Кстати, у меня такого быть не может, ибо передаю в режиме "store and forward". Знаю, что прием продолжается без особых проблем, а вот передачу TxDMA перезапустить не удается. Вангую, что плохо пытаетесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба Вангую, что MAC бежит по цепочке дескрипторов для передачи и натыкается на тот, который вы не успеваете заполнить. Кстати, у меня такого быть не может, ибо передаю в режиме "store and forward". В момент прерывания по AIS(FBES) дескриптор , который должен быть отправлен принадлежит DMA, это установленный факт. Кроме тог, подобная ошибка действительно останавливает TxDMA, но является основанием для FBES. A потому, что выйти из этого состояния т.е очистить биты EBS не удается, TxDMA не восстанавливаеться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Neborak 0 29 января, 2016 Опубликовано 29 января, 2016 · Жалоба Добрый день. Имеем плату te-stm32f107 и прототип устройства собранного по такой же схеме. Загрузил и слегка модифицировал "LwIP TCP/IP stack demonstration for STM32F107xx (AN3102)" (добавил udp сокет и обрабатываю данные). Иногда при старте отладки на плате (плата была подключена к локальной сети офиса через гигабитный свич) программа стартовала, но не появлялись прерывания от модуля Ethernet, моменты были очень редкие, по-этому не обращал на них особого внимания. Когда был собран прототип, его установили на будущее рабочее место (подключен в изолированную локальную сеть из 20 узлов). Сейчас стабильно, почти каждый день, при включении моего устройства, оно не пингуется, помогает повторное переподключение питания, а программа функционирует как положено. Сразу вспомнил про проблемы с отладкой и появилось предположение, что пока программно-аппаратная часть микроконтроллера инициализируется, rtl8201 может, по какой-то причине, не сообщать о приеме нового микроконтроллеру. Кто сталкивался с подобным? Или пните в нужном направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться