Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Подскажите алгоритм проверки целостности данных

Непрочитано 13.10.2008, 00:29  
Churchill
Прописка
 
Регистрация: 23.03.2008
Сообщений: 121
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Churchill на пути к лучшему
По умолчанию Подскажите алгоритм проверки целостности данных

Хочу сделать простейший считыватель i2c еепром через юсб на 2 мегах8 (одна - преобразователь юсб в ком, вторая - сам считыватель). Почеум так - не спрашивайте - надо ))))
Каким образом проверить правильность передаваемых данных? Данные хочу передавать непрерываемым потоком, без блоков, а посему расчет контрольного кода должен производиться на лету и в конце передачи передаваться в комп. Простого суммирования всех переаднных данных хватит?
Реклама:
Churchill вне форума  
Непрочитано 13.10.2008, 08:46  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию

Непрерывно откуда куда? От источника сигнала до компьютера?
Если у Вас непрерывный поток, то где же у него конец, к которому прикреплять контрольный байт?
Помните Масяню и ее "только не дисконект!"?
Чтобы такого не было принимайте пакет информации (он все равно имеет конечное значение), держите его в буфере, считайте CRC и дальше передавайте на ПК. ИМХО вроде так логичнее.

PS. "Простейший считыватель i2c" и 2шт ATMega8 как-то уж явно не стыкуется...
mrKirill вне форума  
Непрочитано 13.10.2008, 12:01  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

Ну да.
Посмотрим на вопрос поближе.
- для чего контроль за целосностью информации если вы не сможете определить что надо передавать при ошибке, ведь поток будет непрырывный. Прийдется передавать всю информацию заново при возникновении ошибки.
Решение: необходимое блокирование (образование блоков) информации и подальшая их нумерация.
- размер блока должен быть сопоставим с оптимальностью. Его длина должна быть оптимальной в соотношени количества информации, размера номерующего блока, и размера проверочных символов.
Решение: искать коды для обнаружение ошибок основываясь на ваше железо (в основном на разрядность системы) и на готовые оптимальные коды (искать в инете).
- обнаружение ошибок не приведет никогда к непририрывному потоку... ибо для перезапроса надо остановит основной поток.
Решение: брать за основу коды с сисправлением ошибок. Для примера код Рида-Соломона. Ибо он похож на оптимальный и в нем описаны все алгоритмы.

Одним словом - юзай код Рида-Соломона, НО!
Обрати внимание, что для его реализации необходимо очень много вычеслительных ресурсов. НО! Для реализации на PLC вопросов совсем нету, все работает на очень больших скоростях (до 10Мбит), ибо в даном случае все сделано на логике.
Есть правда готовые кодеры Рида-Соломона. Но, я их на базаре не встречал.
Там реализована ситуация след образом.
Береш кусок информации (будуший блок), пишеш в память. Дальше тупо ищеш по таблицах проверочные коды в соответствии к твоей кодовой комдинации (блока). Дальше посылаеш блок+проверочную комдинацию...

Да проще купить готовый кодер и не парить себе заднее место. Ибо реализация на мегах ... тянет только на курсовой проджект, но в жизни никому не нада...
ua_gruzin вне форума  
Непрочитано 13.10.2008, 12:09  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

Да и, классная идея посетила.
Можно и так.
Принял код (блок), бальше выбросил его на адрессную шину ПЗУ. Данный адрес и укажет на ячейку в которой хранится проверочная комбинация. Дальше просто сичтал с памяти (она сама вывалит на шину данных) проверочную комбиначию, и записал ее в конец после того как вывалил а УАРТ код (блок). Блок можно отправить напрямую в УАРТ например перед тем, как чтото с ним делать (с блоком). Пока он ьудет обрабатыватся УАРТом, ты сможешь все сделать с памятю.
О, P.S. Знакомый делал подобную цацу на дисертацию.
ua_gruzin вне форума  
Непрочитано 13.10.2008, 13:02  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию

Не думаю что для "простого считывателя i2c eeprom" нужно заморачиваться с кодом Рида-Соломона.

Насколько я понял контроль правильности потока нужно проверять на участке МК-ПК? Если так, то проще организовать буфер, далее кусковать на пакеты, а для контроля ошибки хватит простого CRC.
mrKirill вне форума  
Непрочитано 14.10.2008, 00:29  
Churchill
Прописка
 
Регистрация: 23.03.2008
Сообщений: 121
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Churchill на пути к лучшему
По умолчанию

По поводу простоты - у нас дешевле мег8 ничего не возят - 2 бакса - небольшие расходы.
По поводу непрерывности - "прерывность" конечно есть, еепром память больше 64КБ мне не встречалась. Просто не хотел заморачиваться с блочно структурой. Меня вполне бы устроил вариант, что считали 64К с ошибкой - передаем заново. Это типа считывателя логов, которые считываются раз в месяц. Ну и естественно, такой массив данных ни в РАМ не поместить, ни в FIFO UART не запихнуть.
Вопрос поконткретнее - есть способ подсчета CRC "на лету"?
Churchill вне форума  
Непрочитано 14.10.2008, 06:12  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию

Считали 64К информации одним куском, посчитали CRC, бац ошибка. А так как CRC только указывает на ошибку, а не исправляет ее - снова читать весь пакет, все 64К. И так до бесконечности...
Вам никто не говорит что нужно весь пакет загонять в буфер. Примите, к примеру, 512 байт, в то время пока будете принимать следующие 512 обработайте эти. Начинаете обрабатывать следующий пакет - выдавайте в порт обработанные байты и принимайте следующие.
mrKirill вне форума  
Непрочитано 16.10.2008, 12:31  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

Не и...пи одно место.
Все доводы изложены выше.
Я конкретно описал что и к чему.
Нада считать без ошибки - пожалуйста. Внешняя память + прога для ее заливки (для кода рида-соломона). Исправлять же ошибки будет комп, в него ресурсов хватит .

НО! СРС не даст тебе увереность об ошибке, так как несколько приведет к его неработоспособности.
По другому - читай несколько раз еепром и дальше просто сравнивай их между собой. при совпадении - получиш правильную комбинацию, ибо вероятность ошибки на одном и том же месте при 64кбайтах ОЧЕНЬ МАЛА. НО! Такой подход будет реален при длене кабеля от устройства не более метра и то в экране.

Если данный подход не катит - только ставка на коды, которые исправляют ошибки.

Да и... все можна сделать на одной меге без памяти внешней. Для 8-ми битного пакета нада 256 проверочных символов, аналогично для 10-ти битного нада 1024 ячейки с проверочными символами.

Дальше так:
Обьявляеш масив на 1024 элемента в флеше в конце (так как стандартную строку). Получиш таблицу со смещением. Дальше напрямую делаеш обращение к флеше по заданому адрессу (твоя кодовая комбинация длиной в 10бит) и чтиш одтуда твои проверочние биты.
А дальше все просто.
Пакет типа:
вервый байт: идентификатор+6 первых бит с 10-ти
второй байт: 4 бита что оталось + проверочную комбинацию.
Эти два байта по очереди в топку (в уарт).

Идентификатор необходим для синхронизации, и имеет 2 бита, например 00 или 11, как будет угодно, для определения начала двойки байт (или другими словами - для начала пакета).

P.S. Сделай раз да не будет дальше никаких проблем.
ua_gruzin вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроль целостности цепи тахогенератора ПТ woroba Измерительное оборудование 15 09.03.2009 22:20
Подскажите идею контроллера быстрой передачи данных в ПК redfox Микроконтроллеры, АЦП, память и т.д 3 26.12.2008 00:45
Подскажите алгоритм работы с GSM-Модемом greafuger Микроконтроллеры, АЦП, память и т.д 3 22.04.2008 17:26
Упаковка данных (сжатие данных) satnettv Proteus, KiCAD и другие ECAD 4 06.09.2007 20:15
УСТРОЙСТВО ПРОВЕРКИ ПОДЛИННОСТИ БАНКНОТЫ 1107 Информация по радиокомпонентам 3 10.08.2007 14:11


Часовой пояс GMT +4, время: 22:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.