• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP не контролирует поток UART

nikolz

Well-known member
Я пытаюсь реализовать контроль потока поверх библиотеки, костыли какие то сделать...
так как у вас протокол фактически самопальный то вы можете сами сформировать стартовый импульс и по нему определять запрос или ответ . Будет быстрее и не надо дополнительных пинов.
 

mcmega

Member
так как у вас протокол фактически самопальный то вы можете сами сформировать стартовый импульс и по нему определять запрос или ответ . Будет быстрее и не надо дополнительных пинов.
Вы видимо не поняли задачи... в топике все описано.
Никаких пинов я использовать не хочу. Проблема в задержке и проверке входных байтов.
 

nikolz

Well-known member
Вы видимо не поняли задачи... в топике все описано.
Никаких пинов я использовать не хочу. Проблема в задержке и проверке входных байтов.
возможно не понял.
У Вас ESP соединено с AVR передаете в ESP по WIFI а из ESP по UART в AVR. Так?
 

mcmega

Member
возможно не понял.
У Вас ESP соединено с AVR передаете в ESP по WIFI а из ESP по UART в AVR. Так?
Именно так.

В файловой системе ESP лежит файл mcu.hex, его я и передаю по UART

В AVR есть загрузчик, который принимает эти данные и обрабатывает. Управляет потоком - ответными символами xOn, xOff.
 

nikolz

Well-known member
Именно так.

В файловой системе ESP лежит файл mcu.hex, его я и передаю по UART

В AVR есть загрузчик, который принимает эти данные и обрабатывает. Управляет потоком - ответными символами xOn, xOff.
так вот. UART - это два пина + земля.
Так как у вас соединены ваши чипы то можно сделать какой угодно протокол
вам не надо соблюдать стандартный протокол для ответа Просто подавайте 1 или 0 и включите на ESP прерывание по этому пину.
Можно даже уменьшить число проводов.
 

nikolz

Well-known member
и еще чтобы быстро все делать
передавайте данные блоками например по 256 байт
-
 

mcmega

Member
и еще чтобы быстро все делать
передавайте данные блоками например по 256 байт
-
Не могу блоками, размер страницы в разных контроллерах разный (у одних 64, у других 128...).
Прерывания тоже не могу, нет свободных ног, к тому же уже все спаяно.

Нужно что то городить программное.
 

nikolz

Well-known member
Не могу блоками, размер страницы в разных контроллерах разный (у одних 64, у других 128...).
Прерывания тоже не могу, нет свободных ног, к тому же уже все спаяно.

Нужно что то городить программное.
вы не поняли. Свободных ног не надо их у вас и так много UART - это две ноги.
возьмите минимальный блок например 64
можно размер блока задавать
пусть avr перед обменом сообщит какие блоки надо
 

nikolz

Well-known member
т е ESP ждет от avr например байт
0 - завершить
1- продолжить
>2 - начать передачу указанными блоками
После принятия байта ESP передает указанный блок и ждет нового байта ответа
и сразу делайте бинарным кодом
и проблем нет и скорость максимальная
 

mcmega

Member
вы не поняли. Свободных ног не надо их у вас и так много UART - это две ноги.
возьмите минимальный блок например 64
можно размер блока задавать
пусть avr перед обменом сообщит какие блоки надо
Я не знаю как слать в конце, в конце Hex длина строки гораздо меньше чем обычных строк...
Поэтому я хочу контроль потока и слать по 1 символу. Для передачи Bin файла это будет приемлемая скорость.
 

nikolz

Well-known member
Я не знаю как слать в конце, в конце Hex длина строки гораздо меньше чем обычных строк...
Поэтому я хочу контроль потока и слать по 1 символу. Для передачи Bin файла это будет приемлемая скорость.
чего слать в конце?
Вы пишите всегда блоки степени 2
т е 1 2 4 8 16 32 64 128 256 это
это степень двойки от 0 до 8 чтобы передать надо 3 бита
в байте 8 бит
младший бит - это старт-стоп
7 старших - размер блока как степень двойки
Что надо в конце?
 

mcmega

Member
чего слать в конце?
Вы пишите всегда блоки степени 2
т е 1 2 4 8 16 32 64 128 256 это
это степень двойки от 0 до 8 чтобы передать надо 3 бита
в байте 8 бит
младший бит - это старт-стоп
7 старших - размер блока как степень двойки
Что надо в конце?
Вот отрывок Hex в конце:
:1002A0000801009309010091070100930D010091DD
:1002B000080100930E010091090100930F01FFCF87
:00000001FF
Допустим прошивка кратна размеру запрашиваемого пакета 64 байта, тогда Ок,
а если она не кратна размеру?
Допустим 620 Байт - получается 9 пакетов + 44 Байта.
Я не знаю как сделать счетчик чтоб такое посчитать правильно.
 

nikolz

Well-known member
Вот отрывок Hex в конце:
:1002A0000801009309010091070100930D010091DD
:1002B000080100930E010091090100930F01FFCF87
:00000001FF
Допустим прошивка кратна размеру запрашиваемого пакета 64 байта, тогда Ок,
а если она не кратна размеру?
Допустим 620 Байт - получается 9 пакетов + 44 Байта.
Я не знаю как сделать счетчик чтоб такое посчитать правильно.
А где Вы видели флеш не кратной 2?
Если у вас не кратно то в конце передаете FF чтобы было кратно а FF - это чистые ячейки т е FF никуда не пишется.
И перейдите на бинарный код будет быстрее и avr не надо ничего переводить просто принимает и если не FF то пишет.
 

CodeNameHawk

Moderator
Команда форума
Допустим прошивка кратна размеру запрашиваемого пакета 64 байта, тогда Ок,
а если она не кратна размеру?
По идее нужен протокол, в начале посылаете длину, в ответ проц пришлет размер блока.
Приняв все полные блоки, проц будет ожидать не полный блок(остаток данных).
После записи нужна проверка например подсчет суммы байтов или контрольной суммы.

Мне нравиться идея выше, дополнять FF, стертый чип и так содержит FF.
В еепром писать побайтно, что бы не затереть другие данные.
 
Сверху Снизу