Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 15.04.2017, 14:57   #1
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,286
Вес репутации: 4442/101
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию есть ли метод начать корректно принимать по UART

если скорость 4Мбит/с и байты плотно без пауз. Есть возможность сделать 9-ти битные данные, чтобы 9-й бит начинал или заканчивал пакет

Есть ли в STM32F107 способ вникнуть где начало? Увидел там 2 режима, которые сильно отличаются от микрочипа с режимом сработать по адресному запросу типа 8-й бит =1 значит байт пришел адресный его надо проверить. В STM можно войти в mute или выйти. Что делать, если произошел косяк приема, а найти начало данных при постоянном трафике тогда как? Линия связи только в один конец. Источник PIC приемник STM32
Что тут минимально править, чтобы могло корректно возобновлять прием после ошибок. Правка рибонуклеиновых кислот слишком сложный метод.
ampersant вне форума   Ответить с цитированием
Старый 15.04.2017, 16:50   #2
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,286
Вес репутации: 4442/101
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: есть ли метод начать корректно принимать по UART

метод сработал. сформулировал вопрос сам понял ответ. 9-й бит нафиг не нужен. Делать ничего не надо. Данные сами начнут нормально приниматься после сбоя, спустя некоторое время. Почаще должны появляться данные типа 0xFF
ampersant вне форума   Ответить с цитированием
Старый 18.04.2017, 11:58   #3
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,286
Вес репутации: 4442/101
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: есть ли метод начать корректно принимать по UART

Потыкавшись обнаружил что не хватает скорости проца вот так решать в лоб. Т.е. принимать в перывании из USART на битрейте 2.5Мбит/с STM32 не успевает. (если конечно весь код вылизать до буквы, без либовских функций, то кое как почти успевает) Однозначно надо так, как задумано в ST. А задумано без FIFO.



Если накопить сначала данные в буфер допустим 1024 байта (~6.9мс занимает) и выбрасывать (PIC24->STM32) с битретом 2.5Мбит/с (займет время 4мс) Тогда высвободится 2.9мс между началом нового пакета после окончания предыдущего.
2 вопроса, один повторно всплыл:
1. что делать если пришел битый байт?
2. как начать прием пакета, как определить в STM32, что это именно начало пакета ведь DMA без разницы чего ловить?

Вот тут вроде бы все понятно расписано (в самом конце), но в супе явно не хватает 2 эти вещи: обработки ошибок приема, т.е. нет реакции на появившиеся ошибки и нет контроля начала приема, т.е. в какой момент начать принимать.


Что делают в таких случаях?
ampersant вне форума   Ответить с цитированием
Старый 18.04.2017, 14:53   #4
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,090
Вес репутации: 3340/91
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: есть ли метод начать корректно принимать по UART

Цитата:
Сообщение от ampersant Посмотреть сообщение
1. что делать если пришел битый байт?
2. как начать прием пакета, как определить в STM32, что это именно начало пакета ведь DMA без разницы чего ловить?
Мне думается, что было бы удобно разделить приём и анализ. Приём ведётся по ДМА, окончание приёма - по паузе в канале IDLE. По окончанию приёма обработчику передаётся указатель на приёмный буфер, после чего он сам уже решает, что там годное, а что битое. Приём ведётся в ДМА автоматически, ему будет всё равно, что прилетело. Если добавить прерывание по ошибке приёма FERR или что-то вроде того, то в зависимости от наличия/отсутствия обработки ошибок можно либо вернуть указатель приёмного буфера в ноль, либо просто продолжить принимать, но с установкой бита наличия ошибок, который будет учтён при анализе.

Главное, приём ведётся всегда и всего, что прилетело, через ДМА. А пока ДМА пыхтит, контроллер может заняться анализом пришедшей посылки.
Romantic вне форума   Ответить с цитированием
Старый 18.04.2017, 20:23   #5
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,286
Вес репутации: 4442/101
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: есть ли метод начать корректно принимать по UART

Цитата:
Сообщение от Romantic Посмотреть сообщение
Мне думается, что было бы удобно разделить приём и анализ. Приём ведётся по ДМА, окончание приёма - по паузе в канале IDLE. По окончанию приёма обработчику передаётся указатель на приёмный буфер, после чего он сам уже решает, что там годное, а что битое. Приём ведётся в ДМА автоматически, ему будет всё равно, что прилетело. Если добавить прерывание по ошибке приёма FERR или что-то вроде того, то в зависимости от наличия/отсутствия обработки ошибок можно либо вернуть указатель приёмного буфера в ноль, либо просто продолжить принимать, но с установкой бита наличия ошибок, который будет учтён при анализе.

Главное, приём ведётся всегда и всего, что прилетело, через ДМА. А пока ДМА пыхтит, контроллер может заняться анализом пришедшей посылки.
Анализа нет никакого. Тут уже сырые данные для вывода в DAC 12 бит. Потому особо заметно если данные малдший старший байты замахнулись местами
ampersant вне форума   Ответить с цитированием
Старый 18.04.2017, 20:28   #6
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,090
Вес репутации: 3340/91
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: есть ли метод начать корректно принимать по UART

Цитата:
Сообщение от ampersant Посмотреть сообщение
Потому особо заметно если данные малдший старший байты замахнулись местами
Ну, вот видите, уже и какой ни есть, но анализ

Я же говорю, приём ведётся через DMA непрерывно, признак завершения приёма - прерывание IDLE. По завершении - обнуление счётчика DMA и остальные телодвижения.
Romantic вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
Лучший по качеству звука усилитель оказался снятым с производства ..аналог есть..но то ли это? maagalex Общетехнические вопросы 16 27.08.2010 18:26
Вопрос по прерываниям RB7-RB4 KSB31 Продукция MICROCHIP 4 15.08.2010 23:53
Есть ли элегантное решение на RTOS??? Timik Продукция MICROCHIP 23 20.03.2009 13:28


Часовой пояс GMT +3, время: 23:25.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot