• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 потери при приёме через UART

Dimak

New member
Приветствую!
Помогите пожалуйста разобраться в чём может быть причина.
Я передаю по UART от ардуины на esp8266 пакеты скажем по 160 байт. На esp принимаю эти 160 байт и записываю в файл. Если я передаю 100 таких пакетов с небольшими паузами, то по закрытию файла их оказывается только 70-80%. Т.е. принято не всё. В результате всестороннего тестирования оказалось, что esp пропускает начало передачи любого из пакетов и принимает не всё. Она на что-то отвлекается и я не могу понять на что. Пока не трогал Wi-fi принималось всё. Как только первый раз подключил её к сети, с тех пор она перестала принимать всё. На esp я использую LUA и следующий кусок кода отвечает за приём пакета:

uart.on("data, 160, function(data)
file.write(data)
end, 0)

Но! Теперь, даже если я отключаю Wi-fi модуль (статус показывает нуль, а на роутере нет подключения), картина не меняется - этот moth..fu..ed device просто съел мне мозг и он по прежнему отвлекается и пропускает некоторые передачи. Я менял скорости. На низких скоростях типа 9600 принимает в большинстве всё, но меня интересует скорость 115200 или 256к.
У ардуины и esp есть некоторое различие в скоростях, оно связано с разными тактовыми частотами. Во всяком случае у ардуины кварц 16МГц даёт около 3% ошибок при передаче на 115200, но ведь всё работало до начала использования Wi-fi.
Возможно я не достаточно отключаю Wi-fi, или что-то ещё не делаю, пожалуста, помогите советом на что обратить внимание.
 

pvvx

Активный участник сообщества
file.write пишет в SPIFFS?
При записи в SPIFFS, всё останавливается на время записи и стирания секторов Flash. Это может достигать в LUA и 1 секунды - зависит от размера SPIFFS и его фрагментации. В эти моменты программа в ESP8266 и WiFi не работают. Соответственно всё пропускают. В Lua это не исправить, не используя RTS/CTS у UART.
Ну и быстро протрете дырки в Flash, используя метод записи в SPIFFS...
Меняйте основной алгоритм. Данные из/в UART собирайте в RAM буфера и передавайте всегда по 2 блока TCP из ESP. Только тогда получите удовлетворительную скорость работы WIFI<->UART с любым сторонним приложением и меньшее кол-во пропусков символов. Без RTS/CTS пропуски всё равно неизбежны, т.к. обычно WiFi работает на несколько устройств и всегда в эфире есть помехи, а большие буфера в ESP не сделать из-за мало-RAM...
Не тот WiFi-SoC выбрали для WIFI<->UART и не ту среду программирования...
 
Последнее редактирование:

Dimak

New member
file.write пишет в SPIFFS?
При записи в SPIFFS, всё останавливается на время записи и стирания секторов Flash.
...
Не тот WiFi-SoC выбрали для WIFI<->UART и не ту среду программирования...
Спасибо.
Изучая Ваши посты понял, что Вы в этом хорошо разбираетесь.
Чесно говоря, не ожидал, что архитектура esp не позволяет решить такую казалось бы простую задачу.
А возможно ли нормально принимать по uart без RTS/CTS, если на esp я буду использовать код на Си под ардуино ide вместо Lua?
 
Сверху Снизу