Обзор STC15W201S и подключение его к GSM-модулю M590E

bodyВ этой статье рассказывается об использовании популярного модуля из Китая M590E и стыковка его со сверхдешёвым китайским чипом STC15W201S (20 центов/шт). Также постараюсь сделать обзор этих несправедливо забытых у нас чипов, а также об их программировании.

С чего всё началось.
Проблема отключения электроэнергии в технических помещениях жилых домов создаёт ряд неприятностей как для абонента, так и для оператора. Отключения вызываются разными причинами и устраняются в различные сроки, но из моей практики отсутствие света бывает доходит до 5-6 часов. Мы приняли решение, что хорошо бы иметь оптический приёмник с ёмким аккумулятором. Выбор пал на OD-002, потому как питание +5 В (потребление около 0.7A) и, используя с литий-ионным powerbank-ом , он может проработать много часов (с полностью заряженным Xiaomi Mi Power 2С 20000mAh приёмник OD-002 работает 16 часов). Но тут возник вопрос. Хорошо бы было мониторить состояние данного резервного хозяйства и при возобновлении электропитания приехать снять его.

Модули M590E я приобретал для проекта SMS-рассылки ещё лет 5 назад. Они неплохо зарекомендовали себя как недорогие девайсы, с помощью которых можно использовать сеть мобильного оператора под свои корыстные нужды (GPRS, SMS). Отличаются от M590 тем, что голосовые функции в E-версии изъяты. Из информации в инете, покупая их на али практически всегда модули будут паяными. У меня так тоже было. Из двух партий по 5 штук — только 1-2 штуки в партии работают с заявленными в паспорте характеристиками. Предположу, что они бывшие в употреблении, разборка (выпаивание) производится не совсем аккуратно, из-за чего отпаиваются не только модули, но и smd-компоненты на них. Некоторые дико греются (ток потребления около 450 мА в режиме ожидания), некоторые через раз коннектятся с сетью. Наверное, если совсем жаба, то проверяйте сразу после получения и в случае чего открывайте спор.

Не очень приятная история, но эти модули облюбовали ардуинщики. И найти что-то альтернативное нереально, а ведь порт UART имеется не только у атмег. Достаточно интересные чипы начали производить в молодой китайской компании STC MCU Limited. Хотелось бы подробнее описать процесс работы с ними, потому что информации в русском интернете крайне мало.

Производимая линейка у STC MCU Ltd. обширна, но сегодня речь про STC15. Чипы данной серии построены по гарвардской архитектуре 8051. Отличаются высокой скоростью, стабильностью, работой в широком диапазоне температур (-40°…+85°), диапазоном питающего напряжения +2.5…+5.5 В, высокой помехозащищённостью, возможностью работы без внешнего кварцевого резонатора (высокостабильный встроенный тактовый генератор 5.5296MHz /
11.0592 МГц / 22.1184 МГц / 33.1776 МГц). Рабочая частота до 35 МГц. Более того, процессоры STC15 работают на 20% быстрее, чем их ранние собратья STC10/11/12 при одной и той же тактовой частоте, — из-за наличия более скоростного ядра STC-Y5. Судя по мануалу, — это эквивалентно, как если бы обычный чип 8051 работал до 420 МГц!

Из таблицы видно, что цена не сильно варьируется в рамках всей серии, отличие только в распределении flash-памяти среди программной и eeprom областями. Ну и понятное дело, полное отсутствие подделок со стороны китайских коллег))

Низкое энергопотребление — 5…10 мА в зависимости от программы. Порты МК могут работать в 4-ёх режимах:
1) стандартные для 8051 квазидвунаправленные (M1 = 0; M0 = 0)
2) двухтактный выход (M1 = 0; M0 = 1)
3) только на вход (M1 = 1; M0 = 0)
4) выход с открытым стоком (M1 = 1; M0 = 1).

// EXAMPLE...
sfr P3M1 = 0xB1; // стр.293 талмуда
sfr P3M0 = 0xB2;

P3M1 = #00000001B;
P3M0 = #00000011B;

// порт P3.0 - на выход с открытым стоком
// порт P3.1 - на двухтактный выход
// остальные порты квазидвунаправленные.

В случае, если порт работает как выход, то нагрузка на него не должна превышать 20 мА (необходимо ставить ограничивающее сопротивление). Однако производитель не рекомендует нагружать порты так, чтобы общий ток потребления через контроллер превышал 90 мА. К слову, компания гарантирует качество своей продукции и на выпуске все чипы тестируют в течении 8 часов при температуре +175 °С.

С точки зрения безопасности кода, тут китайцы тоже преуспели, воспользовавшись своим же опытом) Во-первых, чтение кода наружу невозможно в принципе. Во-вторых, контроллер поддерживает заливку закриптованного кода (protect code), который генерирует тулза STC-ISP (о ней ниже) на базе HEX-файла и вашего ключа криптования.

Ещё одна немаловажная деталь для разработчика — поддержка внутрисхемного программирования этих микросхем (ISP / IAP). Это значит, что впаяв в схему свой чип, для обновления прошивки не надо его выпаивать или доставать каждый раз из кроватки (как в случае с PIC-ами). Но, данная фишка накладывает некоторую особенность при включении. Дело в том, что при подаче питания или сигнале RESET на соответствующей ноге, сначала загружается т.н. bootloader, который в течение 300 мсек ожидает загрузки прошивки извне. В своё время при задумке использовать данные чипы для смарткарт tvcas данная особенность дала разворот-поворот идее, т.к. работа смарткарт подразумевает ответ на сброс (сигнал ATR) не позднее, чем 10-15 мсек после включения (или сброса). Переписывался с заводом, сказали, что отключить бутлоадер невозможно.

Контроллеры STC15 выпускают в корпусах SOP-8, SOP-16, DIP-16. Также на али есть модули как на рисунке ниже…

Микросхемы с завода идут с предустановленной прошивкой. Я сильно вопрос не изучал, может у неё есть какое-то практическое применение, но на модуле это выглядит как мигание светодиода на порту P3.3. Временные диаграммы на ногах такие…

О назначении выводов. Интерес здесь представляют выводы UART, которые можно переключать с помощью установки битов S1_S0 с портов P3.0/P3.1 на P3.6/P3.7 (у SOP-8 отсутствуют). В мануале написано, что рекомендательно использовать второй вариант. Вероятно из-за того, что P3.0/P3.1 зарезервированы под перепрограммирование.

Скачать мануал можно здесь. Даташит на всё семейство, работу с периферией, примеры на asm и си здесь. Огромное количество примеров на си в архиве (правда с китайскими комментами) Examples_STC15W20xS.

На чём писать код и компилировать HEX
На ютубе есть видео как установить среду программирования Keil uVision IDE (у меня версия 5.27). Как мне кажется она наиболее подходит для этого. Тем более её рекомендует производитель. Один момент, таблетка которая часто лежит в архиве молниеносно удаляется защитником windows. Поэтому лучше этот архив скачать куда-нить на VirtualBox, распаковать и сгенерированные ключи уже перенести на основную систему. Без ключа в Keil-е ограничение кода программы в 2 кбайт. Стоимость легальной версии начинается с килодолларов. Хотя для нашего проекта M590E+STC15W201S, который будет только отправлять AT-команды мы уложимся в 300 байт кода.

После успешной установки необходимо добавить в базу данных Keil-а процессоры STC. Для этого нам понадобится всё та же тулзина STC-ISP. Запускаем её, ищём вкладку Keil ICE Settings, нажимаем Add MCU to Keil, выбираем директорию Keil-а.

По умолчанию, Keil не генерирует при компиляции HEX-файл. Поэтому когда откроете данный проект, то не забудьте проверить установлен ли чекбокс (Flash -> Configure Flash tools.. -> Output).

Прошиваем STC15W201S
На мой взгляд схема подключения программатора в мануале усложнена. В цепях там установлены сопротивление 300 ом и диод. Я использую переходник на FT232RL и никогда эти элементы не устанавливал. Всё прошивается исправно.

Сам процесс прошивки такой. Открываем STC-ISP, выбираем файл HEX, либо из своей директории /m590e_stc/Objects/main.hex , либо скачанный готовый отсюда. Меняем телефонный номер на свой (если не меняли в исходнике). Нажимаем Program, затем на клавишу «PROG» схемы. Спустя пару секунд, программа должна сообщить о результате выполнения прошивки (успешно или нет).

Как работает моя сигнализация
Фото подключения прошитого контроллера к модулю M590E представлена ниже. Не забудьте, что пин BOOT модуля M590E должен быть заземлён.

Для надёжности конструкции, компоненты я залил эпоксидным клеем.
Принцип работы таков. Как только на проводе +5В «звоним», появляется питание (в моей ситуации электроснабжение возобновилось), через 30 секунд контроллер STC отправляет по UART:
ATD +79057770000;\r\n
что даёт модулю команду звонка на телефонный номер. Как правило, соединение устанавливается в течение 5-10 секунд. Спустя 15 секунд, т.е. условно через 5 секунд после установления связи, отправляется команда:
ATH\r\n
что значит «разорвать соединение».
Таким образом, по сути, осуществляется кратковременный вызов без оплаты (т.н.»глухарь», «сопля», «бомж»), который сигнализирует другой стороне, что питание на объекте возобновилось. В течение часа, каждые 10 минут эти вызовы будут повторяться (если нужен другой режим, редактируем файл проекта под свою задачу).

Схема контроля работает также и в обратную сторону. Если позвонить на номер сим-карты, установленной в модуле M590E, и соединение будет успешным (будут гудки), значит аккумулятор ещё не сел и оптоприёмник работает.

Вот такая конструкция выходного дня на самоизоляции)))

Запись опубликована в рубрике C++, Программирование, Радиолюбитель с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий