Wiki

Clone wiki

firmware_wisart_autostart / Home

Вики проекта по реверс-инжинирингу WisArt AutoStart

Состав репозитория

  • /attiny2313_firmware - прошивка для дисплея

  • /documentation - документация на проект

  • /stub_wisart_autostart - заглушка для дисплея на Tiva C launchpad с четырех-сегментным дисплеем Grove от Seeed для CCS 6.1

  • /wisart_autostart_pcb - проект для OrCAD 16.6 со схемой

Описание дисплея

WP_20160212_03_51_35_Pro.jpg

Это управляемый по RS-485 4-х позиционный 7-сегментный дисплей. Разработчик WisArt, документация на изделие потеряна во времени.

Данные дисплеи включатся в цепочку, управление дисплеем осуществляется через отдельно разработанный модуль "Сортировка" для 1C-Предприятие v 8.8. Данные с компьютера передаются через COM-порт (в том числе и через преобразователь, если того требуют условия заказчика), затем поступают на преобразователь RS-232 -> RS485 и затем, приходя на дисплей, с помощью микросхемы Analog Devices ADM485 преобразуются в 5-вольтовый UART, обрабатываемый микроконтроллером Atmel ATTINY2313A-SU

Структурная схема решения на основе WisArt AutoStart представлена ниже.

wisart_autostart_structure.png

Версии WisArt AutoStart и их отличия

В руки попадалось 2 версии устройства - 2.0 и 2.2

Версия 2.0

WP_20160212_03_52_05_Pro.jpg

Версия 2.2

WP_20160212_03_53_24_Pro.jpg

Как видно из картинок, версии отличаются:

  • Форм-факторами LDO L7805A: в 2.0 - это TO92, в 2.2 - D2PACK.

  • Фильтрующие конденсаторами: в 2.2 версии электролиты были заменены на тантал;

  • В версии 2.2 был увеличен зазор дорожка/полигон и сама ширина дорожек.

  • Производителями дисплеев: в 2.0 используется дисплей Newshine XH-8041BRW (документацию найти не удалось), в 2.2 - LG8041BH (документация также не обнаружена)

Подключение, питание и интерфейсы WisArt AutoStart

Питание - 12V, на плате опускается до 5V с помощью LDO L7805A. Это было определено из переходника MOLEX, с помощью которого подавалось питание на дисплеи (переходник подключается к блоку питания компьютера). Как видно по картинке, отвод происходит с желтого провода, что в MOLEX - 12 V.

В качестве коммуникационного интерфейса используется RS-485. Для подключения Autostart к шине RS-485 используются разъемы RJ-12 (6 пинов), хотя используются только четыре провода (средние, крайние - висят в воздухе):

  • Питание - 12В

  • A (неинвертирующий контакт RS-485)

  • B (инвертирующий контакт RS-485)

  • Земля - GND

Т.о. передача данных полудуплексная, т.к. остальные 2 провода используются для подачи питания.

WisArt Autostart имеет 2 разъема RJ-12 для подключения к шине RS-485 (на картинках находятся рядом с одной стороны) и 1 разъем RJ-12, в котором используются все 6 пинов, для программирования ATTINY - контакты для SPI-программатора (MISO, MOSI, SCK, RESET, GND, VCC).

WisArt AutoStart имеет две кнопки - для упрощения документирования - левую и правую

Пояснительная картинка.

first_pin.jpg

Схема WisArt AutoStart

wisart_autostart_schematic.png

Работа индикаторного дисплея и его распиновка

Дисплей обновляется динамически. Дисплей потребляет ток порядка 40 мА (данное значение колеблется от 30 мА до 55 мА из-за динамического обновления).

Документация на дисплей представлена на рисунке ниже

8041_datasheet.png

Используется дисплей с общим анодом для цифр с распиновкой:

  • 1 пин - общий анод 1-ой цифры

  • 3 пин - общий анод 2-ой цифры

  • 10 пин - общий анод 3-ей цифры

  • 12 пин - общий анод 4-ой цифры

Описание работы WisArt AutoStart

При включении дисплей отображает свой идентификационный номер. Если:

  • нажать левую клавишу, загорится самая левая точка;

  • нажать правую клавишу, загорится самая правая точка.

Если нажать на одну из кнопок, после чего загорится точка, и после этого дисплей получит сообщение от управляющего устройства (смотри ниже), то точка погаснет.

При получении команды "Отобразить значение" (смотри ниже) на дисплее будет отображаться переданное значение (цифра, прочерк или погашенное значение).

Изменение номера WisArt AutoStart

Номер дисплея задается прошивкой самого дейвайса. Для изменения номеров используется режим BitBang преобразователя на основе FTDI, и софт, меняющий определенный байт в прошивке устройства. Данная работа проводилась Олегом Антоняном и владельцу данных устройств был передан софт и программатор (SinaProg и модуль преобразователя USB -> UART от RoboCraft)

Протокол обмена данными с WisArt AutoStart

Обмен данными с WisArt AutoStart производится поверх RS-485 посредством байтового кастомного протокола. Стандарт RS-485 устанавливает правила только на физический уровень обмена данными. WisArt AutoStart управляется посредством битового протокола со следующими параметрами канала:

  1. Скорость - 9600 бод;

  2. Количество бит данных - 8;

  3. Стоп бит - 1;

  4. Бит четности - нет.

Передаваемые значения должны быть строго в шестнадцатиричном (HEX) формате.

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

Сущности протокола

Основными сущностями являются:

  • "Запрос" - сообщение, передаваемое от управляющего устройства к устройству WisArt AutoStart;

  • "Ответ" - сообщение, передаваемое от WisArt AutoStart на управляющее устройство в ответ на запрос.

Типы сообщений

На основании сущностей "Запрос" и "Ответ" формируются 4 типа передаваемых сообщений

  1. Запрос типа "Статус" - формат сообщения, передаваемого от управляющего устройства (компьютера) на WisArt AutoStart, передаваемый с целью проверки наличия на линии устройства WisArt AutoStart с определенным номером (номер является параметром запроса) и получения информации о нажатых кнопках.

  2. Ответ типа "Статус" - формат сообщения, передаваемого WisArt AutoStart в ответ на запрос типа "Статус", сообщающий управляющему устройству о принятии запроса (о своем присутствии на линии) и были ли нажаты кнопки на устройстве.

  3. Запрос типа "Отобразить значение" - формат сообщения, передаваемого от управляющего устройства (компьютера) на WisArt AutoStart, передаваемый с целью установки на индикационном дисплее WisArt AutoStart с определенным номером передаваемого в сообщении значения.

  4. Ответ "Отобразить значение" - формат сообщения, передаваемого WisArt AutoStart в ответ на запрос типа "Отобразить число", сообщающий управляющему устройству о принятии запроса на установку значения и были ли нажаты кнопки на устройстве.

Формат запроса

Запрос имеет длину в 9 байт и выглядит следующим образом (пробелы не передаются, а написаны только для удобства чтения):

00 06 XX YY T1 T2 T3 T4 ZZ

где:

  • XX - номер дисплея в десятеричной системе счисления

  • YY - тип запроса:

    • A6 - запрос типа "Статус"

    • A5 - запрос "Отобразить значение"

  • T1, T2, T3, T4 - значение конкретной позиции (первой, второй, третьей, четвертой позиции) на дисплее:

    • 20 - погасить цифру

    • 2D - отобразить прочерк

    • 30 - отобразить "0"

    • 31 - отобразить "1"

    • 32 - отобразить "2"

    • 33 - отобразить "3"

    • 34 - отобразить "4"

    • 35 - отобразить "5"

    • 36 - отобразить "6"

    • 37 - отобразить "7"

    • 38 - отобразить "8"

    • 39 - отобразить "9"

  • ZZ - контрольная разность (см. ниже)

Формат ответа

Ответ имеет длину в 6 байт и выглядит следующим образом (пробелы не передаются, а написаны только для удобства чтения):

04 XX YY S1 S2 ZZ

где:

  • XX - номер дисплея в десятеричной системе счисления

  • YY - тип ответа:

    • A6 - ответ на запрос типа "Статус"

    • A5 - ответ на запрос "Отобразить значение"

  • S1 - значение левой кнопки:

    • 30 - до передачи сообщения кнопка не была нажата

    • 31 - до передачи сообщения кнопка была нажата. После отправки ответа значение обнуляется (становится равным 30)

  • S2 - значение правой кнопки:

    • 30 - до передачи сообщения кнопка не была нажата

    • 31 - до передачи сообщения кнопка была нажата. После отправки ответа значение обнуляется (становится равным 30)

  • ZZ - контрольная разность (см. ниже)

Контрольная разность и ее вычисление

Контрольная разность служит средством для верификации правильности получения сообщения.

Контрольная разность (байт ZZ) вычисляется следующим образом:

  1. Берем значение 0xFFFF (в HEX)

  2. Из 0xFFFF последовательно вычитаем значение всех предыдущих байтов (вычисления проводятся также в шестнадцатеричной системе)

  3. Из получившегося значения отбрасываем левые две позиции. Оставшиеся правые 2 позиции являются контрольной разностью

  4. Подставляем получившееся значение в запрос

Пример вычисления контрольной разности:

Допустим мы хотим передать запрос "Отобразить значение" "0001" на WisArt AutoStart с номером 23. Такой запрос будет иметь вид

00 06 23 A5 30 30 30 31 ZZ

где ZZ - контрольная разность, которую необходимо определить.

Для этого:

  1. Берем значение FFFF

  2. Последовательно вычитаем из FFFF значения остальных битов: FFFF - 31 - 30 - 30 - 30 - A5 - 23 - 06 - 00 = FE70

  3. Отбрасываем две левых позиции из FE70. Получаем 70.

  4. 70 - это искомая контрольная разность, которую необходимо подставить в запрос.

Т.о. валидный запрос "Отобразить значение" "0001" на WisArt AutoStart с номером 23 будет иметь вид:

00 06 23 A5 30 30 30 31 70

(примечание - пробелы при передаче не ставятся, а пишутся в руководстве только для удобства. Запрос для копирования - 000623A53030303170)

Организация обмена сообщениями между управляющим устройством (компьютером) и WisArt AutoStart

При включении линии с WisArt AutoStart (количество не важно) до момента передачи первого сообщения от управляющего устройства на них отображается номер.

При получении первого же запроса "Отобразить значение" на них отображается переданное значение и номер более не показывается. Если передать запрос "Статус", номер будет продолжать отображаться, но будет обнуляться значение нажатых кнопок (точки слева и справа на индикационном дисплее).

Если в запросе "Статус" указать значение для позиций дисплея, то оно не будет изменено.

Если передать в запросе "Отобразить значение" все погашенные цифры (20 20 20 20), то запрос не будет обработан и на дисплее будет отображаться предыдущее значение.

Управляющее устройство постоянно генерирует запросы "Статус" ко всем указанным в программе "Сортировка" дисплеям с периодичностью около 100 миллисекунд.

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

С помощью запросов "Отобразить значение" или "Статус" управляющим устройство (компьютер) может получать значение кнопок.

Порядок работы WisArt AutoStart на линии:

  1. Включение всех устройств;

  2. Включение программы "Сортировка"

  3. "Сортировка" передает на все устройства при запуске запрос "Отобразить значение" вида "00 06 XX A5 20 2D 2D 20 ZZ", где ХХ - номер дисплея, ZZ - контрольная разность. Данный запрос отобразит на всех дисплеях две черточки. В ответ "Сортировка" получает от каждого устройства ответ на запрос "Отобразить значение" сообщение вида "04 XX A5 S1 S2 ZZ", где ХХ - номер устройства, S1 - информация о нажатии левой кнопки, S2 - информация о нажатии правой кнопки, ZZ - контрольная разность. Если кнопка была нажата (например S1 = 31), то после ответа на запрос ее значение будет сброшено (S1 = 30).

  4. Далее программа "Сортировка" реализует бизнес-логику.

Примеры валидных пар "Запрос-Ответ"

"Отобразить значение" "0001" на WisArtAutoStart с номером 23 будет иметь вид:

  • Запрос: 00 06 23 A5 30 30 30 31 70 (для копирования "000623A53030303170")

  • Ответ: 04 23 A5 30 30 D3

"Статус" WisArtAutoStart с номером 23 будет иметь вид:

  • Запрос: 00 06 23 A6 20 20 20 20 B0 (для копирования "000623A620202020B0")

  • Ответ: 04 23 A6 30 30 D2

"Статус" WisArtAutoStart с номером 23, если была нажата левая кнопка, будет иметь вид:

  • Запрос: 00 06 23 A6 20 20 20 20 B0 (для копирования "000623A620202020B0")

  • Ответ: 04 23 A6 31 30 D1

"Статус" WisArtAutoStart с номером 23, если была нажата правая кнопка, будет иметь вид:

  • Запрос: 00 06 23 A6 20 20 20 20 B0 (для копирования "000623A620202020B0")

  • Ответ: 04 23 A6 30 31 D1

"Отобразить значение" "--" на WisArtAutoStart с номером 23:

  • Запрос: 00 06 23 A5 20 2D 2D 20 97 (для копирования "000623A5202D2D2097")

  • Ответ: 04 23 A5 30 30 D3

Видео тестирования

Видео тестирования доступно на YouTube

Видео с тестированием WisArt AutoStart

Ссылки

Обратная связь

Если у вас возникли вопросы:

Данил Борчевкин - danil.borchevkin@lab409.ru

Updated