Skip to content
Dec 12 16

ESP8266 — SDK 1.0.1

by admin

https://esp8266.ru/esp8266-sdk-1-0-1-and-datasheets/

ESP8266 wroom-02

ESP8266 — SDK 1.0.1, новая документация, WROOM и другие новости

В апреле Espressif выпустила новую версию SDK 1.0.1 в которой поправлены некоторые ошибки, добавлена куча почти ненужных функций. Не стало сюрпризом и то, что фирменная AT прошивка, в которой добавилось четыре AT команды управления буфером отправки данных, увы, теперь требует модуль с флеш памятью не менее 1 Мбайта (напомню, что подавляющее большинство модулей в продаже сейчас имеют на борту только 512 кБайт флеш памяти).

Так что AT прошивку с новыми командами я не публикую по причине того, что мне пока не пришли 4-х магабайтные модули ESD-12. Если кто-то соберет новую прошивку в один файл — публикуйте на нашем форуме, я вставлю ссылку в эту статью после проверки нашими пользователями.

UPDATE: pvvx собрал прошивку AT v0.23 SDK 1.0.1 flash 512k для модулей с 512k флеш памяти (без поддержки обновления из облака)

Раздувшийся SDK также занимает бесполезными данными и оперативную память, что убивает проект NodeMCU — разработчикам пришлось остаться на старой версии SDK 0.9.6, в связи с тем, что с новым SDK памяти в NodeMCU стало катастрофически мало.

Большие надежды многие сейчас возлагают на сообщество, которое потихоньку запиливает open-source версию SDK. По факту, реальную работу над открытым SDK ведет всего несколько человек, причем тащит, в основном,  pvvx. Если среди читающих эту статью есть люди, которые могут принять участие в реверс инжиниринге SDK и переписывании с нуля его функций — добро пожаловать к нам на форум.

Новые AT команды

1. AT+CIPSENDBUF
2. AT+CIPBUFRESET
3. AT+CIPBUFSTATUS
4. AT+CIPCHECKSEGID

Новая документация

Espressif открыла общественности так много документов в апреле, что пришлось сделать для них отдельный раздел у нас сайте, чтобы не было путаницы:

0A-ESP8266__WiFi_Specifications__EN_v4.2.pdf
0B-ESP8266__Hardware_User_Guide__EN_v0.7.pdf
0C-ESP8266__WROOM_WiFi_Module_Datasheet__EN_v0.1.pdf
0D-ESP8266__Pin_List_v0.1.xlsx
20A-ESP8266__RTOS_SDK__Programming Guide__CN_v0.9.9.pdf
2A-ESP8266__IOT_SDK_User_Manual__EN_v1.0.1.pdf
2B-ESP8266__SDK__IOT_Demo_EN_v0.5.pdf
2C-ESP8266__SDK__Programming Guide__EN_v1.0.1.pdf
4A-ESP8266__AT Instrction Set__EN_v0.23.pdf
4B-ESP8266__AT Command Examples__EN_v0.4.pdf
8B-ESP8266__Interface__GPIO_Registers_v0.1.xls
8F-ESP8266__Interface__UART_Registers_v0.1.xls
99A-ESP8266__Flash_RW_Operation__EN_v0.2.pdf
99C-ESP8266__OTA_Upgrade__EN_v1.5.pdf

Ожидается, что в ближайшее время появятся следующие документы на английском:

8C-ESP8266__Interface_I2C__EN_v0.2
8D-ESP8266__Interface_PWM__EN_v0.3
8E-ESP8266__Interface_UART__EN_v0.2
8G-ESP8266__Interface_Infrared_Device__EN_v0.2
8H-ESP8266__Interface_SDIO_SPI_Mode__EN
8I-ESP8266__SPI-WiFi_Passthrough_1-Interrupt_Mode__EN_v0.1
8J-ESP8266__SPI-WiFi_Passthrough_2-Interrupt_Mode__EN_v0.1
8K-ESP8266__Sniffer_Introduction__EN_v0.1
8L-ESP8266__Interface__SPI_Registers__v0.1
8M-ESP8266__Interface__Timer_Registers__v0.1
8A-ESP8266__Interface_GPIO__CN_v0.4
8E-ESP8266__Interface_UART__CN_v0.2
8G-ESP8266__Interface_Infrared_Device__CN_v0.2
8H-ESP8266__Interface_SDIO_SPI_Mode__CN_v0.1
8K-ESP8266__Sniffer_Introduction__CN_v0.1
8L-ESP8266__Interface__SPI_Registers__v0.1
8M-ESP8266__Interface__Timer_Registers__v0.1
8I-ESP8266__SPI-WiFi_Passthrough_1-Interrupt_Mode__CN_v0.1.pdf
8J-ESP8266__SPI-WiFi_Passthrough_2-Interrupt_Mode__CN_v0.1.pdf
8K-ESP8266__Sniffer_Introduction__CN_v0.1
8L-ESP8266__Interface__SPI_Registers__v0.1
8M-ESP8266__Interface__Timer_Registers__v0.1
8N-ESP8266__SPI_Module_User Guide__CN_v0.1.pdf
8O-ESP8266__SPI_Overlap_&_Display Application Guide__CN_v0.1.pdf
9A-ESP8266__FRC_Timer_Introduction__EN_v0.1
9B-ESP8266__Sleep_Mode_User_Guide__EN_v0.1

ESP-WROOM

Появились в продаже модули, выпущенные самой Espressif: ESP-WROOM и ESP-WROOM-02. В живую их пока мало кто видел, но уже ясно сейчас, что ничего особенного в них нет и они мало отличаются от ESP-12. В продаже на Aliexpress на момент написания этой статьи их пока нет, а вот на ebay уже появились чуть дороже 7$.


Dec 12 16

WI-FI модуль ESP8266. Отладочная плата ESP-13

by admin

при старте модуль ответил на скорости 115200 повторяет комманды посланные в него

http://payalo.net/index.php?newsid=113

WI-FI модуль ESP8266. Отладочная плата ESP-13

Наконец-то пришли Wi-Fi модули с Aliexpress. Эти модули набирают популярность немалыми темпами в силу своей низкой стоимости и простоте в использовании. Эта простота становилась все более заметной от модели к модели. На момент написание этой статьи, я заказал самую новую из линейки ESP-13 (или WROOM v2). Модуль пришел, но для его устойчивой работы необходимо прицепить минимальную обвязку, а для экспериментов не помешает и пару светодиодов для отладки. Так как готового решения под эту модель я не нашел, то решил быстро соорудить минимальную отладочную плату.

Немного о модуле: ESP-13 это модуль на основе 32-bit низкопотребляющего микроконтроллера с Wi-Fi модулем и интегрированным TCP/IP стеком, также мк имеет в составе 10-bit ADC, HSPI, SDIO, UART, PWM, I2C и I2S интерфейсы. Для программ предусмотрено 4Мб SPI-flash. Размеры модуля 18мм x 20мм.

WI-FI модуль ESP8266. Отладочная плата ESP-13

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

Рис. 3 Схема отладочной платы

Несколько комментариев к схеме:

- Перемычка "DEEP SLEEP" позволяет подтянуть к RESET вывод GPIO16 для просыпания мк с глубокого сна. Модуль перезагружает сам себя, подавая низкий уровень на GPIO16. Без этого соединения глубокий сон будет вечным для вашего модуля.

- Высокий уровень на GPIO0 и GPIO2, низкий на GPIO15 требуются только для старта модуля, а в последующем вы можете использовать их по своему усмотрению, только не забудьте обеспечить требуемые уровни до перезагрузки модуля.

- Переключатель BOOT позволяет подтянуть GPIO0 к земле, тем самым введя модуль в режим загрузки прошивки. Для прошивки достаточно перезагрузить модуль нажав кнопку RESET (при условии что GPIO0 подтянуто уже к земле).

- Питание предусмотрено 3.3В и только.

- На плате размещены 2 пользовательских светодиода, которые тоже можно подключать за надобностью. Светодиоды сидят на выводах GPIO12 и GPIO13.

- Подтяжки к питанию пользовательской кнопки "USER" нету.

- Как показала практика, выводы RXD и TXD толерантны к 5В.

WI-FI модуль ESP8266. Отладочная плата ESP-13

Для подключения и первого теста использовал Arduino Uno в качестве преобразователя USB-UART, питание 3,3В тоже брал с платы.

Разводку в SprintLayout качаем здесь: esp-13.rar [35,58 Kb] (cкачиваний: 130)

Удачи!


Dec 12 16

WI-FI ESP8266

by admin

https://geektimes.ru/post/241054/

Работа с ESP8266: Первоначальная настройка, обновление прошивки, связь по Wi-Fi, отправка-получение данных на ПК

На Хабре уже было пару статей о чипе ESP8266 китайской компании Espressif. Статья №1 и Статья №2. Не так давно я получил плату ESP-01 для проведения тестирования. Кому интересно, прошу под кат.

Мной была заказана самая простая плата с ESP8266 — ESP-01, выглядит она так:

В старой ревизии платы на разьем были выведены только VCC, GND, URXD и UTXD.
В последней ревизии добавились RST, GPIO0, GPIO2 и CH_PD.

Всего есть 11 модификаций плат, различающихся количеством выводов и вариантом исполнения:
ESP-01: PCB antenna, after matching the distance to do about the open 400 meters, easy to use.
ESP-02: SMD package for submission limit, the antenna can be drawn with the IPX header casing.
ESP-03: SMD package, the built-in ceramic antenna technology, all available IO leads.
ESP-04: SMD package, customers can customize the antenna types, flexible design, all the IO leads.
ESP-05: SMD package, only leads to serial and RST pin, small external antenna.
ESP-06: bottom mount technology, leads all the IO ports, with metal shielding shell, can be had FCC CEcertification, recommended.
ESP-07: Semi-hole chip technology, all the IO leads, with metal shielding shell, can be had FCC CE certifiedIPX external antenna, can also be built-in ceramic antenna.
ESP-08: with the ESP-07, except that the antenna is in the form of customers can define their own.
ESP-09: Ultra-small size package, only 10 * 10 mm, four-layer board technology 1M bytes!..
ESP-10: SMD interface, narrow-body design, 10 mm wide, suitable for light with controller.
ESP-11: SMD interface, ceramic antenna, small volume.

Распиновка разъёма ESP-01:

Назначение выводов платы ESP-01 такое:
VCC, GND — питание платы (+3.3В);
URXD,UTXD — выводы RS232 толерантны к 3.3В
RST — Аппаратный сброс (reset)
GPIO0, GPIO2 — выводы GPIO
CH_PD — Chip enable, для работы должен быть подключен к +3.3В.

Для переключения в режим обновления прошивки нужно подать низкий уровень на GPIO0 и высокий на CH_PD.

Для подключения платы ESP-01 к ПК я использовал USB-to-RS232 преобразователь на FT232R с выходами TTL 3.3В, можно использовать например такой.
Питание ESP-01 нужно строго 3.3В, поэтому пришлось воспользоваться DC-DC преобразователем, можно использовать такой.

С базовой прошивкой плата ESP-01 управляется AT командами, поэтому нам потребуется программа-терминал, я использовал CoolTerm.

Возможно 2 варианта использования модуля:
1. Использование платы ESP-01 совместно с доп.микроконтроллером, который будет управлять модулем по UART.
2. Написание собственной прошивки для чипа ESP8266 и его использование как самодостаточного устройства.

Естественно более выгодным является 2-й вариант, тем более потенциал чипа ESP8266 достаточно велик.

Для начала мы попробуем вариант №1, то есть управлять платой ESP-01 через RS232.

Схема подключения очень простая:
Вывод VCC — питание платы (+3.3В);
Вывод GND — общий;
Выводы URXD,UTXD — подключаем к конвертеру USB-to-RS232 (в режиме 3.3В)
Вывод CH_PD — подключаем к питанию платы (+3.3В);

В терминале (CoolTerm) устанавливаем скорость COM-порта 57600. Установить нужно именно такую скорость, т.к. если в чипе ESP8266 стоит старая прошивка (а скорее всего это так и есть), то он будет работать только с такой скоростью порта.

Жмем Connect, вводим команду AT, в ответ должно прийти OK. Если все так, то плата работает, можно двигаться дальше.

Процедура обновления прошивки

Вводим команду AT+GMR — проверка версии AT и SDK, в ответ выдает 0016000902, где 0016 — версия SDK, 0901 — версия AT

На текущий момент (06.11.2014) уже доступна прошивка 0018000902 (Версия SDK — 0018, в версия AT — 0902)

Теперь можно и нужно обновить прошивку:
1. Качаем утилиту XTCOM отсюда.
2. Качаем прошивку ESP_8266_v0.9.2.2 AT Firmware.bin отсюда
3. Отключаем питание платы, вывод GPIO0 соединяем с общим проводом, включаем питание.
4. Запускаем XTCOM_UTIL.exe, переходим в Tools -> Config Device, выбираем COM-порт к которому подключена плата, ставим скорость порта 57600, жмем Open, потом Connect, программа должна сказать «Connect with target OK!», закрываем окно настроек. Переходим в меню API TEST, выбираем (4) Flash Image Download, указываем путь к файлу «ESP_8266_v0.9.2.2 AT Firmware.bin», адрес оставляем 0x00000, жмем DownLoad. Должна начаться загрузка прошивки, по окончании будет выдано сообщение.
5. Отключаем питание платы, вывод GPIO0 отсоединяем от общего провода, включаем питание, запускаем терминал (ВНИМАНИЕ! Меняем скорость порта на 9600), проверяем готовность платы командой AT и версию прошивки командой AT+GMR.

После обновления до версии 0018000902 изменится дефолтная скорость COM-порта с 57600 на 9600, но эту скорость в новой прошивке теперь можно задать командой AT+CIOBAUD. Смотрим AT+CIOBAUD=? доступные скорости и ставим командой AT+CIOBAUD=115200 скорость 115200, в ответ должно выдать ОК. Даем команду на рестарт: AT+RST. Меняем скорость порта в программе-терминал на 115200.

Пример:

AT
OK
AT+CIOBAUD=? +CIOBAUD:(9600-921600)
OK
AT+CIOBAUD=115200 BAUD->115200
OK

Настройка подключения к Wi-Fi

Теперь попробуем подключить нашу плату ESP-01 к Wi-Fi точке доступа.
Выполняем следующие команды:
1. Устанавливаем режим работы Wi-Fi командой:

AT+CWMODE=<mode>

Доступны следующие режимы: 1 — STA, 2 — AP, 3 — BOTH
Пример:

AT+CWMODE=1
OK

2. Смотрим список точек доступа командой: AT+CWLAP
Пример

AT+CWLAP +CWLAP:(3,"WiFi-DOM.ru-0474",-85,"c8:d3:a3:30:17:40",8)
+CWLAP:(4,"Intersvyaz_516C",-89,"2c:ab:25:ff:51:6c",10)
+CWLAP:(4,"pletneva",-96,"f8:1a:67:67:2b:96",11)
+CWLAP:(4,"Test",-69,"64:70:02:4e:01:4e",13)
OK

В скобках указывается: SECURITY, SSID, RSSI, BSSID, CHANNEL
SECURITY может принимать значения:
0 — OPEN, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK)
3. Подключаемся в нашей AP командой:

AT+CWJAP="SSID","PASSWORD"

Пример:

AT+CWJAP="Test","habrahabr"
OK

Подключение длится 2-5 секунд, после чего в случае успешного выполнения появится OK.
3. Посмотрим какой IP адрес получила наша плата командой: AT+CIFSR

AT+CIFSR 192.168.1.104
OK

Отключение от точки доступа делается командой AT+CWQAP.
Адрес получен, можно двигаться дальше.

Плата ESP-01 может выступать в качестве Soft-AP, для включения этого режима выполняем следующие команды:
1. Отключаемся от точки доступа: AT+CWQAP.
2. Меняем режим работы Wi-Fi командой: AT+CWMODE=2
3. Создаем свою AP командой:

AT+CWSAP="SSID","PASSWORD",CHANNEL,SECURITY

Пример:

AT+CWSAP="Test2","habrahabr",10,4
OK

4. Пробуем подключиться в нашей AP с компьютера. Посмотрим результат:

Как видно на картинке скорость только 54Мбит/с и еще меня смущают адреса DNS серверов, думаю они явно китайские, поставить свои через AT-команды нельзя.
Адрес AP можно узнать командой: AT+CIFSR
Пример:

AT+CIFSR 192.168.4.1
OK

Список клиентов нашей AP можно посмотреть командой: AT+CWLIF
Пример:

AT+CWLIF 192.168.4.101,f4:ec:38:8d:05:62
OK

Настройка режима TCP-сервер

На плате ESP-01 можно запустить TCP-сервер для приема-отправки данных или она может выступать TCP-клиентом для приема-отправки данных на сервер.
Для запуска TCP-сервера выполним следующие команды:
1. Устанавливаем режим передачи командой

AT+CIPMODE=<mode>

mode = 0 — not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента)
mode = 1 — data mode (сервер не может отправлять данные клиенту, но может принимать данные от клиента)
Пример:

AT+CIPMODE=0
OK

2. Устанавливаем возможность множественных соединений:

AT+CIPMUX=<mode>

mode 0 — single connection
mode 1 — multiple connection
Проверить режим соединений можно командой AT+CIPMUX?
Пример:

AT+CIPMUX=1
OK
AT+CIPMUX? +CIPMUX:1
OK

3. Запускаем сервер на порту 8888:

AT+CIPSERVER= <mode>[,<port>]

mode 0 — to close server
mode 1 — to open server
Пример:

AT+CIPSERVER=1,8888
OK

Теперь можно подключиться к ESP-01 и отправить-принять какие-нибудь данные. Для подключения будем использовать утилиту SocketTest
Запускаем java -jar SocketTest.jar, на вкладке Client вводим адрес и порт ESP-01, жмем Connect. Если подключение будет успешным, то в терминале появится сообщение Link и в SocketTest станет активной строка Message и кнопка Send.
Посмотреть список активных подключений к ESP-01 можно командой AT+CIPSTATUS
Пример:

AT+CIPSTATUS STATUS:3
+CIPSTATUS:0,"TCP","192.168.1.100",44667,1
OK

Закрыть активное соединение можно командой

AT+CIPCLOSE=<id>

или все соединения AT+CIPCLOSE без параметров.
Пример:

AT+CIPCLOSE=0
OK
Unlink

4. Отправляем данные с ESP-01 на ПК
Для режима Single connection (+CIPMUX=0) отправка идет так:

AT+CIPSEND=<length>

Для режима Multiple connection (+CIPMUX=1) отправка идет так:

AT+CIPSEND=<id>,<length>

После выполнения AT+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:


AT+CIPSEND=0,16 > Ping Habrahabr SEND OK

5. Отправляем тестовое сообщение с ПК:

В терминале появляется строка

+IPD,0,16:Ping Habrahabr

Сообщение принято.
Формат принятых данных такой:
Для режима Single Connection (CIPMUX=0):

+IPD,<len>:<data>

Для режима Multiple Connection (CIPMUX=1):

+IPD,<id>,<len>:<data>

Настройка режима TCP-клиента

Теперь поменяем роли, ПК — сервер, ESP-01 — клиент, пробуем:
1. Рестартуем плату AT+RST
2. Устанавливаем режим передачи командой

AT+CIPMODE=<mode>

mode = 0 — not data mode (клиент может отправлять данные серверу и может принимать данные от сервера)
mode = 1 — data mode (клиент не может отправлять данные серверу, но может принимать данные от сервера)
Пример:

AT+CIPMODE=0
OK

3. Режим соединений ставим Multiple connection: AT+CIPMUX=1
4. На ПК в SocketTest запускаем сервер на порту 8888
5. Запускаем клиента на ESP-01
Для режима Single connection (+CIPMUX=0) формат такой

AT+CIPSTART=<type>,<addr>,<port>

Для режима Multiple connection (+CIPMUX=1) формат такой

AT+CIPSTART=<id><type>,<addr>,<port>

Возможные значения параметров:
id = 0-4
type = TCP/UDP
addr = IP адрес
port= порт
Пример:

AT+CIPMUX=1
OK
AT+CIPSTART=0,"TCP","192.168.1.100",8888
OK
Linked

6. Отправляем данные с ESP-01 на ПК
Для режима Single connection (+CIPMUX=0) отправка идет так:

AT+CIPSEND=<length>

Для режима Multiple connection (+CIPMUX=1) отправка идет так:

AT+CIPSEND=<id>,<length>

После выполнения AT+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:


AT+CIPSEND=0,16 > Ping Habrahabr SEND OK

Пример отправки и получения данных:

Полезная документация:
Описание AT-команд (На китайском)
Спецификация на чип ESP8266 (На китайском)
Спецификация на чип ESP8266 (На английском)

Заключение:

Как мы видим, плата успешно справляется с поставленными задачами, а именно — подключение к Wi-Fi в качестве клиента, может выступать в роли Soft-AP, на плате можно поднять TCP-сервер для приема-отправки данных, а можно быть TCP-клиентом.
В данной статье мы рассмотрели работу с платой ESP-01 через RS232, в качестве управляющего контроллера выступал ПК, можно без проблем подключить плату Arduino или любой микроконтроллер с UART и выполнять отправку-прием данных через Wi-Fi сеть между контроллерами или ПК.

В следующей статье (как позволит карма) я попробую рассказать о принципах написания собственных прошивок для чипа ESP8266, тем самым плата ESP-01 будет полностью автономной, ей будет не нужен доп.контроллер для управления всеми параметрами. Мы попробуем подключить к плате различные периферийные устройства.

Буду рад ответить на вопросы, хотя до конца я еще не узучил плату ESP-01.


Nov 4 16

LCD WG12864A. + STM32F100RB

by admin

LCD WG12864A. ЖК дисплей  с управляющим контроллером фирмы Samsung ks0108

1.       Vss - общий 0В.
2.       Vdd - +5В питание логики.
3.       Vo - контрастность.
4.       D/I - выбор данные/инструкции 1-данные 0-инструкции.
5.       R/W - чтение/запись 1- чтение, 0-запись.
6.       E - стробирующий сигнал при записи/чтении.
7-14.  DB0-DB7 - шина данных/инструкций.
15.     CS1 - выбор кристалла.
16.     CS2 - выбор кристалла.
17.     RST - сброс.
18.     Vee - выход отрицательного напряжения.
19.     A - анод подсветки
20.     K - катод подсветки.
Управление контрастностью осуществляется отрицательным напряжением с вывода Vee.
Система команд ЖК:

Система команд ЖК

По материалам :

http://radiokot.ru/lab/controller/15/

http://easyelectronics.ru/rabota-s-graficheskim-displeem-wg12864-na-baze-kontrollera-ks0107.html


Nov 4 16

Error: registers may not be the same — `strexh r0,r0,[r1]‘

by admin

core_cm3.c

http://we.easyelectronics.ru/PahanMenski/gcc-46-i-cmsis-ispravlyaem-oshibku-kompilyacii.html

В процессе изучения STM32 решил я обновить компилятор. Сказано — сделано. Свеженький Sourcery G++ Lite с GCC 4.6.1 на борту был скачен и установлен. Вот только проекты, использующие CMSIS дружно перестали компилироваться выдавая ошибки:

Error: registers may not be the same -- `strexh r0,r0,[r1]'
Error: registers may not be the same -- `strexb r0,r0,[r1]'


Гугление быстро выявило наличие данного бага в баг-трекере GCC. Впрочем, как оказалось, это вовсе не баг, а фича текущей версии. Все дело в том, что использование одного и того же регистра в качестве первого и второго операндов данных команд приводит, согласно спецификации ARMv7m, к неопределенному поведению. Кстати, в документации от STM32 об этом не говорится, и работает, насколько я понимаю, правильно. Тем не менее, спеку надо чтить, поэтому поищем, как исправить это досадное недоразумение.
На просторах интернета встречаются два решения:

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
   __ASM volatile ("strexh r2, %2, [%1] \n" \
       "    mov %0, r2" : "=r" (result) : "r" (addr), "r" (value) : "r2" );
   return(result);
}

и

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   register uint32_t result asm("r2");
   __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
   return(result);
}

Очевидным минусом является явное использование регистра r2. Все же задачу выбора свободного регистра лучше было бы поручить компилятору. Попробуем сделать это!
Итак, мы хотим, чтобы в качестве выходного параметра использовался регистр, отличный от входных. В GCC мы можем использовать знак амперсанда, чтобы указать, что регистр должен использоваться исключительно как выходной. Таким образом, просто добавим знак амперсанда после символа =

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value));
   return(result);
}

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

https://gist.github.com/timbrom/1942280

From 7341a316c38a61cc745ce04e618916677007883b Mon Sep 17 00:00:00 2001
From: Timothy Brom <thb@timbrom.com>
Date: Wed, 29 Feb 2012 11:29:55 -0500
Subject: [PATCH] Fixed error about strexh and strexb using the same register
---
example/libs_stm/inc/core_support/core_cm3.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/example/libs_stm/inc/core_support/core_cm3.c b/example/libs_stm/inc/core_support/core_cm3.c
index 56fddc5..0e8c3c4 100644
--- a/example/libs_stm/inc/core_support/core_cm3.c
+++ b/example/libs_stm/inc/core_support/core_cm3.c
@@ -733,7 +733,7 @@ uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
uint32_t result=0;
- __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
+ __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
return(result);
}
@@ -750,7 +750,7 @@ uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
uint32_t result=0;
- __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
+ __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
return(result);
}
--
1.7.5.4

May 24 16

Orange PI Software

by admin

http://www.orangepi.org/downloaded/download.html

Orange Pi One Setup Guide

The Orange Pi One is a £10 computer similar to the Raspberry Pi. This guide will help you setup your Orange Pi One similar to that of Rasbian on the Raspberry Pi. I will assume that you have all the necessary peripherals (mouse, SD card, etc..)

The image for Raspbian for the Orange Pi One from the official Orange Pi site is buggy. Its been built for the Orange Pi PC and doesn't take into account the changes in hardware. When I tested it I've had lots of problems.

So I've been working to setup my One as close to a raspberry pi as possible. So after some research I found that folks at Armbian have addressed these problems. Armbian is Debian 8 compiled for ARM processors.

Check out my other Orange Pi tutorials:

http://www.instructables.com/id/Orange-Pi-One-Python-GPIO-basic/

http://www.instructables.com/id/Orange-Pi-One-Analog-Devices-Using-MCP3008-Via-SPI/

Step 1: Download and write image to SD card

UPDATE: Since writing this, a desktop image has been added (uses xfce instead of lxde), which simplifies the installation alot. but the GPIO ports haven't been exported automatically like the "server" version. If you are going to use your Pi One as a media centre then choose the desktop version. it's alot more user friendly with things such as hardware video acceleration already setup but is a bit more resource hungry. You can use the desktop version and then export the GPIO yourself. The SD setup is the same for both versions you just dont need to install the desktop.

To start download SDformatter (https://www.sdcard.org/downloads/formatter_4/) and format your SD card with size adjustment ON.

Then goto: http://www.armbian.com/orange-pi-one/ and download the "server" image and extract it.

Then use win32diskimager: https://sourceforge.net/projects/win32diskimager/ and select the .raw file (making sure the drive selected is your SDcard) and click 'write'.

once that is completed insert into your One.


May 24 16

Orange PI One GPIO

by admin

OPiOne_Review_Comparison.jpg

WiringPi

http://www.orangepi.org/Docs/WiringPi.html

What is the WiringPi

Wiring Pi is a GPIO library written by Drogon. It is originally for the Raspberry Pi, but Orangepi has modified and adapted it to make it work on the Orange Pi mini/Pi, we call it WiringOP. More example details can be found at http://wiringpi.com/. All these examples can be used directly on the Orange Pi mini/Pi.

How to use WiringPi on the Orange Pi mini/Pi

Download the WiringOP on your Orange Pi mini/Pi.
For Orange Pi mini:

git clone https://github.com/orangepi-xunlong/WiringOP -b orangepimini

For Orange Pi:

git clone https://github.com/orangepi-xunlong/WiringOP -b orangepi

After download, you need direct into the WiringOP directory and run:

chmod +x ./build

And then install the WiringOP:

sudo ./build

May 24 16

Linux Distributions for Orange PI H3 boards

by admin

Orange Pi One

Orange Pi One имеет 4-х ядерный процессор Allwinner H3, графический процессор Mali400MP и 512Mb оперативной памяти DDR3. Для удешевления платы был оставлен всего 1 USB порт. Также плата располагает 100M Ethernet портом, USB OTG разъемом, слотом для microSD/TF карт памяти и гребенкой GPIO, идентичной как у Raspberry Pi B+/2B.

вот такой магазин

https://miniboard.com.ua/boards/255-orange-pi-one.html

http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342

https://drive.google.com/folderview?id=0B1hyW7T0dqn6fndnZTRhRm5BaW4zVDVyTGlGMWJES3Z1eXVDQzI5R1lnV21oRHFsWnVwSEU&usp=sharing

You are welcome to try
Debian,  UbuntuFedora 22Kali Linux, Arch Linux, OpenSuseGentoo, and Slackware
images for OrangePI H3 boards,

You can also build your own image using build scripts (see bottom of the post).

Download from  Mega or Google Drive
Last update: 11/09/2015 14:10 UTC
Last kernel update (scriptbin_kernel.tar.gz): 10/17/2015 13:30 UTC
Last install (desktop & emmc) scripts update (desktop_scripts.tar.gz): 09/02/2015 17:45 UTC

Review of the OPI boards with Debian Jessie XFCE image on CNXSoft (updated with video).
And more about OPI camera and GPIO.

Available images:

  • <distro_rel>_mini.img basic Debian and Ubuntu images, base for server or desktop, many usefull console programs installed (mc, htop, tmux, ...)
  • OrangePI_Ubuntu_Vivid_Mate.img Ubuntu 15.04 with Mate Desktop
  • OrangePI_Lubuntu_Vivid.img Lubuntu 15.04 with LXDE/Lubuntu Desktop
  • OrangePI_Jessie_Xfce.img Debian 8 with XFCE Desktop
  • OrangePI-PC_Ubuntu_Vivid_Mate.img prepared for OrangePI users, just copy to SDCard, no configuration needed !
  • Fedora22_Minimal.img Fedora 22 minimal image (without Desktop)
  • Fedora22_Mate.img Fedora 22 full Mate Desktop
  • Fedora22_LXDE.img Fedora 22 LXDE Desktop
  • Kali_2.0-Xfce.img Kali Linux 2.0 with full XFCE Desktop
  • ArchLinux_Minimal.img Arch Linux basic image (without Desktop GUI)
  • OpenSUSE_Tumbleweed_JeOS.img OpenSuse JeOS  minimal image (without Desktop GUI)
  • OpenSUSE_Tumbleweed_XFCE.img OpenSuse with full XFCE Desktop
  • Gentoo_full_cli.img Gento Linux, configured (network, ssh, ntp, gentoolkit, tmux, mc, btrfs-progs installed)
  • OPI_slackware_14.1.img Slackware Arm 14.1  minimal image (without Desktop GUI)

! user name orangepi, password for user and root orangepi !


All images are ready to be installed on any Orange Pi H3 board, tested on Orange PI 2, Orange PI PLUS, Orange PI PLUS2, Orange PI PC.

In case of any problem, please first check if you have the latest kernel, desktop scripts, etc.

Installation on SD Card

  • Download any of the available images (xz archive) from Mega or GoogleDrive
  • Download scriptbin_kernel.tar.gz, it contains the latest kernel (uImage) and script.bin
  • Unpack the archive.
  • Write the xxx.img file (disk image) to your SD Card
  • on Linux use dd command ( sudo dd if=image_name.img of=/dev/sdX bs=1M oflag=direct )
  • on Windows use disk image writing software such as Win32 Disk Imager
  • After writing the image, mount SD Card FAT partition (BOOT)
  • Copy uImage_OPI-2 or uImage_OPI-PLUS (depending on your board type) to uImage (for OPI-PC use uImage_OPI-2)
  • Copy one of the script.bin.OPI-XXXX (depending on your board type and desired monitor resolution) to script.bin
  • use uImage_OPI-XX and script.bin.OPI-XXXX from scriptbin_kernel.tar.gz if it is newer (probably it is).
  • Boot your Orange PI board from SD Card
  • After booting resize Linux partition to fit your SD Card size:
    1. sudo fs_resize

    Copy the Code

  • Reboot

You can find the more detailed instructions for begginers here (thanks @Thumos)

Installation on internal EMMC

  • Install the image on SD Card as described above
  • Boot your Orange PI board from SD Card
  • Run:
    1. sudo install_to_emmc

    Copy the Code

  • Power off the board.
  • Remove SD Card
  • Power on, the board will boot from EMMC
  • You don't have to resize SD Card before installation on EMMC if you don't plan to use it.
  • You can use btrfs option to format your emmc Linux partition as btrfs, it will be mounted with compress=lzo option and you can save up to 40% of emmc size.
    1. sudo install_to_emmc btrfs

    Copy the Code

Backup internal EMMC to SD Card

  • Boot your Orange PI board from EMMC without SD Card inserted
  • login
  • insert your SD Card
  • Run:
    1. sudo install_to_sdcard [btrfs]

    Copy the Code

  • Your emmc Linux installation will be transfered to SD Card
  • You can boot from that SD Card on another or the same OPI board
  • If booting on different OPI board, remember to copy the kernel (uImage) and script.bin for that board

Booting from USB drive:

  • You can also boot from USB drive partition.
  • The file named cmdline.txt must exist on BOOT (fat) partition on sd card or emmc.
  • The content of that file must be: root=/dev/sdXn, where /dev/sdXn is the USB drive partition (as visible from OPI) to which to boot (for exampleroot=/dev/sda1).
  • The line which mounts / in /etc/fstab on USB partition Linux must point to the right partition.
  • You can use install_to_usb script to install Linux oun USB drive partition and automaticaly create right cmdline.txt and fstab.
  • If cmdline.txt does not exist, or USB drive partition is not accesible (USB drive not attached), system boots to /dev/mmcblk0p1 (sdcard if inserted, otherwiseemmc, if available)
  • Bootable SD Card or EMMC must be accesible when booting to USB, but it is not necessary that the second partition contains valid Linux fs, sd card can have only the 1st (fat) partition
  • You can have different Linux installations on different USB drive partitions, just edit the cmdline.txt to select to which to boot.
  • The latest uImage must be used.

Using install_to_usb script:

  • Use install_to_usb script to install Linux to USB drive partition. Can be used to backup your SDCard/EMMC installation.
    1. sudo install_to_usb /dev/sdXn [btrfs]|[noformat]

    Copy the Code

  • /dev/sdXn is the USB drive partition to which to install (for example /dev/sda1)
  • if the second parameter is btrfs, USB partition will be formated as btrfs, otherwise as ext4
  • if the second parameter is noformat, USB partition will not be formated, content of the partition will be updated (in case you have used install_to_usb to backup your sdcard/emmc before)
  • be careful not to select the wrong USB partition, it will be erased/updated!
  • If the script does not exist on your image, download desktop_scripts.tar.gz, unpack to /usr/local/bin.
  • You must have the new uImage version, with boot to usb enabled.

If you are using an older image:

  • Download scriptbin_kernel.tar.gz from Mega, unpack.
  • Copy uImage_OPI-2 or uImage_OPI-PLUS (depending on your board type) to uImage on SD Card FAT partition
  • Copy one of the script.bin.OPI-XXXX (depending on your board type and desired monitor resolution) to script.bin on SD Card FAT partition
  • Copy lib/modules/3.4.39 directory to SD Card Linux partition (delete old first)
  • Copy all files (without lib directory) to /boot directory on linux partition in case you planing to install to emmc.
  • Backup your old kernel, script.bin and lib/modules/3.4.39 in case something goes wrong.

Features:

  • boot0_sdcard.fex, u-boot.fex and kernel (uImage) created from sources
  • kernel built with many features enabled (btrfs, USB serial adapters, bluetooth, hdmi sound, nfsd ...)
  • CPU runs at 1.53GHz, termal management adjusted so that all 4 cores are active up to 100 °C
  • GPIO, i2c (TWI), SPI enabled
  • Linux fs created from scratch with debootstrap
  • mimimal image can be the base for server or desktop
  • framebuffer console works
  • serial (uart) console works
  • ssh installed, root login ower ssh enabled
  • initial filesystem size less then 500 MB
  • initial RAM usage less then 50 MB
  • some usefull console programs installed (mc, htop, tmux, ...)
  • you can install server componnents (tested apache2, php, firebird, webmin, ...)
  • you can install full desktop, tested LXDE, XFCE and Mate desktop (recommended)
  • scripts to install lxde, xfce or mate desktop included, run (with lubuntu option the script will install Lubuntu core package, so you can get real Lubuntu look):
  1. sudo install_lxde_desktop [lubuntu]
  2. sudo install_mate_desktop
  3. sudo install_xfce_desktop

Copy the Code

  • script to install x2go server (install only after desktop is installed), run
  1. sudo install_x2goserver

Copy the Code

Notes

  • user name orangepi, pass for user and root orangepi
  • to enable wifi connection from command line run: sudo nmcli -a d wifi connect and enter your wifi credentials
  • to always run at full speed install heatsink and fan !
  • How to enable AP modesee this post.

Building the system

You can try to build Debian/Ubuntu for OrangePI yourself.

  • Clone my GitHub repository.
  • You will need running Ubuntu or Debian system (you can even run it on OrangePI).
  • Before running the script install debootstrap and qemu-user-static packages.
  • Read carefully and edit params.sh to adjust the parameters to your needs.
  • Run sudo create_image to create Ubuntu system. I recommend to build to local directory, then you can run image_from_dir to transfer the system to sd card or image.

GitHub

Kernel sources and Ubuntu/Debian building scripts are available on github.

OrangePi kernel sources
Ubuntu/Debian building scripts

If you find my work usefull, you can DONATE


Feb 1 16

Плата на базе GSM/GPRS модуля SIM800L

by admin

code is here

https://github.com/Seeed-Studio/Seeeduino_GPRS

where to by

http://www.mini-tech.com.ua/index.php?route=product/product&product_id=538

Плата на базе GSM/GPRS модуля SIM800L

Плата на базе GSM/GPRS модуля SIM800L - простое средство для подключения различных устройств к GSM сети.

Плата имеет всю необходимую обвязку, а также встроенный разъем для карты micro-SIM. С помощью данного модуля можно принимать и отправлять SMS, совершать звонки, отправлять данные через E-Mail и т.д.

Характеристики:

Напряжение питания 3.7...4.2 В
Поддерживаемые диапазоны GSM 850/ 900/ 1800/ 1900 МГц
Класс мощности 4 (2 Вт в диапазонах 850/ 900 МГц)
Класс мощности 1 (1 Вт в диапазонах 1800/1900MHz)
Размеры 23* 25 * 7 мм

Комплектация:

  • 1х Плата на базе GSM/GPRS модуля SIM800L
  • контактная PLS-планка

Seeeduino GPRS

Seeeduino GPRS

Note:There is another library has better performance GPRS SIM900, to use it, exchange the RX and TX pins.

  • #define PIN_TX 7 ------ #define PIN_TX 8
  • #define PIN_RX 8 ------ #define PIN_RX 7

Seeeduino GPRS is a IoT panel, you can connect to the internet through GPRS wireless network with it. Making/answering voice calls and sending/receiving SMS messages are also supported. Meanwhile, Seeeduino GPRS supports FM radio function and bluetooth communication. For more information, you can visit our Wiki

Features

  • Compatible with standard Arduino Leonardo
  • Quad-Band 850/900/1800/1900 MHZ
  • Headset Jack
  • Convenient external SIM card holder
  • Control via AT commands
  • Support Bluetooth
  • Support FM

Applications

  • Call up and answer Call
  • Send SMS and read SMS
  • AT Command Test
  • TCP Connection
  • Bluetooth Communication
  • FM radio

Getting Started

please follow the example sketch in example folder.

  • SIM800_Serial_Debug —— test SIM800 module with AT commands.
  • GPRS_CallUp —— give a call to someone.
  • GPRS_SendSMS —— send a message to someone.
  • GPRS_LoopHandle —— answer the call & read the message.
  • GPRS_ConnectTCP —— communicate with xively.
  • FM_Test —— Listening to FM radio
  • Bluetooth_AT_Command_And_Music_Play —— use your bluetooth device to control seeeduino GPRS with AT Command or use your smartphone to connect it and play music.
  • Bluetooth_Call_PhoneNumber —— Use your smartphone to connect seeeduino GPRS and a auto-call action will be executed.

thanks to

https://github.com/Seeed-Studio/Seeeduino_GPRS


Oct 29 15

GCC 4.6 и CMSIS: исправляем ошибку компиляции

by admin

GCC 4.6 и CMSIS: исправляем ошибку компиляции

http://we.easyelectronics.ru/PahanMenski/gcc-46-i-cmsis-ispravlyaem-oshibku-kompilyacii.html

В процессе изучения STM32 решил я обновить компилятор. Сказано — сделано. Свеженький Sourcery G++ Lite с GCC 4.6.1 на борту был скачен и установлен. Вот только проекты, использующие CMSIS дружно перестали компилироваться выдавая ошибки:

Error: registers may not be the same -- `strexh r0,r0,[r1]'
Error: registers may not be the same -- `strexb r0,r0,[r1]'


Гугление быстро выявило наличие данного бага в баг-трекере GCC. Впрочем, как оказалось, это вовсе не баг, а фича текущей версии. Все дело в том, что использование одного и того же регистра в качестве первого и второго операндов данных команд приводит, согласно спецификации ARMv7m, к неопределенному поведению. Кстати, в документации от STM32 об этом не говорится, и работает, насколько я понимаю, правильно. Тем не менее, спеку надо чтить, поэтому поищем, как исправить это досадное недоразумение.
На просторах интернета встречаются два решения:

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
   __ASM volatile ("strexh r2, %2, [%1] \n" \
       "    mov %0, r2" : "=r" (result) : "r" (addr), "r" (value) : "r2" );
   return(result);
}

и

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   register uint32_t result asm("r2");
   __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
   return(result);
}

Очевидным минусом является явное использование регистра r2. Все же задачу выбора свободного регистра лучше было бы поручить компилятору. Попробуем сделать это!
Итак, мы хотим, чтобы в качестве выходного параметра использовался регистр, отличный от входных. В GCC мы можем использовать знак амперсанда, чтобы указать, что регистр должен использоваться исключительно как выходной. Таким образом, просто добавим знак амперсанда после символа =

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value));
   return(result);
}

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