Прошивальщико-отладчик из серийного монстра

В предыдущей статье я описывал, как устроены цифровые ценники и как их можно использовать для своих нужд. Некоторое время тому назад именно таких ценников, с интерфейсом Zigbee, было на eBay если и не полно, то по крайней мере раз в неделю какой-нибудь лот появлялся.
Сейчас их видно реже — надо дождаться. Но есть другие примерно за такую же цену — меньше 2 евро за штуку, но 250 штук сразу. Называются Hanshow Stellar — и, может быть, они и лучше моих. Интерфейс у них Bluetooth (BLE), соответственно работать с ними гораздо проще. Микроконтроллер тоже используется один из известных (MSP430, CC2640R2F или TLSR8359), на которые вполне можно найти спецификации и с программированием проблем нет. Нашлись даже статьи про них тут и тут, написанные красивыми иероглифами. Что и как с этими ценниками делать — описано в первой из статей.
Но — что имеем, то имеем. Я бы и Stellar тоже разобрал бы, если бы была возможность получить штуки 3 недорого, а покупать 250 — извините, мне их уже девать некуда.
Кстати, для тех, кто ищет где недорого купить ценники — судя по этому сайту, народ иногда покупает их из-под полы у Аарона — ценники бу, самые разные. В том числе и с дисплеями побольше, которые дешево купить вообще трудно (4,2 дюйма он продает 10 евро за штуку плюс доставка). Но это не точно :) — нидерландского я не знаю, а гугл мог и соврать при переводе. Как с ним договариваются (с Аароном, не гуглом) — я не в курсе.
Да, как я писал в предыдущей статье, мне же продавец закинул две пары ценников, которые я не заказывал. Не пора ли их распотрошить? Одна пара похожа на мои, только размер дисплея меньше — расковыривать нет смысла. А вот на других — несколько другие надписи, Samsung вместо SoluM. Хотя говорят, что это и одно и то же — SoluM это Samsung Electro Mechanics, но чем черт не шутит?

Вскрываем и видим — основной контроллер нам уже знаком, это ZBS242 под маской SEM9110. Т.е. опять ZigBee. А вот рядом микросхема побольше — SEM9010, на который спецификация не находится, если не знать, что это опять маскарад. Под маской — SSD1623L2, и на нее спецификация успешно ищется, это контроллер сегментного дисплея.

А вот сам дисплей уже интереснее. На самом деле никакого дисплея и нет. Сегментная структура, которая отображается на этом дисплее — это просто рисунок на печатной плате, на который сверху приклеена та же пленка, что и в обычном электронно-бумажном дисплее.


Такой дисплей вы можете сделать сами — нужно просто нарисовать на печатной платке нужные сегменты, а сверху положить пленку от сломанного дисплея из электронной книжки, просто оторвав ее от стекляшки (но будет сложно, легкой жизни никто не обещает) — впрочем, кто-то уже постарался выложить видео:
Все это любопытно, но не более того. Я не знаю, для чего мне может понадобиться сегментированный e-ink дисплей. Хотя скорость обновления у него намного больше, чем у трехцветного графического — если не использовать готовый специализированный контроллер, вы все определяете сами. Статью со схемами и подробным описанием изготовления такого дисплея я где-то видел, но с тех пор меня или в гугле забанили, или ее удалили — снова найти не могу. Единственное, что нашлось — тут.
Несмотря на отсутствие графического дисплея, эти ценники далеко не бесполезны. По какой-то причине у них радиус действия Zigbee больше — может быть антенны удачнее. Народ их использует для изготовления станций доступа к обычным этикеткам.
А у моих ценников Solum ST-GR29000 на базе ZBS243 обнаружилась неприятная особенность — чтобы сделать элементарный сброс, от микропроцессора нужно отключить все сигналы, кроме собственно сброса. Для большинства сигналов это не проблема, программатор переводит свои ножки в режим входа и дело сделано. Но для отладки обычно еще подключен последовательный интерфейс — и он тоже мешает. У меня USB-Serial свисток приходилось отключать для каждого сброса. Во-первых, это надоедает, во-вторых, после сброса микроконтроллер начинает выдавать кучу отладочных сообщений, и как их увидеть, если порт отключен?
Кстати, мой подключенный логический анализатор иногда тоже не дает сбросить процессор — видимо, там подтягивающие резисторы есть.
Куча проводов, вьющихся по столу от хаба, глаз тоже особо не радует.
Решение общеизвестно — комбинированное USB устройство. У вас есть желание читать тысячи страниц, чтобы разобраться в тонкостях функционирования USB и написать свою программу? У меня лично нет, тем более все, что изучено, через несколько недель я забуду. Склероз крепчает, да и не нужно все это, и для будущего вряд ли пригодится — на какое будущее может рассчитывать пенсионер?
Посему пытаемся найти готовый проект, который с одним микроконтроллером изображает несколько CDC, известных в миру, как виртуальный COM порт, и модифицировать его под себя. Немного проектов, но находится. Проблема в том, что я ищу реализацию для какого-нибудь дешевого и распространенного микроконтроллера — по этим параметрам с STM32F103C8 конкурировать сложно. Но в последнее время многие программисты обленились и пересели на куб, вместо того, чтобы разбираться с аппаратурой самим. В итоге размер кода разросся до неимоверных размеров и возможности теперь ограничены библиотеками, а не аппаратурой.
В итоге ищем старые реализации, написанные до того, как народ плотно подсел на куб. Там другая проблема — те библиотеки, для которых все это писалось, найти уже крайне сложно. И с новыми версиями компиляторов они уже не компилируются. Еще подчас и написаны для среды типа Кейла — это вообще-то недешевый компилятор. Вариант с трофейным программным обеспечением никто не отменял, но оно нам надо, когда есть бесплатные компиляторы? Пусть не так хороши, но убогий программист способен угробить все ресурсы супер-пупер микроконтроллера самым лучшим компилятором, и ему еще этих ресурсов мало покажется.
Но в итоге вариант нашелся — устройство, которое изображает сразу 3 последовательных порта. Причем зависит только от CMSIS — т.е. практически голое железо, никаких библиотек, связанных с аппаратурой микроконтроллера. Код лежит здесь и статью от автора можно прочитать на Хабре. Обитатели Хабра как-то не очень оценили проект, рейтинг совсем небольшой — я бы еще нулик приписал бы справа, работа большая и сделано красиво. Проект назван автором очень романтично — Синепилюльный Серийный Монстр. PlatformIO компилирует его аж со свистом. И это действительно монстр — у него есть все мыслимые и немыслимые сигналы RS232 плюс интерфейс для их конфигурирования.



Берем этого монстра за жабры и уделываем, как Бог черепаху. Большинство сигналов просто выкидываем за ненадобностью, один из последовательных интерфейсов тоже выкидываем. Вместо него цепляем программу для программирования ZBS243. За основу берем программатор описанный здесь.
Интерфейс обмена с компьютером у этого программатора довольно-таки странный, но пусть будет, как есть. По крайней мере не надо гадать, где натуфтил — в прошивке или программе компьютера. Исходники положил тут — но за результаты применения не отвечаю.
Для отладки, конечно, пришлось написать программку, и, в отличие от оригинальной, она имеет вполне себе графический интерфейс.

Но чтобы ей пользоваться реально — надо до ума довести. Если уж совсем нечего делать будет — может, займусь и этим. А пока можно пользоваться и тем, что у автора оригинального программатора нашлось, с командной строкой.
Пока статья лежала в черновиках, лень немного отпустила и появился графический интерфейс, но пока только для себя, выгребу ошибки — положу на гитхаб:

Третий порт монстра заменяем этим программатором — по сути дела, выбрасываем конфигуратор монстра и на его место занимаем кодом программатора. У STM32F103C8 3 аппаратных последовательных порта, теперь один остается не при делах. И программному обеспечению столько памяти тоже не надо. Так что STM32F103C8 можно смело поменять на STM32F103C6 — у него и памяти в два раза меньше, и порта всего два. Экономика должна быть экономной, как говорил дорогой Леонид Ильич. STM32F103C6 на Али сейчас продается за 50-60 центов и подчас доставка бесплатная. Я не так давно на эту халяву польстился, купил их в районе десятка — вот они и пригодились.
Схема получилась такая:

И платка — пока только в фантазиях, реально — макетка:

Теперь расклад такой — третий порт у нас изображает программатор для ZBS243, первый — отладочный порт для него же. А еще второй остался. Чтобы добро не пропадало, добавляем пару транзисторов — и вуаля! — у нас есть еще и программатор для ESP8266/ESP32 на той же платке. С учетом того, что в проектах с этикетками обычно еще и WiFi нужен для какого-нибудь моста, дополнение очень даже не лишнее.


Может кому сгодится. Даже не в той конфигурации, как у меня — исходники есть, можно модернизировать, как Бог на душу положит. А сама идея использовать монстра с модификациями мне очень нравится.
Но имейте в виду — в монструозном программном обеспечении USB работает по опросу. Если вы пишете какое-то свое расширение и оно работает не с DMA и прерываниями — остальные порты во время работы программатора или чего уж там добавили, работать нормально вряд ли будут. Особенно в моем варианте — там очень много тупых задержек. А многозадачную операционную систему тоже не поставишь по той же причине — USB работает по опросу. А по своему прямому предназначению монстру работа по опросу ни разу не мешает.
Сейчас их видно реже — надо дождаться. Но есть другие примерно за такую же цену — меньше 2 евро за штуку, но 250 штук сразу. Называются Hanshow Stellar — и, может быть, они и лучше моих. Интерфейс у них Bluetooth (BLE), соответственно работать с ними гораздо проще. Микроконтроллер тоже используется один из известных (MSP430, CC2640R2F или TLSR8359), на которые вполне можно найти спецификации и с программированием проблем нет. Нашлись даже статьи про них тут и тут, написанные красивыми иероглифами. Что и как с этими ценниками делать — описано в первой из статей.
Но — что имеем, то имеем. Я бы и Stellar тоже разобрал бы, если бы была возможность получить штуки 3 недорого, а покупать 250 — извините, мне их уже девать некуда.
Кстати, для тех, кто ищет где недорого купить ценники — судя по этому сайту, народ иногда покупает их из-под полы у Аарона — ценники бу, самые разные. В том числе и с дисплеями побольше, которые дешево купить вообще трудно (4,2 дюйма он продает 10 евро за штуку плюс доставка). Но это не точно :) — нидерландского я не знаю, а гугл мог и соврать при переводе. Как с ним договариваются (с Аароном, не гуглом) — я не в курсе.
Да, как я писал в предыдущей статье, мне же продавец закинул две пары ценников, которые я не заказывал. Не пора ли их распотрошить? Одна пара похожа на мои, только размер дисплея меньше — расковыривать нет смысла. А вот на других — несколько другие надписи, Samsung вместо SoluM. Хотя говорят, что это и одно и то же — SoluM это Samsung Electro Mechanics, но чем черт не шутит?

Вскрываем и видим — основной контроллер нам уже знаком, это ZBS242 под маской SEM9110. Т.е. опять ZigBee. А вот рядом микросхема побольше — SEM9010, на который спецификация не находится, если не знать, что это опять маскарад. Под маской — SSD1623L2, и на нее спецификация успешно ищется, это контроллер сегментного дисплея.

А вот сам дисплей уже интереснее. На самом деле никакого дисплея и нет. Сегментная структура, которая отображается на этом дисплее — это просто рисунок на печатной плате, на который сверху приклеена та же пленка, что и в обычном электронно-бумажном дисплее.


Такой дисплей вы можете сделать сами — нужно просто нарисовать на печатной платке нужные сегменты, а сверху положить пленку от сломанного дисплея из электронной книжки, просто оторвав ее от стекляшки (но будет сложно, легкой жизни никто не обещает) — впрочем, кто-то уже постарался выложить видео:
Все это любопытно, но не более того. Я не знаю, для чего мне может понадобиться сегментированный e-ink дисплей. Хотя скорость обновления у него намного больше, чем у трехцветного графического — если не использовать готовый специализированный контроллер, вы все определяете сами. Статью со схемами и подробным описанием изготовления такого дисплея я где-то видел, но с тех пор меня или в гугле забанили, или ее удалили — снова найти не могу. Единственное, что нашлось — тут.
Несмотря на отсутствие графического дисплея, эти ценники далеко не бесполезны. По какой-то причине у них радиус действия Zigbee больше — может быть антенны удачнее. Народ их использует для изготовления станций доступа к обычным этикеткам.
А у моих ценников Solum ST-GR29000 на базе ZBS243 обнаружилась неприятная особенность — чтобы сделать элементарный сброс, от микропроцессора нужно отключить все сигналы, кроме собственно сброса. Для большинства сигналов это не проблема, программатор переводит свои ножки в режим входа и дело сделано. Но для отладки обычно еще подключен последовательный интерфейс — и он тоже мешает. У меня USB-Serial свисток приходилось отключать для каждого сброса. Во-первых, это надоедает, во-вторых, после сброса микроконтроллер начинает выдавать кучу отладочных сообщений, и как их увидеть, если порт отключен?
Кстати, мой подключенный логический анализатор иногда тоже не дает сбросить процессор — видимо, там подтягивающие резисторы есть.
Куча проводов, вьющихся по столу от хаба, глаз тоже особо не радует.
Решение общеизвестно — комбинированное USB устройство. У вас есть желание читать тысячи страниц, чтобы разобраться в тонкостях функционирования USB и написать свою программу? У меня лично нет, тем более все, что изучено, через несколько недель я забуду. Склероз крепчает, да и не нужно все это, и для будущего вряд ли пригодится — на какое будущее может рассчитывать пенсионер?
Посему пытаемся найти готовый проект, который с одним микроконтроллером изображает несколько CDC, известных в миру, как виртуальный COM порт, и модифицировать его под себя. Немного проектов, но находится. Проблема в том, что я ищу реализацию для какого-нибудь дешевого и распространенного микроконтроллера — по этим параметрам с STM32F103C8 конкурировать сложно. Но в последнее время многие программисты обленились и пересели на куб, вместо того, чтобы разбираться с аппаратурой самим. В итоге размер кода разросся до неимоверных размеров и возможности теперь ограничены библиотеками, а не аппаратурой.
В итоге ищем старые реализации, написанные до того, как народ плотно подсел на куб. Там другая проблема — те библиотеки, для которых все это писалось, найти уже крайне сложно. И с новыми версиями компиляторов они уже не компилируются. Еще подчас и написаны для среды типа Кейла — это вообще-то недешевый компилятор. Вариант с трофейным программным обеспечением никто не отменял, но оно нам надо, когда есть бесплатные компиляторы? Пусть не так хороши, но убогий программист способен угробить все ресурсы супер-пупер микроконтроллера самым лучшим компилятором, и ему еще этих ресурсов мало покажется.
Но в итоге вариант нашелся — устройство, которое изображает сразу 3 последовательных порта. Причем зависит только от CMSIS — т.е. практически голое железо, никаких библиотек, связанных с аппаратурой микроконтроллера. Код лежит здесь и статью от автора можно прочитать на Хабре. Обитатели Хабра как-то не очень оценили проект, рейтинг совсем небольшой — я бы еще нулик приписал бы справа, работа большая и сделано красиво. Проект назван автором очень романтично — Синепилюльный Серийный Монстр. PlatformIO компилирует его аж со свистом. И это действительно монстр — у него есть все мыслимые и немыслимые сигналы RS232 плюс интерфейс для их конфигурирования.



Берем этого монстра за жабры и уделываем, как Бог черепаху. Большинство сигналов просто выкидываем за ненадобностью, один из последовательных интерфейсов тоже выкидываем. Вместо него цепляем программу для программирования ZBS243. За основу берем программатор описанный здесь.
Интерфейс обмена с компьютером у этого программатора довольно-таки странный, но пусть будет, как есть. По крайней мере не надо гадать, где натуфтил — в прошивке или программе компьютера. Исходники положил тут — но за результаты применения не отвечаю.
Для отладки, конечно, пришлось написать программку, и, в отличие от оригинальной, она имеет вполне себе графический интерфейс.

Но чтобы ей пользоваться реально — надо до ума довести. Если уж совсем нечего делать будет — может, займусь и этим. А пока можно пользоваться и тем, что у автора оригинального программатора нашлось, с командной строкой.
Пока статья лежала в черновиках, лень немного отпустила и появился графический интерфейс, но пока только для себя, выгребу ошибки — положу на гитхаб:

Третий порт монстра заменяем этим программатором — по сути дела, выбрасываем конфигуратор монстра и на его место занимаем кодом программатора. У STM32F103C8 3 аппаратных последовательных порта, теперь один остается не при делах. И программному обеспечению столько памяти тоже не надо. Так что STM32F103C8 можно смело поменять на STM32F103C6 — у него и памяти в два раза меньше, и порта всего два. Экономика должна быть экономной, как говорил дорогой Леонид Ильич. STM32F103C6 на Али сейчас продается за 50-60 центов и подчас доставка бесплатная. Я не так давно на эту халяву польстился, купил их в районе десятка — вот они и пригодились.
Схема получилась такая:

И платка — пока только в фантазиях, реально — макетка:

Теперь расклад такой — третий порт у нас изображает программатор для ZBS243, первый — отладочный порт для него же. А еще второй остался. Чтобы добро не пропадало, добавляем пару транзисторов — и вуаля! — у нас есть еще и программатор для ESP8266/ESP32 на той же платке. С учетом того, что в проектах с этикетками обычно еще и WiFi нужен для какого-нибудь моста, дополнение очень даже не лишнее.


Может кому сгодится. Даже не в той конфигурации, как у меня — исходники есть, можно модернизировать, как Бог на душу положит. А сама идея использовать монстра с модификациями мне очень нравится.
Но имейте в виду — в монструозном программном обеспечении USB работает по опросу. Если вы пишете какое-то свое расширение и оно работает не с DMA и прерываниями — остальные порты во время работы программатора или чего уж там добавили, работать нормально вряд ли будут. Особенно в моем варианте — там очень много тупых задержек. А многозадачную операционную систему тоже не поставишь по той же причине — USB работает по опросу. А по своему прямому предназначению монстру работа по опросу ни разу не мешает.
Самые обсуждаемые обзоры
Где ты был, donBaton, когда я эти битые экраны выкидывал?! ;) Штуки три уже выкинул. :( Но с другой стороны, штуки три и щас в закромах найдётся (родителям спасибо;). Буду хоть знать теперь, что это ценный ресурс… ;)
Шикарный материал! Огромное благодарю за доставленное удовольствие.
А автор вообще большой умница.
Каждый пост — это кладезь информации для рукодельника.
P.S. В EasyEDA проектируете?
Я прочел на одном дыхании вашу статью на хабре, LabView: былое и думы.
Это прекрасно. Я так и подозревал что вы сверхчеловек, мегамозг или рептилоид.
Скажите, а какого цвета закат на вашей планете?
В KiCAD не заглядывал много лет и не знал, что он стал вполне применимым. Последние N лет использовал DipTrace, но в связи с известными событиями он как-то «под вопросом»…
В общем, спасибо за наводку!.. И за на пиво… ;)
Пишет вроде бы просто, но текст чуть ли не в песню складывается.
Надеюсь автор не оскорбится, я бы сравнил его творчество, с творчеством А. Покровский «Расстрелять».
Читается на одном духу!
На али есть дешевые ценники с готовым софтом которые настраиваются со смартфона или их станции. Cмысла чет писать нет.
В мвидео есть EPaper ценники но там ничего писать не надо ибо есть готовые либы под ардуину для таких экранов.
Для меня, кончено, это немного «оверскилс». Хотя, может быть и просто — не было сильной нужды и практического интереса. Воспроизвести смогу, а продумать — вряд-ли.
Но, очень всё интересно вашего авторства читать. :)