Например TDA7294

Форум РадиоКот • Просмотр темы - Пакетный протокол обмена данными между МК и ПК
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт сен 02, 2025 21:04:41

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 55 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Пн июн 13, 2011 10:19:14 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
OKF писал(а):
А отчего CRC_INIT = 0xde? У Далласа, как я понимаю, 0.


Инициализация CRC - это частности. Полином используется тот же. А инициализация не нулем устраняет неприятный глюк, когда все нулевые байты дают нулевую CRC. Например, если панельку для Touch Memory позамыкать отверткой, то иногда будет считываться ключ с номером 0 и верной CRC. Это не очень хорошо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Сб авг 27, 2011 16:39:20 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Очень заинтересовала эта тема! Но я так и не уловил для какого интерпретатора была написана программа для МК, пробовал скомпилировать в WinAVR, подскажите можно ли это чудо перевести в WinAVR?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Сб авг 27, 2011 18:28:06 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Исходники для IAR. Можно доработать напильником и компилить в любой среде.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Сб авг 27, 2011 19:46:30 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
#include <Main.h>
#include <Commands.h>
Что это за библиотеки и как быть если пользуюсь WinAVR, у меня там таких нет :(
Можно глупый вопрос?!
Был вот по этой ссылочке http://caxapa.ru/lib/wake/
там есть полные исходники этого протокола WAKE
скачал просмотрел и не нашел int main(void), куда делась главная функция?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Сб авг 27, 2011 22:53:55 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
alexey6522 писал(а):
#include <Main.h>
#include <Commands.h>
Что это за библиотеки и как быть если пользуюсь WinAVR, у меня там таких нет :(


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

alexey6522 писал(а):
Можно глупый вопрос?!
Был вот по этой ссылочке http://caxapa.ru/lib/wake/
там есть полные исходники этого протокола WAKE
скачал просмотрел и не нашел int main(void), куда делась главная функция?


Main принадлежит основной программе. А это всего лишь модули организации обмена по протоколу Wake. Законченного приложения там, разумеется, нет. Main Вы должны написать сами под ваши задачи.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Вс авг 28, 2011 16:42:03 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Программа не хочет компилироваться без этих заголовочных файлов, мне просто удалить эти строки?
#include <Main.h>
#include <Commands.h>


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Пн авг 29, 2011 10:18:46 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
В Commands.h Вы должны поместить прототипы функций, которые содержатся в модуле Commands.c и котрые Вы хотите вызывать из других модулей.

Main.h - это заголовочный файл главного модуля моей программы. У Вас же главный модуль будет другой, поэтому и Main.h нужен другой. Вам виднее, что там должно быть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Пт июл 06, 2012 20:33:50 
Мучитель микросхем

Карма: 5
Рейтинг сообщений: 50
Зарегистрирован: Ср янв 04, 2012 11:57:40
Сообщений: 409
Откуда: Алчевск
Рейтинг сообщения: 0
Здравствуйте!
Подскажите пожалуйста, как правильно организовать во времени работу такой сети:
устройство 1- пульт управления или PC на время тестирования, работает master/slave
устройство 2- чистый slave, по принятию пакета от 1 отдает ack/nak
устройства 3-5 - одинаковые датчики, а) от 1 индивидуально получают настройки,инициатор -1 б) после срабатывания внутреннего прерывания передают 1му параметры, инициаторы 345 и может быть одновременно :(
предусмотрено два режима работы 1--2 и 1--3,4,5
все устройства висят на одном проводе и мешают друг другу
непойму как организовать режим 1--345. Есть идея: ждать чистой линии разное время, причем 1 ждет дольше всех
пакеты содержат преамбулу,адрес приемника,предатчика,команду,поле данных, ack/nak,crc8. Размер поля данных, для простоты, одинаков для всех -6 байт.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Вт сен 11, 2012 20:22:19 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
У меня тут возникло несколько мыслей по поводу этих протоколов. Интересно мнение других.

Первая мысля касается протоколов, которые в начале и в конце кадра используют одинаковый флаг. В описании того же SLIP написано, что начальный флаг служит для того, чтобы сбросить (flush) символы-помехи, которые могли быть получены во время ожидания очередного кадра. Но что значит сбросить? Приемник не может определить мусор это или нет. Он видит флаг, берет все полученные на данный момент данные и отправляет наверх - Все, я получил посылку. Получается вся надежда на CRC? А вдруг там будет много мусора? Насиловать каждый раз эту бедную CRC? Ну как-то не очень хорошо. Почему тогда все протоколы упорно используют один флаг в начале и в конце кадра, вместо двух разных? Это бы сделало распознавание кадров более надежным.

Вторая мысль по поводу вынесения из прерывания всего и вся. Возьмем, например, и вынесем вычисление контрольной суммы в фон, и представим следующую ситуацию. Приемник ожидает входящих данных. При получении стартового флага очередного кадра, приемник соберет весь мусор, что получил за время ожидания, установит флаг готовности и будет ждать, пока фон не проверит данные и не освободит входной буфер, чтобы он мог принять следующий кадр. Стоит фону немного замешкаться и вуаля! Приемник пропускает первый значащий символ того самого кадра. Все, кадр для нас потерян.

Таким макаром приемник может пропустить не один кадр. Если бы у нас были разные флаги начала и конца кадра, то мы сразу смогли бы отбросить откровенный мусор и это бы несколько спасло ситуацию. А вот если мы не вынесли бы вычисление CRC из прерывания, то такой ситуации вообще бы не было. Мы бы отбрасывали весь мусор и поврежденные кадры, пока не примем нормальный. То есть мы бы гарантированно получили один правильный кадр. Так что делать? Я тоже не хочу загружать прерывание, но получается придется.

Можно конечно выделить несколько кадровых буферов и все пихать туда, но сколько их придется взять? Память то тоже не бесконечная. Да и фону от этого не легче - вместо вычисления CRC для одного буфера ему придется проверять N буферов. Кто его знает насколько это замедлит всю систему. Тоже нехорошо. Кто что думает по этому поводу?

Да, и еще. Вычисляем ли мы CRC в прерывании или нет, нам все-равно могут пригодиться несколько кадровых буферов. Как это лучше организовать? Выделить N буферов максимального размера? Но если кадры не всегда будут максимального размера, то память будет использоваться не эффективно. Хорошо бы что-то типа кольцевого буфера, куда можно было бы подряд помещать кадры, но как их тогда отделать друг от друга? В голову лезут какие-то монструозные решения. Кто-нибудь подобное реализовывал?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Вт сен 11, 2012 23:10:19 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
Цитата:
Но что значит сбросить?
ДА , так вот просто в помойку всё.
Начало передачи пакета и конец обозначены одим сиволом END. Он уникален т.к. протоколом предусмотрена его подмена, если такой символ встречается в данных. Так вот если Вы грузили в буфер всё , что было до первого END - всё в помойку


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Ср сен 12, 2012 01:43:08 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1030
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
menzoda писал(а):
в начале и в конце кадра используют одинаковый флаг


Wake использует только флаг начала кадра. В конце кадра никакой специальный символ не передается. Конец кадра определяется по количеству байт в кадре.

menzoda писал(а):
Но что значит сбросить?


Как только приходит символ начала кадра, разбор начинается снова.

menzoda писал(а):
При получении стартового флага очередного кадра, приемник соберет весь мусор, что получил за время ожидания


При получении стартового флага буфер очищается. Вернее, укзатель ставится в начало буфера.

menzoda писал(а):
Можно конечно выделить несколько кадровых буферов


Зачем?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Чт сен 13, 2012 16:22:12 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
ILYAUL писал(а):
Цитата:
Но что значит сбросить?
ДА , так вот просто в помойку всё.
Начало передачи пакета и конец обозначены одим сиволом END. Он уникален т.к. протоколом предусмотрена его подмена, если такой символ встречается в данных. Так вот если Вы грузили в буфер всё , что было до первого END - всё в помойку

Но приемник в общем случае не знает, что есть мусор, а что данные. Вот отправили ему такую последовательность: мусор-флаг-кадр-флаг. Он принял мусор, и тут появляется начальный флаг кадра. Приемник не знает, что до этого был мусор и говорит "я принял что-то похожее на кадр, кто-нибудь проверьте точнее" и останавливает прием, ведь буфер занят этим "чем-то". А в это время передается уже нормальный кадр, тот, по чьему начальному сфлагу срубился приемник. И пока фон проверяет принятый мусор иосвобождает буфер, этот самый кадр может потеряться.

Леонид Иванович писал(а):
Wake использует только флаг начала кадра. В конце кадра никакой специальный символ не передается. Конец кадра определяется по количеству байт в кадре.

Это понятно. Я не именно про WAKE говорил.

Леонид Иванович писал(а):
menzoda писал(а):
Можно конечно выделить несколько кадровых буферов

Зачем?

В описанной абзацем выше ситуации это помогло бы принять следующий за мусором нормальный кадр. Ну или надо было вычислять контрольную сумму в прерывании, тогда бы приемник не ждал пока фоновый процесс проверит кадр, а сам бы быстренько понял, что это мусор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Чт сен 13, 2012 16:47:48 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
Вы поймите , Вы принимаете всё , что передаётся по лини , но у Вашего приёмника нет отметки , что он принимал начальный флаг.
Он уникален. И как только он его принял , все то шло ему раньше флага , сбрасывается. И с этого момента он считает , что идет кадр , по приходу второго флага , он сбрасывает отметку начального флага. Всё кадр принят.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Чт сен 13, 2012 18:08:12 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
ILYAUL писал(а):
Вы поймите , Вы принимаете всё , что передаётся по лини , но у Вашего приёмника нет отметки , что он принимал начальный флаг.
Он уникален. И как только он его принял , все то шло ему раньше флага , сбрасывается. И с этого момента он считает , что идет кадр , по приходу второго флага , он сбрасывает отметку начального флага. Всё кадр принят.

Ну ок, а если приемник включился в середине передачи и получил "полкадра-флаг-мусор-флаг-кадр-флаг"? Если использовать описанную Вами логику, то получается он будет считать каждый кадр мусором, а каждый мусор кадром.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пакетный протокол обмена данными между МК и ПК
СообщениеДобавлено: Чт сен 13, 2012 20:30:04 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
Может это поможет понять


Вложения:
rfc1055.rar [4.16 KiB]
Скачиваний: 337
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 55 ]    , , 3

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


Кто сейчас на форуме

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y