В пульте управления к квадрокоптеру Syma X5SC применён ЖКИ BAOMEI BM-8001B. Найти какую-либо информацию о нём сложно, что не удивительно, т.к. это не стандартный дисплей, а заказной, сделанный в тростниковых хижинах китайской фирмы BAOMEI. Внешний вид дисплея показан на фото ниже.
Как видно, на обратной стороне присутствует некоторая маркировка, но толку от неё ровно ноль. Китайцы не поленились и указали маркировку выводов - дисплей подключен по 5 проводам, 2 из которых питания, 3 сигнальные. Вооружившись логическим анализатором смотрим что у нас происходит на выводах дисплея при включении пульта. Микроконтроллер пульта каждые 68мс отправляет на дисплей пачку команд.
Пачка состоит из 36 слов. Первые 32 слова состоят из 13 бит каждое, это данные - они задают изображение на дисплее. Последние 4 слова состоят из 12 бит, это команды настройки параметров дисплея. Что они означают - понять без документации не возможно, поэтому их не трогаем и оставляем как есть. Рассмотрим подробнее оно из слов в пачке
Как видно, протокол сильно напоминает SPI. Линия CS активирует дисплей для приёма наших пакетов, по выводу DAT передаются данные, а WR выступает в роли тактового сигнала аналогично CLK у SPI.
Последовательность слов в пакете следующая
Каждое слово из двух байт, для простоты изложения - из 4 цифр. Первые 3 цифры задают номер элемента на экране (можно сказать - адрес), последняя цифра задаёт состояние элемента изображения. Каждая шестнадцатеричная цифра в слове это так называемый полубайт, состоящий в двоичном виде из 4 бит. Так вот, если бит = 1, то элемент изображения на экране виден, если бит = 0 - то нет.
С ходу возможно понять сложно. Смотрим на последовательность слов в пачке. Видим там какие-то цифры с прочерком в конце. Каждая такая цифра это определённый элемент на дисплее. Например, 0х149_ - отвечает за отображение “кубиков” внутри батареи. На месте прочерка у нас полубайт из 4 бит, каждый бит отвечает за свой “кубик”. Если мы хотим показать на батарее один “кубик”, то в пачке мы должны отправить 0х149_ с изменением в виде 0х1498, если хотим 2 “кубика” - 0х149С. На картинке ниже наглядно показан принцип построения изображения
Таким образом на дисплей выводятся все элементы изображения. Проанализировав отправляемые в дисплей с микроконтроллера пульта данные, удалось выявить, какое слово за какой элемент изображения отвечает.
На этом всё, с дисплеем покончено.
Продолжение следует.
Тоже понадобилось разобраться с этим дисплеем.
Сначала разобрался потом увидел этот пост. Я реализовал намного другим способом, управляя всеми символами побитно.
Если кому будет интересно то выложил эту библиотеку под STM32 на github. github.com/Deman75/BAOMEI_BM-8001B
В библиотеке реализованы все функции по управлению отображением шкал и символов.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"405ec5c83df9550077794e80":{"_id":"405ec5c83df9550077794e80","hid":3166,"name":"RW9UAO","nick":"RW9UAO","avatar_id":null,"css":""},"5370ed573df9550077729407":{"_id":"5370ed573df9550077729407","hid":201598,"name":"Deman75","nick":"Deman75","avatar_id":null,"css":""},"56e7c66e3df95500777131dc":{"_id":"56e7c66e3df95500777131dc","hid":247657,"name":"Falco","nick":"Falco","avatar_id":null,"css":""},"57acb46f3df955007770e80d":{"_id":"57acb46f3df955007770e80d","hid":254997,"name":"yot","nick":"yot","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"56f0546e99707300771147dd","hid":21546,"title":"Реверсинжиринг Syma X5SC. Часть 1. Дисплей пульта.","html":"<p>В пульте управления к квадрокоптеру Syma X5SC применён ЖКИ BAOMEI BM-8001B. Найти какую-либо информацию о нём сложно, что не удивительно, т.к. это не стандартный дисплей, а заказной, сделанный в тростниковых хижинах китайской фирмы BAOMEI. Внешний вид дисплея показан на фото ниже.</p>\n<p><a href=\"http://img.radiokot.ru/files/22869/medium/z2jq2kgni.png\" class=\"link link-ext\" data-nd-link-orig=\"http://img.radiokot.ru/files/22869/medium/z2jq2kgni.png\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 180px\" data-nd-image-orig=\"http://img.radiokot.ru/files/22869/thumbnail/z2jq2kgni.png\"><img src=\"http://img.radiokot.ru/files/22869/thumbnail/z2jq2kgni.png\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 40.0000%\"></span></span></a></p>\n<p>Как видно, на обратной стороне присутствует некоторая маркировка, но толку от неё ровно ноль. Китайцы не поленились и указали маркировку выводов - дисплей подключен по 5 проводам, 2 из которых питания, 3 сигнальные. Вооружившись логическим анализатором смотрим что у нас происходит на выводах дисплея при включении пульта. Микроконтроллер пульта каждые 68мс отправляет на дисплей пачку команд.</p>\n<!--cut-->\n<p><a href=\"http://img.radiokot.ru/files/22869/medium/z2jpt7xq9.png\" class=\"link link-ext\" data-nd-link-orig=\"http://img.radiokot.ru/files/22869/medium/z2jpt7xq9.png\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 180px\" data-nd-image-orig=\"http://img.radiokot.ru/files/22869/thumbnail/z2jpt7xq9.png\"><img src=\"http://img.radiokot.ru/files/22869/thumbnail/z2jpt7xq9.png\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 23.8889%\"></span></span></a></p>\n<p>Пачка состоит из 36 слов. Первые 32 слова состоят из 13 бит каждое, это данные - они задают изображение на дисплее. Последние 4 слова состоят из 12 бит, это команды настройки параметров дисплея. Что они означают - понять без документации не возможно, поэтому их не трогаем и оставляем как есть. Рассмотрим подробнее оно из слов в пачке</p>\n<p><a href=\"http://img.radiokot.ru/files/22869/medium/z2jpt59ql.png\" class=\"link link-ext\" data-nd-link-orig=\"http://img.radiokot.ru/files/22869/medium/z2jpt59ql.png\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 180px\" data-nd-image-orig=\"http://img.radiokot.ru/files/22869/thumbnail/z2jpt59ql.png\"><img src=\"http://img.radiokot.ru/files/22869/thumbnail/z2jpt59ql.png\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 20.5556%\"></span></span></a></p>\n<p>Как видно, протокол сильно напоминает SPI. Линия CS активирует дисплей для приёма наших пакетов, по выводу DAT передаются данные, а WR выступает в роли тактового сигнала аналогично CLK у SPI.<br>\nПоследовательность слов в пакете следующая</p>\n<pre class=\"hljs\"><code>//LCD data\n0x15f_\n0x15e_\n0x15d_\n0x15c_\n0x15b_\n0x15a_\n0x159_\n0x158_\n0x157_\n0x156_\n0x155_\n0x154_\n0x153_\n0x152_\n0x151_\n0x150_\n0x14f_\n0x14e_\n0x14d_\n0x14c_\n0x14b_\n0x14a_\n0x149_\n0x148_\n0x147_\n0x146_\n0x145_\n0x144_\n0x143_\n0x142_\n0x1410 //not use\n0x1400 //not use\n\n//LCD comands\n0x9c7\n0x803\n0x853\n0x807\n</code></pre>\n<p>Каждое слово из двух байт, для простоты изложения - из 4 цифр. Первые 3 цифры задают номер элемента на экране (можно сказать - адрес), последняя цифра задаёт состояние элемента изображения. Каждая шестнадцатеричная цифра в слове это так называемый полубайт, состоящий в двоичном виде из 4 бит. Так вот, если бит = 1, то элемент изображения на экране виден, если бит = 0 - то нет.</p>\n<p>С ходу возможно понять сложно. Смотрим на последовательность слов в пачке. Видим там какие-то цифры с прочерком в конце. Каждая такая цифра это определённый элемент на дисплее. Например, 0х149_ - отвечает за отображение “кубиков” внутри батареи. На месте прочерка у нас полубайт из 4 бит, каждый бит отвечает за свой “кубик”. Если мы хотим показать на батарее один “кубик”, то в пачке мы должны отправить 0х149_ с изменением в виде 0х1498, если хотим 2 “кубика” - 0х149С. На картинке ниже наглядно показан принцип построения изображения</p>\n<p><a href=\"http://img.radiokot.ru/files/22869/medium/z2jq127vp.png\" class=\"link link-ext\" data-nd-link-orig=\"http://img.radiokot.ru/files/22869/medium/z2jq127vp.png\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 159px\" data-nd-image-orig=\"http://img.radiokot.ru/files/22869/thumbnail/z2jq127vp.png\"><img src=\"http://img.radiokot.ru/files/22869/thumbnail/z2jq127vp.png\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 100.6289%\"></span></span></a></p>\n<p>Таким образом на дисплей выводятся все элементы изображения. Проанализировав отправляемые в дисплей с микроконтроллера пульта данные, удалось выявить, какое слово за какой элемент изображения отвечает.</p>\n<p><a href=\"http://img.radiokot.ru/files/22869/medium/z2jrt0fq5.JPG\" class=\"link link-ext\" data-nd-link-orig=\"http://img.radiokot.ru/files/22869/medium/z2jrt0fq5.JPG\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 180px\" data-nd-image-orig=\"http://img.radiokot.ru/files/22869/thumbnail/z2jrt0fq5.JPG\"><img src=\"http://img.radiokot.ru/files/22869/thumbnail/z2jrt0fq5.JPG\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 80.5556%\"></span></span></a></p>\n<p>На этом всё, с дисплеем покончено.<br>\nПродолжение следует.</p>\n","user":"56e7c66e3df95500777131dc","ts":"2016-03-21T20:07:10.000Z","st":1,"cache":{"comment_count":3,"last_comment":"5d1fdd329970730077125b96","last_comment_hid":3,"last_ts":"2019-07-05T23:28:50.000Z","last_user":"5370ed573df9550077729407"},"views":1723,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}