Данный сайт является зеркалом сайта www.count-zero.ru

Режимы энергосбережения микроконтроллеров STM8Lх51: Low Power Run Mode и Low Power Wait Mode

разделы: STM8, дата: 06 ноября 2022г.

Данная статья посвящена ультраэкономичным режимам энергосбережения микроконтроллеров STM8L: "Low Power Run Mode" и "Low Power Wait Mode". Данные режимы характерны тем, что в них отключатся флеш-память, а весь код выполняется из оперативной памяти. Также отключается главный регулятор напряжения MVR, а тактирование осуществлется от низкочастотного генератора на 38 кГц или от часового кварца. За счет этого удается добится кардинального снижения энергопотребления микроконтроллера до 3-5 мкА.

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

В качестве примера для данных режимов энергосбережения я бы хотел рассмотреть создание часов на батарейном питании. Пусть будет две пальчиковые батареи с ресурсом работы в один год. В качестве индикатора будет использоваться шести-разрядный жидко-кристаллический индикатор (ЖКИ) на контроллере HT1621. Данный индикатор недорогой (около 200р), и он свободно продается на али.

На первый взгляд задача может показаться примитивной, но с учетом необходимости работы в режиме пониженного энергопотребления все становится не так просто. Отключая флеш-память, вы остаетесь без прерываний вообще, т.к. в stm8 таблица прерываний не может менять местоположение, она всегда располагается на флеш-памяти. В качестве альтернативы прерываниям существует механизм Event'ов, которого нет в S-линейке микроконтроллеров STM8. Кроме того, требуется рабочий цикл программы вместе с используемыми подпрограммами и функциями размещать в оперативной памяти, размер которой в микроконтроллере STM8L051F3 равен всего одному килобайту. А кроме кода программы, там еще располагаются глобальные переменные и стек. И вот так с ходу написать такой проект мало у кого получится, прежде придется порядочно посидеть над Reference Manual. А в проекте, еще используются недокументированные функции.

    В целом, статья делится условно на три части:
  1. Часть посвященна ЖКИ индикатору
  2. Часть посвященная режимам энергосбережения STM8L: "Low Power Run Mode" и "Low Power Wait Mode"
  3. Часть посвященная программированию часов
    Требуемая аппаратура:
  1. Для часов нам понадобится: а) ЖКИ индикатор, б) микроконтроллер STM8L051F3P6, в) энкодер с кнопкой, г) две батарейки АА или ААА с держателем, д) макетка.
  2. Т.к. микроконтроллер STM8L051F3P6 можно прошить не более чем 100 раз, для разработки нам понадобится микроконтроллер STM8L151xx или STM8L152xx. Сгодится так же STM8L-DISCOVERY. Ещё потребуется ST-Link и компьютер. Для оценки энергопотребления я буду пользоваться платой MSP430FR2433 с инструментом EnergyTrace, вы же можете пользоваться обычным мультиметром.

Из софта нам понадобится компилятор Cosmic и среда разработки STVD, т.к. у SDCC нет инструментов загрузки кода в оперативную память и компиляции кода без абсолютных адресов, т.е. строго с относительной адресацией.

Полезные материалы:

  1. Статья по компилятору Cosmic: "STM8S105 + COSMIC: Запись в EEPROM и FLASH память микроконтроллера"
  2. Даташит на HT1621: "https://www.radiokot.ru/artfiles/6611/01.pdf"
  3. Reference Manual STM8L: "RM0031"
  4. Даташит на микроконтроллер STM8L051F3: "https://www.st.com/resource/en/datasheet/stm8l051f3.pdf"
  5. Даташит на микроконтроллер STM8L151xx: "https://www.st.com/resource/en/datasheet/stm8l151c8.pdf"
  6. Топик на easyelectronics.ru: "STM8L encoder mode"

Содержание:

I. ЖК дисплей на контроллере HT1621

  1. Обзор ЖКИ на HT1621
  2. Пишем драйвер дисплея HT1621 для STM8S103F3

II. Работа с микроконтроллером STM8L151C8 в среде STVD+Cosmic

  1. Структура базового проекта с мигающим светодиодом
  2. Использование Wait режима энергосбережения
  3. Подключение дисплея HT1621 к микроконтроллеру STM8L151C8 и оценка энергопотребления
  4. Добавляем энкодер на таймере TIM2
  5. Программа часов

III. Энергосберегающие режимы "Low Power Run Mode" и "Low Power Wait Mode"

  1. Механизм Event'ов и режим энергосбережения флеш-памяти IDDQ
  2. Переходим в режим Low Power Wait Mode с тактированием от LSI
  3. Переключение на тактирование от LSE
  4. Часы на микроконтроллере STM8L151C8
  5. Адаптация кода на микроконтроллер STM8L051F3
  6. Вместо заключения
На портал GitLab я выложил workspace для STVD со всеми примерами: https://gitlab.com/flank1er/stm8l_ht1621_clock
Так же репозиторий включает драйвер дисплея ht1621 для stm8s103f3 написаный на SDCC

Читать дальше

STM32F103C8 без HAL и SPL: Работа с SPI дисплеями Nokia_5110 и ST7735

разделы: PCD8544, STM32, дата: 27 сентября 2022г.

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

Кроме того, работа с дисплеями довольно обширная тема, которая затрагивает множество смежных вопросов, и это на мой взгляд отличный повод, чтобы эти вопросы разобрать. Поэтому статья не посвящена целиком дисплеям, как можно было бы подумать на первый взгляд, на самом деле она посвящена работе с микроконтроллерами stm32f1хх.

Итак, в этой статье, в качестве целевого микроконтроллера я буду использовать stm32f103c8 в виду его широкой распространенности. Полагаю, что bluepill имеется у всех.

В качестве дисплея я буду использовать т.н. Nokia 5110 дисплей на контроллере PCD8544. И хотя я уже писал очень длинную статью по работе с ним на ATmega8, с тех пор я многое переосмыслил. Главное же конечно то, что дисплей все еще продается на али, он доступный в плане цены, и скорее всего, он уже имеется у всех, кто читает эти строки. Впоследствии, алгоритмы написанные для Nokia 5110 мы будем переносить на другие дисплеи.

И чтобы статья совсем не казалось скучной, в завершении рассмотрим работу c цветным дисплеем на контроллере ST7735 с разрешением 128 на 160 пикселей и диагональю 1.8 дюйма (4.5 сантиметра). Будем пытаться добится от него работы на 90 fps (я серьёзно).

Из дополнительной периферии рассмотрим работу с энкодерам на таймерах STM32. Они часто применяются для управления различными меню на дисплеях, так что уметь с ними работать также важно как и с самими дисплеями.

Содержание:

I. Часть первая, вводная

  1. Базовый проект на CMSIS для stm32f103c8
  2. Добавляем управление через UART
  3. Подключение энкодера (таймер TIM2)
  4. Подключение энкодера (таймер TIM4)

II. Часть вторая, дисплей Nokia 5110

  1. Подключение дисплея Nokia 5110
  2. Работа с текстом
  3. Интерфейс FM-приемника
  4. Меню со скролом
  5. Бегущая строка

III. Часть третья, дисплей ST7735

  1. Пара слов про дисплей ST7735
  2. Инициализация дисплея ST7735
  3. Функция заливки
  4. Выжимаем 90 fps из дисплея ST7735
  5. Вместо заключения: баги и все такое

Бонус. IPS дисплеи ST7789 320х240 и 240х240 (добавленно позже)

  1. Обзор IPS дисплеев на контроллере ST7789
  2. Проверка дисплеев на контроллере ST7789 в Arduino
  3. Исправление функций модуля "st7735.c" для совместимости с контроллером ST7789
  4. Инициализация дисплея ST7789
    Содержание цикла STM32F103C8 без HAL и SPL
  1. Система тактирования RCC, таймер SysTick, UART передатчик, планировщик задач, SPI и I2C модули в режиме мастера
  2. Работа с SPI дисплеями Nokia_5110 и ST7735

Все примеры с скомпилированными прошивками можно скачать с портала GitLab по ссылке: https://gitlab.com/flank1er/stm32_bare_metal

Читать дальше

Сага об отладчиках

разделы: Программаторы, STM32, дата: 07 августа 2022г.

Недавно у меня сгорел мой единственный ST-Link v2 с оригинальным STM32, который верой и правдой прослужил мне семь лет. Выкидывать его у меня не поднялась рука, и я что называется "приобрел практический опыт" восстанавливая его работу. Данная проблема заставила меня провести личное исследование о доступных альтернативах отладчику ST-Link V2, и результаты этого мини исследования легли в основу данной статьи.

Вторым мотивом которым я руководствовался, была ситуация сложившаяся на рынке микроконтроллеров. Полагаю, что все уже понимают, что микроконтроллеры STM32 скорее всего уже не будут доступны никогда, и нужно искать альтернативы. В виду этого теряется ценность брендированных отладчиков таких как ST-LinkV2, которые могут работать только с микроконтроллерами STM, и соответственно вопрос опять упирается в поиск альтернатив.

В своих проблемах и поисках я не был одинок, поэтому ниже привожу список материалов, на которые я опирался.

Содержание:

  1. Реанимация ST-Link V2
  2. Отладчик CMSIS-DAP (или DAP-Link)
  3. PyOCD - аналог OpenOCD и st-flash для отладчика CMSIS-DAP
  4. Перепрошивка STLinkV2 в JLink_OB
  5. JLink_V8 (клон)
  6. ESP-STLINK
  7. Прошивка и отладка китайского ARM микроконтроллера AT32F403RC (добавлено позже)

Для работы я использовал Slackware Linux и виртуальную машину с Windows. Если вы пользуетесь Windows, то вам соответствено понадобится виртуальная машина с Linux.

Читать дальше

Использование Qbs для работы с STM8/SDCC в QtСreator (обновлено)

разделы: среда разработки, STM8, дата: 29 июля 2022, обновлено 1 сентябряг.

Спустя долгое время, я решил узнать как обстоят дела с поддержкой STM8 в SDCC. Последней версией SDCC которой я пользовался был 3.6. За это время OpenOCD официально обзавелся поддержкой STM8. И т.к. в Linux я пользуюсь преимущественно IDE QtCreator, был соблазн перетащить туда проекты на STM8. Главная сложность возникла с системой управления сборки. QtCreator умеет работать только с qmake, qbs и cmake проектами. Qmake не поддерживает sdcc никоим образом. У CMake поддержка заявлена, но она чисто декларативная. Таким образом нам остается только Qbs.

Ранее для STM8 я пользовался STVD+Cosmic, но это требовало работы из виртуальной машины. STVD - отличная среда разработки, но в визуальном плане она устарела уже давно. Отсутствие темной темы и линтера конечно не принципиально, но без этого уже не комфортно работать. Кроме того Cosmic для проверки лицензии постоянно стучится в интернет. Я же предпочитаю отключать интернет в виртуалке.

Ок, но какие сложности нас ожидают?

  • Во-первых, придется порядком повозиться с этим с этим Qbs. Система плохо документированная и малоиспользуемая.
  • Во-вторых, отладка в QtCreator не такая комфортная как в STVD. Нет периферийных регистров, а ассемблерный код не сопровождается отладочной информацией. Что бы поставить, например, точку остановки на ассемблерное прерывание, сначала нужно узнать его адрес, и затем ставить break на физический адрес.
  • Ни и конечно приходится постоянно бороться с SDCC. Современный SDCC/STM8, в принципе, не так уж плох, но за ним приходиться постоянно следить, а проблемные участки кода переписывать в виде ассемблерных функций.

Итак, софт который нам понадобится для программирования микроконтроллеров STM8:

  1. stm8-binutils - Комплект утилит, который включает в себя: отладчик stm8-gdb, stm8-size, stm8-objdump и пр.
  2. OpenOCD - версии 0.11. Начиная с этой версии появилась поддержка SWIM протокола и чипов STM8
  3. QtCreator. Я использую версию 5.0.3 из SBo
  4. Qbs. Моя версия 1.16.0 так же из SBo. Она не самая свежая, но работает без вопросов.
  5. Для линтера в QtCreator потребуется плагин qt-creator-llvm и cppcheck.

Из аппаратного обеспечения нам достаточно будет платы c чипом STM8S103F3 и ST-Link V2 с поддержкой SWIM протокола.

Руководств и мануалов по использованию Qbs в baremetal-проектах почти нет. Есть несколько примеров для STM32, но так как там используется GCC, скрипт проекта будет отличаться от такового для SDCC.

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

Содержание:

I. Консольный Qbs проект для STM8+SDCC

  1. Знакомимся с Blink из примеров QBS
  2. Отладка прошивки
  3. Сборка прошивки в ELF-формат
  4. Раздельные профили компиляции "debug" и "release"
  5. Добавляем ассемблерный файл в проект

II. Работа с проектом в Qt Creator

  1. Настраиваем STM8 baremetal kit в QtCreator
  2. Качество кода SDCC

III. Бонус

  1. Qbs-скрипт для STM32F103C8-проекта на CMSIS (пошаговая инструкция)

IV. Добавленно позже

  1. Проблема с запуском OpenOCD для STM8

Читать дальше

Плата STM32F411CE BlackPill + MicroPython. Быстрый старт

разделы: STM32, дата: 24 июля 2020г.

Данная статья появилась случайно. Изначально я собирался написать что-то на тему программирования ARM Cortex®-M4 на связке ассемблера и Си. У меня уже давно валялись парочка плат с микроконтроллерами STM32F411CE и STMF407ZET6 и я уже было предвкушал, как вскоре запущу отладчик, но когда начал изучать и по ходу дела тут же описывать плату WeACT STM32F411CE, то сначала я наткнулся на DFU загрузчик, потом я изучал программу STM32CubeProgrammer, ну и в довершении, я обнаружил, что для платы существует прошивка MicroPython. Я не отбросил прошивку сразу в сторону, прежде всего мне хотелось составить свое мнение о микропитоне, и в конечном итоге я решил посвятить статью полностью этой теме.

Статья не претендует на всеобъемлющее руководство, это скорее краткий мануал для беглого ознакомления с системой MicroPython и навыками работы с платой WeACT STM32F411CE. Я не берусь сказать, будет ли у статьи продолжение. Микропитон мне понравился, но я считаю, что для того чтобы работать с ним серьезно, нужно освоить процесс добавления своих нативных модулей в прошивку. Т.е. драйвер дисплея лучше писать все-таки не на микропитоне, а на Си или ассемблере. В то время как основную логику программы можно писать и на MicroPython.

Полезная документация по теме статьи:

  1. STM32F411xC/E Reference Manual (RM0383)
  2. User Manual "STM32CubeProgrammer software description" (UM2237)
  3. Аккаунт компании WeACT на github'e с документацией на плату MiniF4-STM32F4x1
  4. Документация по MicroPython

Содержание:

I. Обзор платы STM32F411CE (Black Pill V2.0)

  1. Плата WeACT с чипом STM32F411CEU6 ака "Black Pill V2.0"
  2. Использование флешера STM32CubeProgrammer
  3. Прошивка MicroPython
  4. Загрузка программы Blink.py для микропитона, и основы работы с REPL
  5. Установка SPI флешки на плату WeACT STM32F411CEU6
  6. Сборка микропитона из исходников

II. Основы работы c MicroPython

  1. Работа с MicroPython в интерактивной системе REPL
  2. Использование редакторов VS Code и Atom в качестве IDE для MicroPython

Читать дальше

STM8 + ASSEMBLER: Драйвер FM-приемника RDA5807m для микроконтроллера STM8S103F3 (обновлено 14 августа)

разделы: STM8, RDA5807M, дата: 29 декабря 2019г.

В статье пошагово описывается процесс написания драйвера для FM-приемника RDA5807m, где в качестве микроконтроллера используется STM8S103F3, а в качестве языка программирования - ассемблер со средой программирования STVD.

Структурно статью можно разделить три части. С одной стороны это статья об ассемблере STM8, в частности здесь имеются замечания об использовании косвенной адресации и использования указателя стека в качестве индексного регистра. Собственно, вся статья построена на ассемблерном коде STM8. С другой стороны, рассматривается периферия STM8, в частности в статье описывается создание UART приёмо-передатчика для микроконтроллера STM8. Это может быть использовано для управления коммуникационными модулями с UART интерфейсом, навроде: esp8266, esp32, rda5981 и пр. С третьей стороны, в статье главной темой является RDA5807m. Здесь ему, правда, уделяется всего одна глава, т.к. сам по себе чип несложный.

Совершенно другое дело - система передачи данных RDS (Radio Data System). Я смог добиться лишь декодирования RDS - текста. Это восемь символов латиницей, через которые передается название станции. К сожалению, я не смог найти станцию которая бы передавала текущее время, но я все-равно планирую рассказать об этой возможности во второй статье (устарело, сейчас чтение RDS уже реализовано).

Данная статья является первой частью, в ней рассматривается лишь минимальный драйвер RDA5807m, который годится лишь для проверки модуля. Полноценный драйвер я планирую описать во второй статье, кроме того, там должно быть много материала по RDS. Это будут выдержки из стандарта: "EN50067. Specification of the radio data system (RDS) for VHF/FM sound broadcasting in the frequency range from 87,5 to 108,0 MHz. April 1998. с описанием формата, а также логи принятых данных.

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

Полезные материалы по теме статьи:

  1. Статья: "STM8S + SDCC: Программирование БЕЗ SPL. Интерфейсы: UART в режиме передатчика, АЦП в режиме однократного замера, I2C в режиме мастера на примере DS1307/DS3231"
  2. Статья: "STM8 + STVD + ASSEMBLER: Быстрый старт"
  3. Обзорная статья по RDA5807m: "Arduino: FM-радиомодуль на микросхеме RDA5807m"

Содержание:

I. Реализация командного интерфейса посредством UART

  1. Схема подключения
  2. Базовый проект, реализация программы эхо/echo для UART интерфейса
  3. Использование косвенной адресации
  4. Отладка прерывания
  5. Реализация командного интерфейса

II. Минимальный драйвер RDA5807m

  1. Минимальный драйвер для управления FM-приемником RDA5807m
  2. Чтение частоты станции и переключение тюнера на заданную частоту

III. Драйвер с переключением диапазонов и интервалов частот

  1. Вводная часть
  2. Порядок работы с драйвером
  3. Использование ОЗУ драйвером
  4. Длинные переходы и реализация оператора case на ассемблере STM8
  5. Реализация переключения диапазонов и интервалов
  6. Функции шумоподавления

IV. Прием RDS данных (добавлено 25 июня 2020г.)

  1. Работа над ошибками (борьба с аппаратным багом программными средствами)
  2. Что такое RDS и как его читать с помощью RDA5807m
  3. Преобразование даты из MJD формата в дни, года и месяцы
  4. Математическая библиотека для 32/24 битных операций. Операции сложения, вычитания и умножения
  5. Математическая библиотека для 32/24 битных операций. Операция деления
  6. Подпрограмма преобразования даты
  7. Реализация чтения RDS сообщений

V. Подключение энкодера и дисплея к драйверу

  1. Рефакторинг кода драйвера (добавлено 13 июля 2020г.)
  2. Автопоиск (добавлено 14 августа 2020г.)

Посмотреть исходники, или скачать скомпилированные прошивки можно с портала GitLab по следующей ссылке: https://gitlab.com/flank1er/stm8_rda5807m.

Читать дальше

Настройка: Eclipse, SW4STM32, STM32CubeIDE и Qt Creator, для отладки проекта на STM32F103C8 (BluePill)

разделы: STM32, среда разработки, дата: 16 ноября 2019г.

Данную статью по содержанию можно разделить на две или три части. С одной стороны я хотел рассказать в ней о конфигурации ряда IDE основанных на кодовой базе Eclipse, т.к. когда я впервые настраивал подключение отладчика к Eclipse и SW4STM32, мне не показался этот процесс простым и "интуитивно понятным".

Вторая часть статьи в каком-то роде продолжает прошлогоднюю статью по STM32, Т.к. в качестве демонстрационного примера берётся проект из той статьи. Однако, одним заимствованием ограничиться не получилось, и для развития идеи, я описал недостатки данного проекта, и предложил более совершенный вариант Makefile'а.

Получившийся Makefile дал возможность перенести проект на систему сборки CMake. Это в свою очередь дало возможность продемонстрировать использование Qt Creator для программирования и отладки микроконтроллеров STM32.

В техническом плане, проект используемый в качестве примера, очень простой. Это обычный Blink, состоящий из Си-кода и ассемблере ARM. Из ресурсов микроконтроллера используется лишь порт ввода-вывода GPIO_C и системный таймер SysTick. В проекте не затрагиваются DMA, USB, FSMC и прочие интерфейсы. Также в стороне осталась библиотека newlib, поддержка языка программирования C++, и работа с проектами STM32CubeMX. Т.е. несмотря на доработку проекта в статье, он все ещё годится лишь для несложных задач, и более соответствует уровню микроконтроллеров с архитектурой Cortex-M0/M0+.

Используемые в статье Hardware и Software. В качестве операционной системы использовалась Slackware GNU/Linux (русские физики рекомендуют), в качестве целевого микроконтроллера - STM32F103C8T6 (Blue Pill). В качестве программатора и отладчика использовался китайский клон: "ST-Link v2", а также JTAG отладчик на чипе FT232H. Из софта, в качестве gdb сервера в статье используется: "OpenOCD", а в качестве флешера: "st-flash". Используемый туллчейн arm-none-eabi-gcc имеет версию - 8.3.1, релиз от 20190703. Версия CMake - 3.15.5. Qt Creator используемый при написании статьи был версий 4.9.2 и 4.10.2.

Должен предупредить, что свой ST-Linkv2 я покупал достаточно давно, и он на чипе STM32. Сейчас на али продаются программаторы ST-Linkv2 на чипе CKS32F103C8T6, и с ними могут быть нюансы.

Полезные материалы по теме статьи:

Содержание:

I. Отладка в Eclipse, SW4STM32 и STM32CubeIDE:

  1. Общая настройка
  2. Создание базового проекта
  3. Настройка параметров отладки (Debug)
  4. Настройка конфигурации Release
  5. Управление проектом в Eclipse
  6. Настройка SW4STM32
  7. Настройка STM32CubeIDE

II. "Допиливание" Makefile и создание на его основе CMake проекта:

  1. Использование Eclipse совместно со своим Makefile
  2. Ограничения используемого Makefile
  3. Устранение ограничений используемого Makefile
  4. Использование динамической памяти
  5. Eclipse + CMake

III. Использование Qt Creator для программирования и отладки микроконтроллеров STM32:

  1. Qt Creator + CMake + STM32

Читать дальше

ESP-OPEN-SDK: работа с WiFi соединением в режиме клиента (station mode)

разделы: Интернет вещей, дата: 19 мая 2019г.

В данной статье я хочу рассмотреть наиболее простые примеры для работы с сетью средствами SDK. При работе с сетью, SDK использует неблокирующее программирование. В связи с этим, программирование сводиться к написанию коллбек-функций, которые будут вызываться из SDK при наступлении того или иного события. Это затрудняет чтение и разбор алгоритма программы, поэтому в статье я всега стараюсь говорить, что за чем следует.

Статья по структуре будет напоминать предыдущую: "ESP8266: подключение, прошивка и работа с AT-командами", за тем исключением, что в этот раз все будет делаться с помощью программирования через ESP8266-NONOS-SDK.

Конфигурация WiFi сети будет, опять же, состоять из двух компонентов: а) точки доступа на роутере с прошивкой OpenWRT; б) и собственно ESP8266 выступающего в роли клиента. На стороне роутера запущен web-сервер для обслуживания ESP8266. Для передачи и получения данных от роутера, ESP8266 будет использовать GET - запросы.

В качестве "транспорта" для работы с TCP/IP я буду использовать штатный интерфейс espconn, который описан в ESP8266 Non-OS SDK API Reference.

Для захвата и анализа трафика между ESP8266 и точкой доступа на OpenWRT, я буду использовать программы tcpdump и Wireshark. Все примеры статьи используют SDK версии 2.1.0.

    Список используемой документации:
  1. ESP8266EX Resources | Espressif Systems Страница с доступными ресурсами по ESP8266 на сайте производителя.
  2. ESP8266 Non-OS SDK API Reference ESP8266 Non-OS SDK API Reference версия 2.2
  3. ESP8266 Low Power Solutions
  4. Статья Михаила Григорьева на хабре: Работа с ESP8266: Собираем компилятор и пишем первую прошивку
  5. Книга Kolban's Book on ESP8266
  6. Если вы как и я НЕ учились по специальности "компьютерные сети", то вам скорее всего понадобиться какой-нибудь мануал с описанием разных сетевых протоколов. Я лично использую "В. Олифер, Н. Олифер «Компьютерные сети. Принципы, технологии, протоколы.", часть IV: Сети TCP/IP. Это недорогой понятный учебник без лишней воды.

Содержание:

  1. Создание базового проекта
  2. Установка WiFi соединения в режиме клиента
  3. Работа с TCP соединением используя espconn
  4. Использование режима энергосбережения "deep sleep"
  5. Реализация команды ping
  6. Получение даты и времени из сети по протоколу SNTP

Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала GITLAB https://gitlab.com/flank1er/esp8266_sdk_examples

Читать дальше

Введение в ESP-OPEN-SDK

разделы: Интернет вещей, дата: 14 марта 2019г.

Как я уже говорил, ESP8266 можно программировать двумя способами: либо через Arduino IDE, либо через тулчейн esp-open-sdk. Первый вариант я уже рассматривал на примере разработки температурного логера, в этот раз я хочу рассказать о работе с esp-open-sdk.

Тулчейн позволяет программировать на SDK функциях, которые поставляются в закрытых скомпилированных библиотеках называемых SDK. Имеется две версии SDK: RTOS SDK и NONOS SDK. Я буду рассматривать вариант без RTOS, при необходимости, "прикрутить" простенький диспечер задач будет несложно.

Non-OS SDK - это библиотека предоставляющая программный интерфейс приложения(API) для ESP8266 и включающая стек функций для приема и передачи через WiFi-соединение, доступа к аппаратным ресурсам и базовые функции контроля и управления модулем. Данное API позволяет программировать на более высоком уровне не вдаваясь в особенности архитектуры ESP8266.

SDK может быть интересен для опытных embedded - программистов, которых, возможно, тяготит использование Arduino IDE и Wiring, и которые не боятся остаться один на один с Си. Взамен вы получите: избавление от прослойки Arduino/Wiring, возможность использования вашей любимой системы управления проектом, возможность использования стороннего IDE для написания кода, а также возможность отладки через JTAG. Что вы теряете? Возможность использования Arduino библиотек.

Однако, если вы используете фреймворк Arduino, то для вас не доложно быть секретом, что сам он написан на функциях SDK. Т.о. изучение SDK существенно расширит ваши возможности при написании своих библиотек, да и собственно само программирование ESP8266, т.к. функции SDK доступны из Arduino.

Далее речь пойдёт исключительно о тулчейне "esp-open-sdk". В качестве целевой платы я буду использовать плату NodeMCU ESP8266, т.к. там есть автозагрузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F.

    Список используемой документации:
  1. ESP8266EX Resources | Espressif Systems Страница с доступными ресурсами по ESP8266 на сайте производителя.
  2. ESP8266 Non-OS SDK API Reference ESP8266 Non-OS SDK API Reference версия 2.2
  3. ESP8266 SDK Getting Started Guide - руководство по работе со официальным SDK
  4. ESP8266 Technical Reference
  5. Xtensa Instruction Set Architecture (ISA)
  6. Статья на хабре: "Reverse Engineering ESP8266 — часть 1"
  7. Статья на хабре: "Reverse Engineering ESP8266 — часть 2"
  8. Статья Михаила Григорьева на хабре: Работа с ESP8266: Собираем компилятор и пишем первую прошивку

Содержание:

  1. Сборка esp-open-sdk
  2. Создание базового проекта
  3. Описание API для работы с GPIO
  4. Краткое описание ассемблера Xtensa
  5. Подключение JTAG отладчика на FT232H чипе
  6. Работа с GPIO16 через NonOS-SDK, подключение библиотеки "Driver_Lib"
  7. Вывод через UART

Посмотреть исходники, сборочные файлы, скачать скомпилированные прошивки, можно с портала GITLAB https://gitlab.com/flank1er/esp8266_sdk_examples

Читать дальше

LinkIt 7688 Smart Duo: одноплатный микрокомпюьтер на OpenWRT содержащий микроконтроллер ATmega32U4

разделы: Интернет вещей, дата: 22 декабря 2018г.

Я уже пару статей подряд вскользь упоминаю OpenWRT, и возможно кого-то заинтересовало, что это за система. OpenWRT - это набор прошивок для самых разных устройств, но в основном для роутеров. Базируется на BusyBox и ядре Linux. Где-то с версии 17.01 прошивки стали именоваться LEDE, т.к. произошло слияние проектов OpenWRT и LEDE.

К сожалению, чтобы в первый раз поставить на какое-либо фирменное устройство прошивку OpenWRT, скорее всего вам придётся изрядно "поплясать с бубном" (сужу по собственному опыту). В худшем случае вы получите "кирпич" вместо вашего роутера. Это не означает, что устройство после этого нельзя оживить, но не у всех хватит квалификации выпаять флешку в корпусе TSOP-48, что бы перепрошить ее и заново запаять. Поэтому, если вам нужна система с OpenWRT, я не советую перепрошивать роутеры, т.к. если вы умеете это делать, то мои советы будут вам ни к чему, а если нет, то они будут только во вред.

Замечу, что согласно предупреждению 4/32 устройства с размером флеш-памяти 4МБ и менее, и размером ОЗУ 32МБ или менее, считаются устройствами с ограниченной поддержкой. Оптимальный размер ОЗУ для OpenWRT/LEDE сейчас равняется 128МБ, а приемлемый размер 64МБ. Т.е. вы хотите использовать роутер для перепрошивки под OpenWRT то он должен быть не какой-нибудь, а довольно приличный.

На самом деле существуют специальные платы для разработки под OpenWRT, где не надо совершать никаких телодвижений с бубном, и об одной из них я хочу рассказать, а именно о LinkIt™ Smart 7688 Duo. В качестве альтернативы вы также можете рассмотреть платы: Arduino Yun и Omega 2 plus.

Платы LinkIt™ Smart 7688 и LinkIt™ Smart 7688 Duo были выпущены три года назад и являются совместным проектом тайваньской компании MediaTek и китайской SeeedStudio. Проект был нацелен на быстрорастущий рынок интернет-вещей и призван упростить жизнь тех людей, что делают свои проекты из разномастных роутеров под управлением OpenWRT. В данный момент проект находится в несколько заброшенном состоянии, но платы все еще продаются в SeeedStudio (летом они были доступны только по предзаказу), а сайте MediaTek все еще доступна документация по работе платами.

Пятого мая 2011 года, компания Mediatek купила(поглотила) Realtek. И многие чипы достались Mediatek "в наследство" от Realtek. Поэтому в логах часто будет встречаться оригинальное наименование. К примеру, ветка с прошивками OpenWRT для MT7688 называется ramips.

Основой платы LinkIt™ Smart 7688 является "роутерный" чип MT7688 с архитектурой MIPS24KEc, частотой 580MHz и объёмом оперативной памяти 128MB. В довесок, LinkIt™ Smart 7688 содержит разъём microUSB 2.0 и разъём для microSD карт. Из серьёзных минусов я бы назвал отсутствие аппаратной поддержки чисел с плавающей запятой (FPU).

Концепция платы LinkIt™ Smart 7688 Duo состоит в том, что она может являться связующей платформой для разработчиков разных направлений: 1) Для разработчиков OpenWRT которые самостоятельно собирают свои сборки OpenWRT и предпочитают программировать на языках C/C++; 2) для веб-разработчиков которые предпочитают писать свои веб-приложения с использованием Python или/и Node.js®; 3) Для Arduino разработчиков которые могут писать программы в комфортной для себя среде, опираясь при этом на мощь 580МНz компьютера.

Фирменная прошивка базируется на OpenWRT 15.05 Сhaos Сalmer. Она дополнена пакетами Python 2.7.9 и NodeJS 0.12.7. Всего прошивка "весит" где-то 20МБ. Технически, вы можете обновить прошивку до последней стоковой LEDE 18.06, но там не будет NodeJS, а Python придётся устанавливать через пакетный менеджер opkg.

Я пока предлагаю не трогать фирменную прошивку, а сосредоточиться на прикладных задачах. В данной статье я постарался рассказать о основах работы с платой Linkit Smart 7688, о сложностях и путях их преодоления.

Содержание:

  1. Характеристики LinkIt™ Smart 7688 Duo
  2. Вопрос цены. Сравнение LinkIt™ Smart 7688 Duo c аналогами
  3. Подключение и обновление прошивки LinkIt™ Smart 7688 Duo. Способ первый, стандартный, но долгий
  4. Подключение к LinkIt™ Smart 7688 Duo через последовательный порт
  5. Консоль восстановления Failsafe
  6. Баг при подключении по последовательному порту
  7. Первоначальная настройка LinkIt™ Smart 7688 Duo. Способ второй, быстрый
  8. Подключение Ethernet порта
  9. Перенос файловой системы на карту MicroSD
  10. Безопасность: создание непривилегированного пользователя и защита паролем входа через последовательный интерфейс

Читать дальше