amaora 25 1 мая, 2022 Опубликовано 1 мая, 2022 (изменено) · Жалоба Есть возможность передавать данные в одну сторону по цифровому каналу связи, есть возможность увеличить объем данных для восстановления возможных ошибок передачи. Какие алгоритмы можно применить? Передаётся прошивка объёмом ~100Кб. Нужна устойчивость к потере до ~50% передаваемых данных. Объем передаваемых данных можно увеличить в 2-3 раза. Передача байтовый поток, либо блоками по ~64-бит с контрольной суммой каждый. У меня хватает фантазии только на передачу блоков в псевдослучайном порядке каждый по три раза. Канал связи например USART или CAN. Изменено 1 мая, 2022 пользователем amaora Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Протокол, вроде XModem ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksandr-zh 4 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба А я бы смотрел на задачу чуть иначе: сколько у вас памяти свободной для приёма прошивки И какой интервал времени вы готовы на это отвести? Если обновляете "на лету", поблочно - это одно, если сперва скачиваете в память и проверяете всю прошивку на достоверность/целостность по неким критериям - это другое. В первом случае надёжнее принять три раза некий объём информации и только потом обновлять этот блок в flash. А второй случай как бы и не требует увеличения передаваемых данных в несколько раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба 2 часа назад, amaora сказал: Есть возможность передавать данные в одну сторону по цифровому каналу связи, есть возможность увеличить объем данных для восстановления возможных ошибок передачи. Какие алгоритмы можно применить? CAN - это разве "в одну сторону"? Или что вы под этим имеете в виду? 2 часа назад, amaora сказал: Канал связи например USART или CAN. Не очень понятно зачем какой-то "псевдослучайный порядок"?.. Порядок чего? И зачем? И зачем вообще для USART такая избыточность? Почему у вас в нём происходят такие страшные потери (50%!) ?? Да и для CAN - тем более. PS: имхо - обычной CRC32 на всю прошивку вполне достаточно. Ну или хеш какой-нить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба 2 часа назад, amaora сказал: Нужна устойчивость к потере до ~50% передаваемых данных. Вместо примитивных контрольных сумм передавать коды, восстанавливающие ошибки. Гуглите, изучайте. Потеря 50% данных - откуда такой критерий: канал связи просчитывался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 25 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Протокол с подтверждения хочется избежать, может быть много приёмников одновременно, массовая рассылка. Памяти RAM под всю прошивку нет. 1 minute ago, jcxz said: PS: имхо - обычной CRC32 на всю прошивку вполне достаточно. Ну или хеш какой-нить. Это есть, надо немного надёжнее, особенно при передаче по UART, избежать окирпичивания из-за битых блоков/байтов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба пользуйте код Хемминга. Если памяти достаточно - восстановление через таблицу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 25 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Just now, V_G said: Потеря 50% данных - откуда такой критерий: канал связи просчитывался? По времени передачи, могу позволить длиться этому процессу в 2-3 раза дольше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Что за USART такой с 50% потерями??? Если такое происходит, надо разбираться со схемотехникой и исправлять. А не костыли ваять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksandr-zh 4 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба а классику нельзя реализовать? Сперва грузить новую прошивку в flash, перезапуск, загрузчик проверяет: если данные в этой области достоверны, то грузит с неё, иначе - идёт на прошлую прошивку и в ней работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Just now, jcxz said: Что за USART такой с 50% потерями??? Если такое происходит, надо разбираться со схемотехникой и исправлять. А не костыли ваять. ТАКОЕ может случиться разве что в радиоканале. Ну, еще на CD :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksandr-zh 4 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба Только что, k155la3 сказал: разве что в радиоканале и то, не всегда. У меня и не такое жило в радиоканале)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба 2 минуты назад, amaora сказал: Это есть, надо немного надёжнее, особенно при передаче по UART, избежать окирпичивания из-за битых блоков/байтов. А как это "окирпичивание' может произойти? Боитесь что CRC32 случайно сойдётся? Ну тогда используйте Hash256, он точно никогда не совпадёт на мусоре. 2 минуты назад, k155la3 сказал: ТАКОЕ может случиться разве что в радиоканале. Ну, еще на CD :) Причём тут радиоканал, если ТС пишет про UART и CAN? Перечитайте исходный пост. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 25 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба 2 minutes ago, aleksandr-zh said: Сперва грузить новую прошивку в flash, перезапуск, загрузчик проверяет: если данные в этой области достоверны, то грузит с неё, иначе - идёт на прошлую прошивку и в ней работает. Можно, было подобное, теперь нет достаточно flash памяти на две копии. 1 minute ago, jcxz said: А как это "окирпичивание' может произойти? Боитесь что CRC32 случайно сойдётся? Протокол без обратной связи, без запроса повторной пересылки, один байт потеряется/побъется и да, CRC32 не сойдется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 1 мая, 2022 Опубликовано 1 мая, 2022 · Жалоба 3 minutes ago, jcxz said: . . . Причём тут радиоканал, если ТС пишет про UART и CAN? Перечитайте исходный пост. >> Передача байтовый поток, либо блоками по ~64-бит с контрольной суммой каждый. ну, вот этот тезис наводит на мысли. 64 байта как буфер RF-трансивера. ТС же кодируется что у него в качестве среды передачи. То-ли физпара с помехами то-ли еще что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться