Протокол версии 1.1 загрузки прошивки в дисплей фирмы ITEAD Nextion. Это перевод официальной инструкции производителя.

Многие покупатели используют для создания пользовательского интерфейса сенсорные дисплеи Nextion в своих коммерческих проектах. Они хотели бы иметь возможность загружать в дисплей Nextion прошивку не через IDE для Windows, а непосредственно из своего собственного модуля с микроконтроллером (MCU — microcontroller unit). В этом документе раскрываются дополнительные аспекты Протокола Загрузки (UploadProtocol), который используется в IDE Nextion Editor начиная с версии 0.53 и старше. На ноябрь 2023 годаактуальная версия IDE 1.65.1.

Этот же протокол может быть использоваться и для коммерческой загрузки прошивок из персонального компьютера, у которого есть COM порт или установлен адаптер USB‑COM.

Протокол Загрузки нужен тем, кому хочет загружать прошивки в Nextion из микроконтроллера через последовательное соединение. Знание протокола не требуется, если вы загружаете прошивку в дисплей через Nextion Editor. Версия протокола 1.0 Протокола Загрузки все также может быть использована без проблем но со следующими ограничениями:

  1. Если режим Адресации не реализован в дисплее Nextion

  2. И если повторная Обработка Протокола не реализована в дисплее Nextion

Оба режима — Режим Адресации и Повторная Обработка это сложные программные приемы и они не должны использоваться, если нет уверенности в их полном понимании. Однако если все же их использовать, то надо учитывать наличие дополнительных факторов.

Шаг 1. Выяснить номер последовательного порта (UART), к которому подключен ваш дисплей Nextion.

Для того, чтобы установить связь между вашим контроллером (компьютером) и Nextion необходимо определить к какому порту UART (COM в случае с компьютером) подключен дисплей и выяснить параметры соединения. Nextion работает на уровнях TTL и параметрах связи N81 (8N1). Вам требуется установить к какому порту подключен Nextionи его рабочую скорость передачи данных.

Обычный способ определения подключен Nextion или нет — это посылка команды connect на разных рабочих скоростях до тех пор пока не будет получен корректный ответ. В протоколе, начиная с версии v0.53 введены два режима Адресации и Повторной Обработки и поэтому надо принять во внимание новые соображения. Если активен режим Повторной Обработки, то ответ от дисплея connectÿÿÿ должен быть интерпретирован как входящие данные и что бы произвести загрузку надо перевести дисплей в пассивный режим перед тем как запускать протокол загрузки.

А если у дисплея активен Режим Адресации, то необходимо обращаться к нему по его адресу.

Поэтому пошлите в Nextion следующие команды:

DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ
connectÿÿÿ
ÿÿconnectÿÿÿ

Первая строка заставляет Nextion выйти из режима Повторной Обработки протокола и вернуться в пассивный режим. Вторая строка — это строка для установления связи с Nextion. Третья строка — это команда подключения с широковещательным адресом 65 535. В указанной комбинации Nextion сможет ответить своей строкой подключения независимо от режима в котором он находился.

Замечение:

  1. Разрешение конфликтов с другим оборудованием, которое может быть подключено к тому же самому последовательному порту выходит за рамки описания протокола обмена Nextion. Мы просто рекомендуем подключать Nextion как единственное устройство с известными параметрами подключения и не проводить опрос по всем адресам, в надежде найти его найти на каком‑либо неизвестном адресе.

  2. Строго рекомендуется посылать пустую инструкцию (то есть ÿÿÿ) то посылки команды подключения.

  3. Задержка между попытками подключения не случайна. Она рассчитывается как 1 000 000/Скорость передачи + 30мс.

Для возможных скоростей передачи задержки следующие:

Baudrate

2400

4800

9600

19200

38400

57600

115200

Delay(ms)

447

239

135

83

57

48

39

Чтобы подключиться к Nextion необходимо последовательно перебрать все скорости соединения, начиная с самой маленькой, посылая после установки очередной скорость команды соединения из Шага 1. Если получен ответ, начинающийся с «comok», то это означает, что соединение установлено и установлена правильная скорость обмена.

Шаг 2. Текущая конфигурация Nextion и его адрес.

Nextion возвращает строку подключения если используются правильные параметры подключения и правильный последовательный порт. Например дисплей NX4024T032_011R возвращает 8 групп данных. Данные разделяются запятой.

 comok 1,38024-2556,NX4024T032_011R,99,61488,D264B8204F0E1828,16777216ÿÿÿ

Описание строки подключения:

comok: протокол связи настроен.
1 or 0: Nextion с сенсорной панелью или нет. 1 – касания распознаются: 0 – это пассивный дисплей без распознавания касаний
38024-2556: Частично зарезервировано. Но часть после дефиса - это адрес 2556 = 0x09FC. 
NX4024T032_011R: Модель дисплея Nextion 
99: Версия прошивки, установленная в Nextion
61488: Код микроконтроллера (MCU) 
D264B8204F0E1828: Серийный номер Nextion
16777216: Размер памяти FLASH в байтах

В этой точке режим Повторной Обработки пассивен но может потребоваться управление Режимом Адресации. Если адрес Nextion равен 0, то можно дальше посылать инструкции. Но если Nextionнаходится в Режиме Адресации, то есть его адрес отличается от 0, то все следующие инструкции должны посылаться с префиксом в виде двухбайтного значения адреса. В примере выше указано, что адрес Nextion равен 2556 или в виде HEX 0×09FC. Это означает что все следующие инструкции должны предваряться посылкой двух байт 0xFC 0×09. Обратите внимание, что байты указываются в обратном порядке (прим пер.).

Далее в этом документе предполагается, что адрес дисплея Nextion равен 0 и префиксы с двухбайтным адресом в команды не добавляются.

Шаг 3. Условная обработка сна и затемнения.

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

Для получения данных об установленных параметрах режима сна и режима пониженной яркости надо использовать стандартные команды Nextion (Nextion Instruction Set — https://nextion.tech/instruction‑set/) и для того, чтобы загрузка прошла успешно и без конфликтов, то лучше отключить режим сна и режим диммирования.

Шаг 4. Загрузка прошивки.

К этому моменту нам известна скорость соединения и мы можем посылать команды загрузки.

whmi-wri filesize,baud,res0ÿÿÿ

filesize: размер файла прошивки tft в байтах
baud: скорость обмена (baud rate)
res0: Зарезервировано и может быть заполнено любыми черытьмя символами ASCII

Nextion пошлет байт 0x05 в течение 500 мс после получения команды whmi-wri, сообщая о том, что он готов начать принимать содержимое файла прошивки tft. 

Дожидаться получения байта 0x05 обязательно поскольку если начать передачу раньше, то часть данных будет потеряна и прошивка окажется «битой» и не будет работоспособной. При передаче необходимо разделить прошивку на блоки по 4096 байт. Последний пакет должен быть размером, равным остатку от последних 4096 байт (<=4096 байт). 

После посылки каждого блока необходимо дождаться получения от Nextion байта 0x05, подтверждающего получение очередного пакета. После отправки последнего частичного пакета Nextionтакже должен прислать байт 0x05

Шаг 5. После загрузки прошивки.

После загрузки прошивки Nextion выполнит сброс и внесет внутренние необходимые настройки. Это не мгновенная процедура и ее время заранее неизвестно (оно сильно зависит от количества картинок и видео контента находящегося в прошивке). Когда перезагрузка закончится, то в соответствии с набором команд Nextion отправит уведомление 0×88, означающее, что Nextion готов к работе. Целесообразно после загрузки прошивки дождаться получения этого уведомления до того, как начать стандартно использовать Nextion.

Для Arduino существует готовая библиотека NexUpload, которая является примером работы протокола загрузки Nextion.

https://github.com/itead/ITEADLIBArduinoNextion

Комментарии (10)


  1. dbalabolin Автор
    22.11.2023 09:24

    Надеюсь, что материал исчерпывающий и комментариев не будет


    1. Javian
      22.11.2023 09:24
      +2

      Разве, что спросить что такое "ÿÿÿ".


      1. halfworld
        22.11.2023 09:24
        +1

        На сайте производителя в разделе Instruction Set:

        All instructions over serial: are terminated with three bytes of 0xFF 0xFF 0xFF

        ie: decimal: 255 or hex: 0xFF or ansichar: ÿ or binary: 11111111ie byte ndt[3] = {255,255,255}; write(ndt,3); or print(“\xFF\xFF\xFF”); or print(“ÿÿÿ”)


        1. dbalabolin Автор
          22.11.2023 09:24

          Это команды работы именно с Instruction set - то есть в режиме НЕ загрузки а когда работает сама прошивка.


      1. dbalabolin Автор
        22.11.2023 09:24
        -2

        это слово йух только по сербски


  1. past
    22.11.2023 09:24

    Кажется, у esphome такое уже реализовано. https://esphome.io/components/display/nextion.html
    Смотрели?


    1. dbalabolin Автор
      22.11.2023 09:24

      Не смотрел. Этот перевод для тех кому надо самому реализовать такую загрузку.


  1. x89377
    22.11.2023 09:24

    1. dbalabolin Автор
      22.11.2023 09:24

      Полезные данные о формате, но неизвестно насколько они точны. Официально этот формат не попадался опубликованным.


  1. rubinstein
    22.11.2023 09:24

    Хоть бы написали, что за дисплеи такие, что умеют, характеристики.