Реверсинжиринг Syma X5SC. Часть 1. Дисплей пульта.

В пульте управления к квадрокоптеру Syma X5SC применён ЖКИ BAOMEI BM-8001B. Найти какую-либо информацию о нём сложно, что не удивительно, т.к. это не стандартный дисплей, а заказной, сделанный в тростниковых хижинах китайской фирмы BAOMEI. Внешний вид дисплея показан на фото ниже.

Как видно, на обратной стороне присутствует некоторая маркировка, но толку от неё ровно ноль. Китайцы не поленились и указали маркировку выводов - дисплей подключен по 5 проводам, 2 из которых питания, 3 сигнальные. Вооружившись логическим анализатором смотрим что у нас происходит на выводах дисплея при включении пульта. Микроконтроллер пульта каждые 68мс отправляет на дисплей пачку команд.

Пачка состоит из 36 слов. Первые 32 слова состоят из 13 бит каждое, это данные - они задают изображение на дисплее. Последние 4 слова состоят из 12 бит, это команды настройки параметров дисплея. Что они означают - понять без документации не возможно, поэтому их не трогаем и оставляем как есть. Рассмотрим подробнее оно из слов в пачке

Как видно, протокол сильно напоминает SPI. Линия CS активирует дисплей для приёма наших пакетов, по выводу DAT передаются данные, а WR выступает в роли тактового сигнала аналогично CLK у SPI.
Последовательность слов в пакете следующая

//LCD data
0x15f_
0x15e_
0x15d_
0x15c_
0x15b_
0x15a_
0x159_
0x158_
0x157_
0x156_
0x155_
0x154_
0x153_
0x152_
0x151_
0x150_
0x14f_
0x14e_
0x14d_
0x14c_
0x14b_
0x14a_
0x149_
0x148_
0x147_
0x146_
0x145_
0x144_
0x143_
0x142_
0x1410 //not use
0x1400 //not use

//LCD comands
0x9c7
0x803
0x853
0x807

Каждое слово из двух байт, для простоты изложения - из 4 цифр. Первые 3 цифры задают номер элемента на экране (можно сказать - адрес), последняя цифра задаёт состояние элемента изображения. Каждая шестнадцатеричная цифра в слове это так называемый полубайт, состоящий в двоичном виде из 4 бит. Так вот, если бит = 1, то элемент изображения на экране виден, если бит = 0 - то нет.

С ходу возможно понять сложно. Смотрим на последовательность слов в пачке. Видим там какие-то цифры с прочерком в конце. Каждая такая цифра это определённый элемент на дисплее. Например, 0х149_ - отвечает за отображение “кубиков” внутри батареи. На месте прочерка у нас полубайт из 4 бит, каждый бит отвечает за свой “кубик”. Если мы хотим показать на батарее один “кубик”, то в пачке мы должны отправить 0х149_ с изменением в виде 0х1498, если хотим 2 “кубика” - 0х149С. На картинке ниже наглядно показан принцип построения изображения

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

На этом всё, с дисплеем покончено.
Продолжение следует.

  • 1723
Comments
RW9UAO

хорошая работа.

yot

Спасибо, довольно интересно…

Deman75

Доброго времени суток!

Тоже понадобилось разобраться с этим дисплеем.
Сначала разобрался потом увидел этот пост. Я реализовал намного другим способом, управляя всеми символами побитно.
Если кому будет интересно то выложил эту библиотеку под STM32 на github. github.com/Deman75/BAOMEI_BM-8001B
В библиотеке реализованы все функции по управлению отображением шкал и символов.