Tired of outsourcing? Get hired at a top product startup from Silicon Valley 🚀
×Закрыть

Microsoft IoT стек и не только... Часть 1. Популярные платы прототипирования без ОС

Давно порывался написать статью об IoT, вот наконец дошли руки.

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

Собственно, я начинаю цикл статей, посвященных IoT. Статьи буду публиковать я и ребята из Azure Community, за что им огромное спасибо.

Начну я, пожалуй, с обзора платформ для программирования устройств. Их преимуществах и недостатках.

В этой статье мы поговорим о популярных платформах без ОС.

До появления платформы прототипирования Arduino, порог вхождения в разработку Hardware был достаточно высок. Разработчик должен был обладать знаниями языка Assembler или C. Позже появился и C++, но это не исправило ситуацию. К слову сказать, я до сиг пор пишу прошивки для микроконтроллеров на C, но при этом пробовал и другие языки, потому кое какой опыт имеется.
Ситуация в значительной степени изменилась, когда появилась платформа прототипирования Arduino с собственным языком программирования и набором стандартной периферии. Если кто еще не видел Arduino, то выглядит она вот так:

Сердцем этой платформы является микроконтроллер ATMega328. Микроконтроллер отличается от микропроцессора тем, что первый является самодостаточной единицей для выполнения кода. Т.е. в нем, в отличии от процессора, есть микропроцессор, оперативная память, память программ, энергонезависимая память, таймеры, генераторы и прочая периферия + набор портов для взаимодействия с внешним миром. Все это в одной микросхеме, эдакий маленький компьютер.

Конечно, если посмотреть на характеристики этого «компьютера», окажется, что он очень слабенький:

Flash: 32 Kbytes
RAM: 2 Kbytes
Pin Count : 28
Max. Operating Frequency: 20 MHz
CPU: 8-bit AVR
# of Touch Channels: 16
Max I/O Pins: 26
Ext Interrupts: 24
USB Interface: No
USB Speed: No

Казалось бы, ну что там в него можно впихнуть? Но тут не стоит забывать, что в микроконтроллере нет ОС, а код, который вы пишете, компилится в набор байт, без использования каких либо промежуточных фреймворков и прочего. У меня ни разу не получалось написать программу под этот микроконтроллер по объему превышающую память программ. Ну, естественно, если Вы поставите себе такую цель и займетесь Copy Paste Driven Development-ом, у Вас это быстро получится :)

Микроконтроллер обладает набором портов, которые могут иметь разное назначение:

Есть Digital порты, которые могут работать как на вход, так и на выход. Управляем мы этим программно. Если порт работает на вход, то мы можем считать состояние этого порта (получить логическую 1 или 0). Если порт работает на выход — мы можем записать значение 1 или 0 в этот порт.
1 или 0 — это эквивалент напряжения на портах (выводах микросхемы): 1 — это 5 вольт, 0 — это 0 вольт. Т.е. мы программно можем управлять напряжениями на портах (выводах микросхемы).

Есть аналоговые порты, которые так же могут работать как на вход, так и на выход. Но в отличии от цифровых портов, в которых есть только два устойчивых состояния, аналоговый порт может измерять напряжение в диапазоне от 0 до 5 воль. Измеренное напряжение мы в нашем приложении получаем в оцифрованном виде в диапазоне от 0 до 1024. Исходя из этого несложно посчитать, что минимальное изменение напряжение на входящем порте, которое мы можем отловить является 5/1024 = 0.00488 Вольт или 4.88 Миливольт.

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

Для примера я написал 2 куска кода, который делает одно и тоже: измеряет напряжение на одном из аналоговых портов (к нему прицеплен термодатчик), в случае превышения определенного порога (в коде этот порог 300, что соответствует напряжению 300 * 4.88 = 1.24 Вольт) на цифровом порте появляется логическая 1, соответственно напряжение на пине становится 5 вольт. К этому пину подключено реле, которое включает ГБО. Я это для автомобиля своего делал (правда для этой статьи код я упростил).

Итак, этот код на C выглядит вот так:

А для Arduino, на языке Arduino Wire выглядит вот так:

Думаю, вы почувствовали разницу.

Достоинства этой платформы:
• Дешевизна и доступность микроконтроллеров, что значительно удешевляет конечное устройство (примерно $1\шт при покупке у китайцев партии в 10шт). На радиорынке их полно, правда цена 80-100грн.
• Большое количество готовых библиотек для работы с разной периферией (Датчики, реле, GSM, GPS, Bluetooth, WiFi и прочие)
• Широкий спектр плат прототипирования (На картинке показана одна, но есть уже больше 20 вариаций плат, с разными микроконтроллерами, размерами и т.п.)
• Возможность заливать прошивку по USB много раз.

Недостатки:
• Убогая IDE. Как только Ваш проект на базе Arduino становится более-менее комплексным (несколько тысяч строчек кода), его тяжело поддерживать ввиду отсутствия Debug, авто заполнения и прочих прелестей взрослых IDE. По сути, Arduino IDE — Это текстовый редактор с компилятором и минимальной подсветкой.
• Не безопасно. Платформа слишком слабенькая, чтоб поддерживать протоколы HTTPS и другие защищенные протоколы.
• Нет эмуляции.
• Многопоточноть? Есть попытки реализации сообществом, но реально этого нет :)
• Проблема с обновлением по воздуху.

Более подробно о платформе тут.

Разработку более комплексных решений, которые содержат сложную логику работы одновременно с GSM, GPS, акселерометрами, гироскопами и т.д. проще осуществлять, используя более высокоуровневые языки программирования. Естественно, они дороже (имею ввиду чипы), но оно того стоит. Такой код легче поддерживать, используется более взрослая IDE с поддержкой In Chip Debug, эмуляцией, обновлением по воздуху и прочих вкусностей.
По-моему, самыми популярными чипами для подобного рода задач являются чипы серии STM32F4 от ST Microelectronics.

И тут у Вас есть выбор: Либо Java\Eclipse либо C#\Visual Studio

Я буду рассказывать о втором варианте.

Есть такая штука, как .Net Micro Framework. Это Open Source реализация некого маленького .Net, который не требует наличия операционной системы и становится на относительно слабенькие ARM чипы.

Параметры чипа STM32F417:
• 2x USB OTG (one with HS support)
• Audio: dedicated audio PLL and 2 full duplex I²S
• Up to 15 communication interfaces (including 6x USARTs running at up to 11.25 Mbit/s, 3x SPI running at up to 45 Mbit/s, 3x I²C, 2x CAN, SDIO)
• Analog: two 12-bit DACs, three 12-bit ADCs reaching 2.4 MSPS or 7.2 MSPS in interleaved mode
• Up to 17 timers: 16- and 32-bit running at up to 168 MHz
• Easily extendable memory range using the flexible static memory controller supporting Compact Flash, SRAM, PSRAM, NOR and NAND memories
• Analog true random number generator
• The STM32F417 also integrates a crypto/hash processor providing hardware acceleration for AES 128, 192, 256, Triple DES, and hash (MD5, SHA-1)

А плата прототипирования выглядит вот так:

Плата Arduino совместимая и большинство периферии от Arduino можно использовать и тут.

Прошивка, как и прежде, заливается по USB, но уже напрямую из Visual Studio, для использования которой необходимо поставить SDK.

В случае с Netduino, код в Visual Studio, описанный выше, будет выглядеть вот так:

Данные чипы уже в другом ценовом сегменте: $15\шт при покупке партии 10шт, но в целом, можно взять и по дешевле. Например, на STM32F405 спокойно станет .Net Micro framework и его цена $5\шт при покупке партии в 10шт.

Достоинства:
• Относительная дешевизна и доступность микроконтроллеров, правда Atmega328 для Arduino все же дешевле
• Большое количество готовых библиотек для работы с разной периферией (Датчики, реле, GSM, GPS, Bluetooth, WiFi и прочие)
• Широкий спектр плат прототипирования и готовых встраиваемых модулей
• Возможность заливать прошивку по USB много раз.
• Богатая IDE, с режимом Debug и эмуляцией
• Поддержка многопоточности.
• Аппаратная поддержка шифрования
• Высокоуровневый язык программирования

Недостатки:
• Не обнаружил :). Нет, ну серьезно, меня реально все устраивает. Но на Java писать под эти чипы я не пробовал. Если кто пробовал — опишите впечатления. Было дело я не нашел готовой библиотеки под мой GSM модуль, так я ее на C# за день склепал. Все ж таки не на чистом C или Assembler ее писать.

Собственно, обе этих платы прототипирования крутят команды из IoT Лаборатории, которая с недавнего времени начала функционировать у нас в офисе, и есть первые выводы о целесообразности использования той или иной платформы:

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

Ну а какой язык программирования выбирать, решает каждая команда сама, исходя из своих знаний и опыта.

В следующей статье я расскажу о более взрослых платах на базе многоядерных ARM чипов с операционной системой (Windows и Linux) и об использовании облачного бэкенда для IoT.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Как IoT платформа — kaaproject.org . И, вообще, Arduino для mass-production — это звучит странно.

Очень интересно. Спасибо!

5\2014 = 0.00488 Воль
У вас помарка в статье:
5/1024 = 0.00488 Вольт

Не до конца %) — сейчас в статье:

5\2014

Еще б 1 и 2 местами поменять %)

Вода про буратину, которая на каждом углу валяется и совсем мизер про «Microsoft IoT» из названия заметки.

Вообще, эту статью я писал дабы на нее ссылаться в последующих статьях. Так сказать «для тех, кто не в теме».

Ардуина, скорее для не электронщиков. Например, человек рыбками аквариумными занимается, хочет сделать автоматическое кормление, регулировку температуры и управление светом, но хороших знаний электроники и программирования у него нет. Вот для таких хоббийщиков самый раз.
P.S. Коль есть специалисты разных уровней, подскажите, есть задача работать с Ethernet и CAN, присматриваюсь к платформе stm32f7. Перед этим делал эту задачу на stm32f107, но для хотелок в виде подключения usb флэшки, красивой вэб морды и прочих атрибутов сетевого устройства 107й не хватате. Брать stm32f7 и прикручивать все вручную не охота уже, интересует что-то типа того же linux, но ближе к реалтайму. Или все же вручную прийдется писать?

Все упирается в серию. Если для себя 1-2 шт. или партия в 10-20 шт и хочется линукс- то можно с тем же BeagleBone позабавляться. Если что-то серийное, то я бы засунул это в STM32F215/217 с использованием RTOS и сетевого стека, который нормально с RTOS работает (как вариант FreeRTOS+lwIP) Ну или в F4 камень. Смотреть уже надо по задаче, какой лучше подходит.

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

Ethernet on stm32f107
А зачем скорость передачи данных 50-60Кб/с по Ethernet? Больше врядли получится. Just curious.

Это мост CAN-Ethernet. Только CANа 2, скорей всего немного функций роутера нужно будет довесить, что бы оптимизировать трафик в CAN шине. На stm32f107 я производительность передачи не измерял, был тест времени задержки между получением пакета и приходом назад ACKа. А остальное было на глаз: хватит-не хватит.

А почему считаешь 50-60? Процессора там хватит на мегабиты TCP. Да и всего остального хватит.

А почему считаешь 50-60?
Я не считаю, я измерял. В общем если за TCP стоит некая служба, которая может генерировать данные, а не просто посылать нули для пиковой пропускной способности, то производительность падает до тех цифр, что я написал. Ну и кому интересен чип, если за скорость в 50Мбит при посылке нулей ты больше ничего на нём делать не можешь.

А при чем тут служба вообще? Нагрузить обработкой можно так что будет скорость близкая к нулю. Чтобы охарактеризовать чип лучше показать максимальную скорость при которой загрузка 100%, это хоть как тоинформативно.
Знаем трафик, и знаем сколько CPU остается

Для похожих тестов мы используем iperf. Но у нас wifi чип подключённый через SPI или SDIO. В соседнем тиме stm32 используют, но точных цифр я не знаю, в голове крутится 20-30Mbps iPerf TCP, ThreadX + NetX RTOSи стек.я же работаю над полностью нашим SoC, он раз в пять попроизводительней, и там достигал 170Mbps пока не утыкался в полную загрузку.

Гоняем 40Mbps и multichannel audio.

.Net для эмбеддед? Проще жене на ДР подарить болгарку с перфоратором и выжить, чем использовать .Net в embedded.

.NET для микроконтроллеров? Серьезно?
Лучший фреймворк для stm32 это (сюрприз) HAL от компании STM. На нем код, аналогичный первому примеру, будет выглядеть как
int val = HAL_ADC_GetValue(hadc);
if(val > 300)
HAL_GPIO_WritePin(PORT, PIN, 1);
else
HAL_GPIO_WritePin(PORT, PIN, 0);
Конфигурация чипа проходит в визуальной среде, кликаешь на ножку и говоришь что на нее нужно повесить. Там правда добавится автосгенерированный код на пару страниц, который подготовит все к работе — в ардуино этот код пользователю даже не показывают — но если страшно, можно на эти страницы не смотреть. А, да, забыл добавить: это все хозяйство работает для всех семейств STM32 — от F0 до F7, причем код в очень большой степени совместим (лично переносил проект с F1 (72MHz, 20kb RAM, 128kb flash) на F4 (168MHz, 192kb RAM, 1Mb flash), ушло два дня — и то только потому, что не знал многих особенностей F4. На следующий перенос уйдет несколько часов).

Ну и когда речь заходит о микроконтроллерах, то часто это не от хорошей жизни. От микроконтроллера обычно нужно чтобы он выполнял действия с микросекундной точностью, если задача позволяет подождать десяток-другой миллисекунд — то можно уже поставить систему уровнем повыше, типа той же raspberry zero за $5, и там писать на чем вздумается.

Так я и не противопоставляю netmf тулкиту от STM. Я же в статье сравнивал эту платформу с JAVA. И C# и Java являются более высокоуровневыми языками, со своими достоинствами и недостатками. В даном примере чипы SMT32F4 представлены в качестве примера. С таким же успехом я мог писать в контексте netmf о чипах AT91SAM например. Ну или вообще о ADSP-BF518F от Analog Devices (А вот теперь сюрприз, поддержка чипов Blackfin от AD была анонсирована в 2007 году. Даже White Paper есть, который объясняет, зачем эта интеграция была проведена.).
Если говорить о микросекундной точности — это не netmf, т.к. он не realtime. Но и ограничивать сценарии применения микроконтроллеров только realtime операциями, знаешь, это тоже не корректно. В конце концов мы ведь об IoT говорим, а не, например, об устройствах коммутации, где задержка с принятием решения грозит либо коротким замыканием, либо отключением или сбоем работы в нагрузке (из пальца высосал, но тем не менее :)).
В большинстве IoT сценариев задача Embedded устройства по WiFi или Etherner отдавать телеметрию, ну пусть раз в секунду. Возможно замкнуть, включить или еще что-то сделать по команде с сервера.

Я правда не могу понять зачем тратить кучу процессорного времени без необходимости. В IoT время работы от батареи почти всегда очень важно, и делая больше вычислений чем нужно (а в случае с такой платформой — на два-три порядка больше чем нужно), мы тратим пропорционально больше энергии и, соответственно, теряем время работы. Также на ровном месте теряем все преимущества микроконтроллеров. А что выигрываем-то?

От сценария зависит. Примеры:

1. Надо удаленно управлять реле. Защита — пофиг. Берешь дешевую ATMega8, Ethernet модуль И все у тебя будет отлично. Энергопотребление? Если девайс питается от сети — пофиг (не всегда конечно, но в большинстве случаев, что 0.1mA\h, что 20mA\h большой роли не играет, если рядом работает моток 1KW\h). Аккум — применяем подходы, описанные производителем (тушим лишнюю периферию в контроллере, прорабатываем возможность перехода в PowerDown режим с пробуждением от внешнего прерывания или по WatchDog). Тут никаких Netmf\Java\WIndows\Linux не надо. Правда и рядового разработчика под это не привлечешь, придётся искать человека, который реально шарит в регистрах, таймерах, прерываниях, протоколах. И тут возникает вопрос сроков и цены такой разработки. Если ты можешь сам все сделать — то цена вопроса твое личное время.

2. Датчики отпечатков пальцев, которые стоят во всех офисах по всей стране с централизованной базой пользователей и биометрией для них и торчащим вебсервисом по https протоколу. ATMega8 — не справится (ну или попробуй ей кодом рассказать, что такое X509 сертификат). STM32F4 — вполне. Что выбрать: родной для платформы C\C++ или сторонний C#\Java? Вариант 1 хорош если есть люди достаточной компетенции и есть деньги оплачивать этих людей. Выбирая второй вариант, ты и разработчика быстрее найдешь, и код напишешь быстрее и поддерживать легче будет, т.к. он один (имею ввиду стек: C#\.Net) и для девайса, и для сервера, и для мобильного телефона, и для приложения на ПК, и для вебсайта. И не забывай, под высокоуровневые технологии есть мощные IDE, с кучей плагинов, с организацией командной работы, тасками, канбанами, сорс контролами, релизами и прочими прелестями. В итоге, ты получаешь быстрее Time To Market. Иными словами, пока в вилариба моют обычным порошком, в вилабаджа уже все давно вымыто :) А лишнее процессорное время — таки да, таки есть. RealTime — таки да, его тут нет. А оно критично в данном сценарии? Датчик отдает тебе даже не картинку, а некую уникальную цифровую последовательность, которую нужно просто по защищенному каналу трансфернуть на сервер и получить ответ, открыть турникет или нет. Ну и наконец, netmf красиво работает с внутренней периферией чипа для обеспечения корректного входа и выхода из Sleep\PowerDown, внешние прерывания в виде событий, поддерживает все протоколы чипа (SPI, UART, I2C) на уровне готовых библиотек, описаны стратегии защиты, обновления по воздуху, In Chip Debug в Visual Studio и прочее.

Реле — странный пример, его можно решить вообще чем угодно, хоть аналоговой схемой.

Датчики отпечатков пальцев по всей стране — 10% работы над датчиками (из них 50% — выбрать правильный сенсор и договориться о покупке, 30% сделать хорошую плату, 20% написать программу), 90% — над системой централизации. Так что тоже пример мимо, тут программная часть на железе — ничтожная часть системы, под какую технологию найдется специалист под рукой, на той и надо делать

Реле — странный пример, его можно решить вообще чем угодно, хоть аналоговой схемой.

А Ethernet в примере с реле тоже в аналоге сделаешь? Тут основной затык с удаленным управлением. Мы же про IoT сценарии говорим.

Датчики отпечатков пальцев по всей стране — 10% работы над датчиками

Так а во многих IoT хардвар кодинг — это и есть 10%. Мы же не осцилограф делаем. В этом то как раз тема: действительно, набрал готовых датчиков или вообще какой-то OEM девайс готовый, нашел програмера, который не вникая в особенности микроконтроллера на C#\Java изобразил тебе код и вопрос закрыт. А уж на сервере да, надо постараться. Инновация может лежать только в плоскисти серверного бэкенда. Аналитика, машинное обучение и прочее.

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

Хотя если брать какие-то большие производственные комплексы, типа сталелитейных заводов (навеяло недавним визитом в одно из таких предприятий), там и запросы другие, т.к. специфика харда другая, там китайскими модулями не отделаешься. Схемотехнический хардкор :)

А со спецом, опять таки, смотря какого ищешь. .Net\Java — коих 70% среди всех, или C\C++ под STM платформу.

Ethernet проще всего на стм32 делать, честно говоря, там все есть. Но не будем о деталях.

Вот что за странное утверждение, что хард — минорная часть, но самая рисковая? Это как? Если хард это мелочь, которая просто стоит сколько-то недель работы специалиста, а самого специалиста можно найти где угодно (как в примере с отпечатками) — то где тут риск? А если задача так сложна, что есть риск не решить ее вообще — то это никак не мелочь, а ключевой элемент, дающий (при реализации) нехилое конкурентное преимущество.

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

Вот по этому рисковая.

Минорная она в контесте затрачиваемых ресурсов на проектирование этого самого харда (получение первого работающего прототипа). Чаще всего, больше ресурсов уходит на создание бэкенда для этого харда.

Если у тебя есть обратные примеры, приводи.

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

Так и не надо, он написан. Бутлоудер передает управление netmf, который запускает приложения.

Причем есть 2 варианта: использовать boot loader, который написан Microsoft-ом, или тот, который поставляется вместе с чипами от STM.
Например в STM32F1 с целью экономии памяти, используется встроенный bootloader.

использовать boot loader, который написан Microsoft-ом, или тот, который поставляется вместе с чипами от STM.

STMвский шифрование не обеспечивает. От Microsoft обеспечивает? Как быть если есть необходимость обновляться «по воздуху» и связь время от времени рвется. А датчики ваши находятся в труднодоступных местах (например под потолком ангара в МВЦ)

Если ты про защиту прошивки, например от кражи, то она обеспечивается по другому, на уровне микроконтроллера.

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

А уж если новая прошивка была закачана полностью, то и обновится должна без проблем не зависимо от того, есть ли связь с внешним миром, или нет. Для обновления firmware в Netmf есть специальный класс MFFirmwareUpdate.

Бутлоадер от СТМ эту задачу не решает. Майкрософтовский точно решает? А то вы их вместе упомянули

Чтоб не растекаться мыслью по древу:
Есть набор неких IoT устройств, который собирает данные и отправляет на сервер (Где-то тут от тебя была фраза что в большинстве случае для IoT задача железа — собрать данные с датчиков и передать их)
Датчики висят под потолком либо в других труднодоступных местах. Интерфейс обмена — проводной и/или беспроводный (Wi-Fi или радио)
Потом наступает факап, который ты выше уже описывал:

А если промахнулся в прошивке в девайсе, то отзыв партии на сервисное обслуживание, перепрошивка и отправка обратно заказчику.
Ну или запилили новый функционал на серваке и теперь надо обновить прошивки. Как ты это сделаешь с помощью встроенного бутлоадера от STM? (Вот честно, я сначала попытался придумать решение этой проблемы, но ничего нормального кроме как «нужен кастомный бутлоадер» в голову не приходит )
Если ты про защиту прошивки, например от кражи, то она обеспечивается по другому, на уровне микроконтроллера.

И только? А как быть с теми, кто обновления на сайт выкладывает? Или как J-Link, c определенной версией софта для компа идет определенная версия прошивки, которой программатор перешивается.

У тебя есть защита самого чипа от чтения прошивки.
Дока

Давайте посмотрим сюда: Дока 2
п.3.11 — Включение Read Out Protect, после чего чтение FLASH становится невозможно.
п.3.12 — Выключение Read Out Protect, в этом случае FLASH стирается, и потом включается чтение (пустого FLASH)

Иными словами, после того, как ты включил Read Out Protect, вариантов стырить прошивку путем подключения к UART — нет.

Что касается обновления по воздуху:
Прежде чем отдать чип клиенту, включаем Read Out Protect

Теперь задача, защитить прошивку от перехвата. Реализуется например HTTPS протоколом обмена данными между сервером и микроконтроллером.

Перехватить ее даже между GSM модулем и микроконтроллером нельзя, т.к. трафик расшифровывается непосредственно в микроконтроллере.

Файл с новой прошивкой попадает в девайс, девайс бутается с новой прошивкой.

Или я чего-то не понимаю, или мы о разных вещах говорим.

Как устроена R/W protection я в курсе ))) Единственное дополнение — я не включаю защиту вручну (течнее не я, а регулировщики, которые тестируют устройства перед отгрузкой) Прошивка при каждом старте сама себя проверяет, залочена она или нет и лочит по необходимости. Таким образом достигается 100% гарантия, что устройство защищено и никто ничего не провтыкал. Но это для Cortex-M В AVR к сожалению из кода к фьюзам не дотянуться.
Теперь поехали дальше

Файл с новой прошивкой попадает в девайс, девайс бутается с новой прошивкой.
Вот это самое интересное.
Например в STM32F1 с целью экономии памяти, используется встроенный bootloader.
Ну получил ты прошивку и даже куда-то ее сохранил. Причем сама себя она переписать в памяти по тем же адресам, где она лежать должна, не сможет. Поэтому ты ее пишешь либо в пустую flash память (тогда прошивка по размеру не должна превышать 50% размера флеша) либо во внешний носитель. И что дальше? попробуй встроенным бутлоадером ее обновить )))

Так вот в чем корень зла :)
ОК, попробую связку netmf + штатный бутлоудер.

ну или попробуй ей кодом рассказать, что такое X509 сертификат
Пример с X509 приведен потому что microframework может это из коробки, или потому что так случилось, что кто-то заопенсорсил реализацию X509 под microframework?
А что если кому-то надо FFT или парсниг mp4 box-ов?
Выбирая второй вариант, ты и разработчика быстрее найдешь
Найти .NET разрабочтиков действительно не проблема, только какой с них толк в ембедед, если с .net micro framework до этого никто из них не работал и 99% их опыта будет нерелевантно?
и код напишешь быстрее
Гораздо вероятнее, что где-то в самом начале разработчики начнут натыкаться на косяки сырой платформы, и даже за помощью обратиться некуда будет, так как на ней никто не пишет (на stackowerflow 229 вопросов на тему microframework)
и поддерживать легче будет, т.к. он один (имею ввиду стек: C#\.Net) и для девайса, и для сервера, и для мобильного телефона, и для приложения на ПК, и для вебсайта.
Про то, что все будет писаться на C#, нам рассказывали еще в 2000 году, неужели все еще работают по старым методичкам?
и для сервера
При условии, что все серверы будут крутиться на винде, что для большинства проектов ложно
и для мобильного телефона
При условии, что у юзеров будут только винфоны определенной версии, что покрывает меньше 3% потенциальных юзеров
и для приложения на ПК
При условии, что все пользователи сидят на винде нужной версии, что покрывает ... ну вы поняли
и для вебсайта
Вы про Silverlight, про Script#, или про In-browser WPF? Сори, они все умерли.

Более того, вы тут перечислили как минимум три разных несовместимых между собой стека C#\.Net. Профит с того, что все будет написано на одном языке программироавния, минимален, так как ни сборки, ни код вы вероятнее всего не сможете шарить, плюс на более менее серьезном проекте всем этим будут заниматься разные люди.

И не забывай, под высокоуровневые технологии есть мощные IDE, с кучей плагинов, с организацией командной работы, тасками, канбанами, сорс контролами, релизами и прочими прелестями.
Все эти вещи существовали еще во времена, когда единственным инструментом коммандной работы в Microsoft была электронная почта.
Вы про Silverlight, про Script#, или про In-browser WPF? Сори, они все умерли.

Эти, да умерли. А вот ASP.NET реинкарнировался в ASP.NET Core 1.0, ушел в OpenSourse и портировался на Linux.

Ну и Xamarin теперь стал частью Microsoft, так что с кроссплатформенностью все в порядке. У тебя в этом сценарии нужно иметь 3 группы разработчиков (Embedded\Web\Client), которыми ты покрываешь разработку прошивки, бекенд для Windows\Linux, Толстый клиент для Windows 10 (Phone, PC, Tablet, Xbox, Hololense) + Android + iOS.
При этом все 3 группы работают на одном языке программирования. Чем плохо ?

А вот ASP.NET реинкарнировался в ASP.NET Core 1.0, ушел в OpenSourse и портировался на Linux.
ASP.NET и не умирал, так что ему не надо было реинкарнироваться. Core — сильно экспериментальный и бесполезный продукт чтоб его использовать в реальных проектах.
Ну и Xamarin теперь стал частью Microsoft, так что с кроссплатформенностью все в порядке. У тебя в этом сценарии нужно иметь 3 группы разработчиков (Embedded\Web\Client), которыми ты покрываешь разработку прошивки, бекенд для Windows\Linux, Толстый клиент для Windows 10 (Phone, PC, Tablet, Xbox, Hololense) + Android + iOS.
На Xamarin не написано ни одного AAA приложения, т.е. если вы собираетесь писать что-то, чем будут пользоваться люди, то у вас будет нативный клиент на Android, нативный клиент на iOS, нативный клиент для Windows Phone, нативный клиент для Xbox.
Толстый клиент для Windows 10
Это,
Толстый клиент для Windows 10 (Phone, PC, Tablet, Xbox, Hololense)
Это, конечно, офигенно, но

1) Что мне делать, если куча моих пользователей не обновилась до Windows10 или вообще до сих пор сидят на девайсах, которые никогда не получат Windows 10?

2) А что, кроме майкрософтовских девайсов больше ничего не существует? Что если мне нужно также поддерживать SPS, Wii, Chromecast, тысячу разных LRD?

При этом все 3 группы работают на одном языке программирования. Чем плохо ?
Плохо, что одна группа пишет для контроллера на языке, который не предназначен для этой задачи, другая группа пишет для мобильных девайсов на языке, который тоже не предназначен для этой задачи.

В ембедед есть уже куча инструментов, которые специально заточены под такие задачи, и развивались десятилетия. Какой смысл в очередном монстрообразном .NET, прикрученным опять не к месту?

Какой смысл...
Понижения порога вхождения в тему для тех, кто знает/умеет .NET C ардуинкой точно так же было. Куча готовых библиотек и модулей. Мозг над регистрами морщить не надо. Херак-херак, и в продакшн прототип готов.

Сумнівно... Ніхто не знижує поріг входження керування літаком, для людей що мають досвід керування автомобілем.

Сфера застосування Arduino: створення прототипів, не більше.

P.S. Все вищенаписане моя суб’єктивна думка.

Я тоже так думал, пока не увидел, как чуваки Arduino nano не вставляют в девайс и не продают это в красивой коробке.
Какая разница твоему клиенту, что там внутри. Главное, чтоб работало.

Для клієнта який не знає що таке ардуіно, все одно. Але б ніколи не купив девайс знаючи що він зроблений на ардуіно:)
Ардуіно як на мене це спроба «підсадити» людей не технічних спеціальностей(навіть тих хто не знає закону Ома) — на ці плати, потім ці люди щось зроблять, воно працює, а вони поняття не мають як і чому....В цьому немає жодного негативу, поки такі «розробки» знаходяться на рівні прототипів та хоббі. Але коли це все виходить на ринок, це не дуже добре....

Хороша стаття на тему Ардуіно:
catethysis.ru/arduino-vs-stm32

Да, интересные размышления, правда я не совсем согласен.
Ты описываешь ситуацию, когда маркетолог или продавец начинает программить МК используя Arduino не понимая того, что происходит вокруг микроконтроллера (да и наверное в самом микроконтроллере).
А вот если радио электронщик начинает изучение программирования с Arduino — помойму не так уж плохо :) Шансов создать работающее решение гораздо больше.

Як правило електронщики не починають програмування з Arduino, це із власного досвіду: працюю уже в другій компанії з колегами елекронщиками/, жодний із них не починав з ардуіно. Можливо це співпадіння. Arduino — це мала зона комфорту, якою чомусь стараються свідомо себе обмежити. За межами цієї зони є ще багато всього нового і цікавого.

Понижения порога вхождения в тему для тех, кто знает/умеет .NET C ардуинкой точно так же было.
Спорное преимущество. Если школьникам дать комплект для сборки водяной ракеты из пластиковых бутылок, они не запустят ракету в космос через 20 лет, так как это 2 разные ветки технологий.
Куча готовых библиотек и модулей.
Сори, но пошел маркетинговый булшит. Какая куча библиотек и готовых модулей под micro framework, которым никто не пользуется?

И я могу поспорить, что под C уже написано на много порядков больше библиотек.

Какая куча библиотек и готовых модулей под micro framework, которым никто не пользуется?
Я за библиотеки к ардуинке писал.
Спорное преимущество. Если школьникам дать комплект для сборки водяной ракеты из пластиковых бутылок, они не запустят ракету в космос через 20 лет, так как это 2 разные ветки технологий.

Я думаю надо спросить у автора статьи, зачем в embedded .Net И какие цели Microsoft преследовала. Свое видение «зачем оно надо» я высказал выше.

А прежде чем писать «булшит», посмотреть слабо?

Codeplex,
netmf toolbox,
netmf toolbox

Тебе под что конкретно библиотека нужна?

Ну и в конце концов, если используешь что-то экзотическое, у тя есть SPI, UART, I2C, ADC\DAC, PWM на уровне библиотек самого фреймворка. Я ж писал, было дело не нашел подходящей библиотеки для SIM900 модуля (вернее она была, но не понравилась), ну ничего, такое бывает, иногда надо и самому че-то изобразить.

Ну и уж совсем на худой конец — netmf бесплатен и с открытым кодом, равно как и Arduino, библиотеки от которой тоже приходится дотачивать, убирать лишнее. Это жизнь.

А прежде чем писать «булшит», посмотреть слабо?
Посмотрел. Список из 78 библиотек, написанных за 5 лет существования micro framework должен меня как-то впечатлить?
Ну и уж совсем на худой конец — netmf бесплатен и с открытым кодом
Бесплатные опенсорцные инструменты для ембедед разработки существуют больше 30 лет

А какой смысл использовать JAVA\.NET на Linux\Windows? Ведь есть же C++ и там и там?

ІМХО Ардуїнки — це як формошльопство у фронт-енді, раз-два і готово.
А до плат Texas Instruments у вашій лабораторії не приглядались? Дуже подобається їхня девелопер-френдність.

не сприйміть за рекламу, спробуйте PSoC 4 вони ще більш девелопер-френдлі.
www.youtube.com/watch?v=3h-TkP-iInM

Девелопер-френдлі це коли можно працювати під Linux, у Cypress з цим зовсім погано на відміну від TI.

я мав на увазі що Cypress має зручну систему конфігурування, багато речей можна зробити навіть не написавши рядка коду.

Всі ці зручності Windows only, всі хто не з Windows, що не люди? :)

ці питання вже не до мене :)

Ви ж інсайдер, піднажміть там на когось)

Имхо буратинки — это лишь плата с МК, никто не заставляет заниматься формошлепством и использовать Arduino IDE.

Присматривались. Работаем над этим.

У меня скоро на IoT будет аллергия(( Честно!

Смешались в кучу кони, люди....

А для Arduino, на языке Arduino Wire выглядит вот так:
Думаю, вы почувствовали разницу.

Разницу скорее всего почувствуют, как только возникнет необходимость разработать что-то более сложное, чем управление реле. Особенно когда есть временные ограничения.
Как по мне, Arduino отличное хоббийное решение с низким порогом вхождения и развитым комьюнити. Скорее всего поэтому оно у вас в лаборатории и применяется. Тяжело людям, которые разрабатывали приложения для мобильных (например) вникать в эти все регистры и прерывания. А это все время требует. А не дай бог, еще многопоточности захочется...

Разработку более комплексных решений, которые содержат сложную логику работы одновременно с GSM, GPS, акселерометрами, гироскопами и т.д. проще осуществлять, используя более высокоуровневые языки программирования.
Почему? С/С++ достаточно.
static AnalogInput = new AnalogInput(Cpu.AnalogChannel.ANALOG_0)
Интересно было бы взглянуть во что скомпилится вот этот new. И коль уже заговорили о
Netduino применяется там, где проекты нацелены на B2B, т.к. там есть повышенные требования к безопастности.
то MISRA вообще прямо запрещает использовать динамическое выделение. Как ваше устройство себя будет вести, когда heap фрагментируется и new не сможет память под новый объект выделить? За виртуальные машины на камнях, которые для риалтайма используются, просто промолчу.

Ну если подытожить, платы для прототипирования годятся. Но ровно до того момента, пока вы не дойдете до серийного производства и не выясните, что поставив более дешевый чип от ST (в который не лезет Net Micro Framework, но который стоит на 3$ дешевле) вы сэкономите 3000$ на партии 1000 шт.
Но это только мое мнение. Я могу ошибаться )))

Интересно было бы взглянуть во что скомпилится вот этот new.
Ой, да ладна! Там 192кб ОЗУ, даже avr такое умеет www.nongnu.org/...c/user-manual/malloc.html
то MISRA вообще прямо запрещает использовать динамическое выделение
Ой, да ладна! Если вы хипстер и вам нужно поморгать десятком светодиодов, зачем вам MISRA?
Разницу скорее всего почувствуют, как только возникнет необходимость разработать что-то более сложное, чем управление реле.
Однажды мне понадобился генератор синуса на 1кГц для отладки схемы, ибо осциллограф есть, а тестовый сигнал запустить не на чем. Вообщем спаял я R-2R ЦАП и подключил я его к ардуине, написав при этом соответствующую программу, используя их библиотеки. Когда я посмотрел выходной сигнал то это был страх и ужас, синус там конечно просматривался, но никакого килогерца даже близко не было. Разбирался долго, надоело, написал все своими руками, без библиотек. Внезапно сразу увидел свой килогерц. Стал разбираться в чем же дело, оказалось что простейшая запись в порт, генерирует порядка 30 ассемблерных инструкций. Так что использовать можно, но осторожно))
Net Micro Framework
Он вроде еще и денег стоит,.
Ой, да ладна! Там 192кб ОЗУ, даже avr такое умеет
Все умеют. Только потом вот такие проблемы вылазят: electronix.ru/...ndex.php?showtopic=131612
Если вы хипстер и вам нужно поморгать десятком светодиодов, зачем вам MISRA?<
Чтобы не удивляться, когда в один прекрасный момент 10 светодиодов со 192 кБ ОЗУ вдруг перестанут работать. Особенно если девайсов пару сотен штук уже успели продать и пользователи разместили их в труднодоступных местах ))
Стал разбираться в чем же дело, оказалось что простейшая запись в порт, генерирует порядка 30 ассемблерных инструкций.
Эт бывает))))

...буратина с ЦАП без ФНЧ, какой вы ожидали там синус?
Простой мультивибратор или генератор на двух транзисторах по схеме аналога лямбда-диода уже не в почете, надо городить примитив на целом МК )

ибо осциллограф есть
если это полноценный осцилл, то там есть тестовый меандр, который можно сгладить до синуса, если надо аналоговую схему отладить. В конце-концов есть аудиокарта на любом ПК/ноуте для генерации тестовых НЧ сигналов.

Нет, бесплатен.

В лаборатории стартапы по части Hardware применяют те технологии, которые считают нужными. У нас не только Arduino. Есть еще Netduino, Galilleo, RPI2, Beaglebone, Edisson и даже платы на чипах Intel Curie. Наша задача в лабе вырастить бизнесы, а не использовать Windows там, где она не нужна. Помочь с рабочим местом, измерительным оборудованием, поиском клиентов, налаживанием выпуска.
Про динамическое выделение памяти в коде, который я написал, вообще не пойму, где ты там ее нашел :)
А по поводу того, что сколько стоит, подумай вот о чем:
Если ты продаешь железо и конкурируешь ценой (а значит есть конкуретны и у тебя нет преимущества перед ними, т.е. продукт не инновационен) ты даже инвестора под такую идею не найдешь. Продавать нужно Business Value. Есть пример из той же лаборатории: ребята сделали девайс из готовых модулей за $40, а продают за $400. И покупают же, потому что других нету, и выгода для покупателя очевидна, и ROI — 6 месяцев, все как по книжке. Их кейс интересен особо. Они используют наше облако, соответственно есть наш интерес в продвижении (чем больше они продадут, тем больше нашего облака используют). И мы помогаем им продавать этот девайс, знакомим с нужными людьми в больших компаниях. Они взяли более дорогие чипы Intel, и теперь Intel тоже ищет для них клиентов, и таки находит. Используют для связи GSM модули с симкартами Киевстар и что ты думаешь, Киевстар тоже помогает продавать по своим каналам. И таки получается.
Так вот, при цене устройства для заказчика в $400, для тебя цена партнерства может быть больше, чем цена чипа в серии. И для Инвестора ты как-то привлекательнее становишся, он какая у тя партнерская экосистема, и продажи есть...
А когда бизнес вырастает, так партнеры и скидочки да чипы, на ПО, на связь индивидуальные дают, и в итоге получается, вроде ничего и не потерял :)
О бизнесе тоже надо думать. Строить бизнес модель, партнерится с теми, кто приносит пользу. А не сам в гараже, в надежде до старости жигули за вырученные деньги купить.

В лаборатории стартапы по части Hardware применяют те технологии, которые считают нужными. У нас не только Arduino. Есть еще Netduino, Galilleo, RPI2, Beaglebone, Edisson и даже платы на чипах Intel Curie.
В статье рассмотрены только Arduino и Netduino. От них комментарии и плясали.
Про динамическое выделение памяти в коде, который я написал, вообще не пойму, где ты там ее нашел :)
Ну, вот эта строчка из статьи, например.
static AnalogInput = new AnalogInput(Cpu.AnalogChannel.ANALOG_0)
Кстати, откуда в .Net оператор new память под обьект дергает? В С/С++ из heap точно.
Если ты продаешь железо и конкурируешь ценой (а значит есть конкуретны и у тебя нет преимущества перед ними, т.е. продукт не инновационен) ты даже инвестора под такую идею не найдешь.
Откуда взялся этот вывод о желании торговать железом? Речь шла о уменьшении себестоимости устройства .
Есть пример из той же лаборатории: ребята сделали девайс из готовых модулей за $40, а продают за $400. И покупают же, потому что других нету, и выгода для покупателя очевидна, и ROI — 6 месяцев, все как по книжке.
Ну, тогда и я пару примеров из личного опыта приведу.
1 Есть некий прибор. На тот момент когда это все происходило он был инновационным ))) Так вот. Покупает его один клиент в США, открывает верхнюю крышку и видит там три трасформатора на плате, три переменных резистора и 7 светодиодов. Присылает нам гневное длиннющее письмо, суть которого сводится к следующему «За что я заплатил деньги. Оно того не стоит». Хотя прибор закрывает его потребности. Ну ему посоветовали открутит плату и перевернуть )))
2 Есть другой прибор. Не менее иновационный (аналогов в таком исполнении нет) Клиент его разбирает, тупо составляет BOM, берет с диджикея стоимость элементов и пишет статью-обзор с этими всеми калькуляциями и выводом «стоит этот прибор тех денег что он заплатил или нет». А другие клиенты/потенциальные клиенты тусуются под этой статьей, коментят и принимают решение «покупать или нет».
3 Есть третий прибор ))) Как раз из области IoT. В своем узком сегменте их вообще 2 в мире. Один у нас, второй у шведской компании. Подходы в построении были разные, поэтому о «конкуренции с более дешевым железом» речь не идет. На определенном этапе проводили исследование «почему хреново покупается» Один из пунктов был «дорого». Хотя стоит он дешевле 400$

И таких примеров могу привести кучу. Правда все примеры у меня из B2C.

Есть пример из той же лаборатории: ребята сделали девайс из готовых модулей за $40, а продают за $400. И покупают же, потому что других нету, и выгода для покупателя очевидна
 Ну если они их организациям продают (B2B) то вопросов конечно нету.
Они используют наше облако, соответственно есть наш интерес в продвижении (чем больше они продадут, тем больше нашего облака используют). И мы помогаем им продавать этот девайс, знакомим с нужными людьми в больших компаниях. Они взяли более дорогие чипы Intel, и теперь Intel тоже ищет для них клиентов, и таки находит. Используют для связи GSM модули с симкартами Киевстар и что ты думаешь, Киевстар тоже помогает продавать по своим каналам.

Я тоже сторонник отношений Win-Win )))

ребята сделали девайс из готовых модулей за $40, а продают за $400.
Если они при этом не создали никакой стоящей программы, то это называется словом «обман» (кстати, очень типичный случай для современных стартапов). Если же они написали что-то заслуживающее внимания — то продают они не железо, а некий программно-аппаратный комплекс, и если продукт так специфичен что серия даже в 1000 штук ему не светит — то и ладно, их дело (а если серия светит — то могли бы посчитать деньги и заработать на 20-30 тысяч больше за счет оптимального железа).
Если они при этом не создали никакой стоящей программы, то это называется словом «обман»

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

А по поводу

стоящей программы
и
что-то заслуживающее внимания
 — так можно написать код моргания светодиода, смонтировать все на маленькую платку и продавать на разных ивентах с логотипами организаторов, или в аэропорту, приезжим туристам в корпусе «I Love Kiev», или на собачий ошейник вешать, чтоб в темноте видно было, или в темном лесу световые маячки ставить, на велосипед в заднюю фару. И в какой-то момент ты становишся монополистом на локальном рынке продуктов, которые моргают и нещадно убываешь конкурентов демпингуя за счет объемов :) Чем не бизнес? Убогий, но зато работает :)))

Ценность программы (хотя я бы тут говорил про продукт) определяет спрос на нее.

А у стартапов нет проблем создать что-то качественное и полезное. Они потом не могут это монетизировать, и причин тут много: отсутствие цели и стратегии, незнание реальных проблем заказчиков, неумение донести value proposition, отсутствие связей и контактов и т.д.
Потому мы занимаемся тем, что у нас получается лучше (это я про страну в целом): развиваем техническую экспертизу и продаем ее зарубежным заказчикам, а не создаем собственные продукты и продаем их. Конечно, есть ряд весьма успешных ISV, но они выжили только потому, что не боялись рисковать и четко понимали кому и как продавать свое решение.

Но возвращаясь к IoT: прелесть в том, что вместе с железом, ты продаешь и сервис (подписку), а соответственно от каждого проданного устройства получаешь регулярный доход. Таким образом, закрывая узкую проблему в определенной индустрии ты обеспечиваешь себе постоянный доход, а не доход от разовой продажи железа.
А вот то, сколько стоит твой сервис, зависит от того, какие данные ты предоставляешь. И может оказаться, что обработанные данные и построенные на их основе прогнозы стоят дороже, чем проданное железо.

Обман есть, если человек, узнав что там внутри, чувствует себя обманутым. Например провод для включения супернавороченой аудиосистемы в розетку может стоить пару сотен долларов, хотя работает точно так же как и провод за доллар — но и не хуже. Тут есть обман? Я не знаю как ответить на этот вопрос объективно, но продавец этих проводов для меня — мошенник, и относиться к нему я буду соответственно.

Из разряда вредных советов. Вы этими ВМ производительность контроллера потратите на то, чтоб он их переваривал. Если потребуется быстрая реакция на внешнее событие, то будет облом. Но, если перекинуться десятком пакетов с данными с использованием аппаратных модулей DMA, шифрования — думаю, что может хватить.
А вот захват и обработку звука, например, уже будет сложно. Всё-таки эти МК не предназначены для подобных задач и писать под них лучше на С или С++. Тем более, что каждый уважающий себя производитель всё-же предоставляет какой-то слой драйверов периферии и библиотек. Многопоточность и сетевые протоколы могут обеспечить соотв. уровня ОСРВ (FreeRTOS, NuttX).
Фича данных камней — относительно малое потребление и гибкость конфигурирования, наличие большинства затребованных интерфейсов. Если хочется ленивого программирования на Java то лучше брать сразу взрослый ARM с линуксом или андроидом.
Сейчас, кстати, есть ещё вещи наподобии esp8266. Там можно обойтись lua или pyton почти без программирования))

Сейчас, кстати, есть ещё вещи наподобии esp8266

Крутая вещь. Из всех продуктов для IoT ее на первое место ставлю.

Тут как в анекдоте «Но! Есть один нюанс...» Вы уверены что она пройдет сертификацию CE и FCC? Кто-то устройства с Wi-Fi модулем под СE у нас в Укрчастотнадзоре сертифицировал? Проверяют там правильно на правильных Rohde&Schwarz-ах, в безэховой камере и т.д. (это тоже из личного опыта) Продавать устройства наверное ж захочется на рынках Европы и США. А FCC сейчас «закрутила гайки» в сертификационных лабах.

Проверяют там правильно на правильных Rohde&Schwarz-ах, в безэховой камере и т.д. (это тоже из личного опыта)

Неа, не уверены. Я тебе больше скажу, даже если ты покупаешь китайский GSM модуль, типа сертифицированный, то не факт, что он действительно прошел сертификацию.

Вот эти штуки построены на базе ESP8266, вроде как в Европе продаются.

К стати, Rohde&Schwarz наш партнер в лаборатории, даже мастеркласс на эту тему читали, как раз таки и рассказывали про их оборудование, кое что даже показывали.

Вот эти штуки построены на базе ESP8266, вроде как в Европе продаются.
Может они его просто как кит ввозят, не упоминая что это WI-Fi. Ну, типа как у нас любят делать.
— Сертификат на прибор есть?
— Есть.
— А что за сертификат?
— Электробезопастность (прибор при использовании током не ударит. И пишут на сайте огромными буквами «ПРИБОР СЕРТИФИЦИРОВАН»)

Может и так, хотя в Европе мне кажется такие фокусы не проходят.
Сам по себе чип прошел сертификацию FCC и CE

Из этой же статьи.
“This announcement does come with a few caveats: the chipset is certified, not the module. Each version of the module must be certified by itself, and there are versions that will never be certified by the FCC.”
и
“Yes, those modules already have an FCC logo on them, but you’re looking at something sold for under $5 in China, here.”

Вообщем, если кто-то их сертифицировал/сертифицирует в будущем в составе вашего IoT оборудования — дайте знать.

Насчёт NuttX, а реально кто-то использует её?
Я пару последних месяцев занимался портированием её на наш SoC по причине один из больших кастомеров хочет её. Но там куча ошибок в сетевом стеке и вообще он малофунционален, и в самой RTOS баги есть.

Как на счет Raspberry Pi? Какие особенности там?

В свободное время тыкаю палкой в него. на 2-3 поколение ставится Win10 IOT Core. Работают универсал аппы, как и почти все что можно, единственное что нужно собирать все под arm. Почти все датчики от ардуино работают(есть проблемы с температурными из-за ограничения самого шарпа). Из особенностей — не стоит верить офф документации. Если написано, что wifi донгл поддерживается, то это не значит что он поддерживается. asp.net 5 даже можно залить.

Ну и если кому-то интересны именно примеры того, что можно сделать www.hackster.io/microsoft

есть проблемы с температурными из-за ограничения самого шарпа
Это как? Си-шарп не разрешает работать с температурой?

температурный датчик аля dht11/dht22 выдают данные в микросекундных отрезках. шарп не особо дружит с таким форматом, как собственно и

Win10 IOT Core
далека от риалтайма. Можно использовать готовый код на плюсах, либо подключить ардуину которая поможет брать данные, либо пытаться брать образцы в миллисекундах.

Зачем вам в риалтайме измерять температуру? Мерять ее раз в секунду это с головой.

выдают данные в микросекундных отрезках.
я не понял совсем(( можете детальнее объяснить что это такое?

Там у датчика что-то типа далласовского 1-Wire. И у операционки не хватает реалтайма чтобы рулить ногодрыганьем из юзерспейса

Можна використати UART для реалізації 1-Wire:
www.maximintegrated.com/...pp-notes/index.mvp/id/214

Макс пишет что

Можно использовать готовый код на плюсах
Если этот код реально работает и успевает (как оно в Win10 IOT Core не знаю, а за линукс сомневаюсь. Скорость реакции которую мне на практике удавалось получать из юзерспейса — единицы миллисекунд. И это если на регистры порта мапиться и читать состояние оттуда. Если через файловую систему состояние пина читать — то еще медленнее), то можно просто написать сервис/демон (от операционки зависит) и с программы на шарпе к нему обращаться.

Поэтому я и указал, что есть проблемы. Обойти и найти другие решения можно что бы в итоге воспользоваться датчиком. А по объяснению Юрий еще раз перефразировал мои слова чуть ниже.

А, там все просто. Протокол обмена данными с датчиком предусматривает что передача 0 или 1 зависит от времени задержки между переходами логического уровня. Что-то типа меньше 50 микросекунд — 0, от 150 до 500 — 1, не помню деталей. Они, наивные, думали что 50 микросекунд уж точно любой микроконтроллер легко выдержит ))

подключить ардуину которая поможет брать данные
Вот это решение мне нравится больше всего. Круче только лампочка накаливания на андроиде.

Тут список поддерживаемого харда. Не забывайте, когда мы говорить про ОС от MS, то говорим и о драйверах, а не только о приложениях UWP на C#.
Давайте про Windows 10 IoT Core пообщаемся в след. статье. Как раз заканчиваю.

А тут github.com/...ms-iot/content/issues/780 ишью о том, что донгл с вашего списка не очень хочет работать =)

Ты ж про температурный датчик спрашивал :)

Я не спрашивал, а говорил =). И поддерживаемый хард как бы отличается от датчиков. Из коробки ничего нет. Разве не так? Сказали о списке харда, я и напомнил о дырках в нем.

Ну там датчики тоже есть в списке (в разделе Other Hardware Peripherals -> Sensors), в частности и 11й и 22й, со ссылками на примеры.

Ну и по вашей же ссылки универсал апп написаный на плюсах. Ни о какой поддержки на уровни системы у нас нет. Просто взять воткнуть и получать данные допустим из консоли у вас не получится. Если точнее, то простая реализация OneWire. Так можно говорить и о том, что вообще все поддерживается и приводить в пример github.com/ms-iot/samples

Распберри хорош как комп, который можно запаковать в любой корпус и не волноваться что перегреется. По расходу энергии выходит конечно не сахар, и odroid по всем параметрам кроме цены лучше, но в целом достаточно адекватно.
Распберри все еще не подходит для задач, где нужна микросекундная точность (плюс у микроконтроллеров есть прерывания по изменению состояния пина — что в некоторых случаях абсолютно незаменимо), но если держать там линукс — то вполне обеспечивает точность на уровне сотен микросекунд (при некоторых танцах с бубном можно и единицы микросекунд выдать, но это уже сильно сложнее). Ардуино+распберри на самом деле неплохая связка — ардуинка на низком уровне делает то, что не может гарантированно успеть распберри, и тут же отдает результаты по usb, не храня ничего в своей памяти. Хотя конечно stm32+odroid гораздо больше могут, но для того чтобы их использовать нужно уметь заметно больше.

Для каждой задачи свой инструмент. Кстати в Beaglebone (точнее у чипа AM33xx, который там используется) есть PRU (programmable real-time unit) на борту. В которые можно втиснуть код, необходимый для реалтайма. У малинки такого нету, к сожалению.

на жаль для цей

programmable real-time unit
не має апаратного таймера, без нього портувати туди RTOS неможливо. Але цей
PRU
це великий + такої системи.
не має апаратного таймера, без нього портувати туди RTOS неможливо.
Там же можно мапить АРМовские прерывания на внутренний контроллер прерываний.

цікаво, і це дозволить отримати 1mS стабільний тік? напрриклад для FreeRtos.

Без понятия, у am335x столько проблем, что его использование нигде кроме образовательных целей в BB Black я не представляю возможным.

Точнее сказать своё решение. При постановке задачи — уточнить цель. Затем подобрать оценочную плату для разработки ПО. После отладки изделия на оценочной плате — выбрать необходимый микроконтроллер с задействованными на отладке параметрами. Кстати пара вопросов автору статьи и знатокам:
1. Почему у микропроцессора(процессора) РОН — 4 штуки, а у микроконтроллера — 16/32?
2. Зачем ватчдог таймер у микроконтроллера?
3. Что такое «спящий режим»?
А все эти разговоры Arduino/Raspberry Pi — понты для приезжих.

Вопрос № 1 хорош )))) Мне кажется что в ситуации с процессорами и 4 шт РОН так сложилось исторически и их оставили для совместимости. У микроконтроллеров 16/32 шт обеспечивают большее быстродействие. Скорость доступа к РОН гораздо выше чем к памяти по шине. Ну и соответственно развитая система команд. Кстати у STM8 всего один РОН (Accumulator)

2 Чтобы была возможность избежать факапов с зависанием и повысить надежность устройства. Например микроконтроллер включил горелку в газовом котле и успешно завис, не успев ее выключить. В таком случае обыкновенный вачдог сбросит систему и горелка выключится (если конечно она переводится в состояние «выключено» при старте контроллера). Ну или вам нужно гарантировать что ваш код будет выполнятся определенное время («не быстрее чем ...» и «не медленнее чем...») В таком случае используется оконный вачдог. Если его сброс произошел раньше или позже (вне окна) — значит что-то пошло не так.

3 Спящий режим — режим понижения энергопотребления. Позволяет снизить энерго потребление микропроцессора путем остановки его внутренних блоков (периферия, ядро...)
Опять же как пример, предположим вы разрабатываете некий USB Bluetooth донгл для взаимодействия с вашими IoT девайсами (куда уж без них). В режиме USB Suspend он должен потреблять не более 500 uA (если я ничего не перепутал). Собственно в этом случае sleep mode и спасет отца русской демократии.

В режиме USB Suspend он должен потреблять не более 500 uA (если я ничего не перепутал). Собственно в этом случае sleep mode и спасет отца русской демократии.
Проще програмно отключить подачу питания на USB порт, оставить только hotplug detect.

Отключить не проблема, как его обратно включить, когда комп «проснется»?

Тем же самым битом, которым отключали :) Винда так и делает — у неё все USB порты в power-off режиме всегда, после просыпания, она включает питание, пробует обмен, если ничего нет, отлючает питание опять до события что-то всунули в USB порт.

Ясно. Мы на одну и ту же проблему с разных сторон смотрим. Я же не знаю в какое железо с какой операционкой мой донгл всунут. Может это какой-то Cortex-M будет с USB host на борту. Поэтому пришло USB Suspend — перевел в слип режим, понизив энергопотребление до требуемого

Почему у микропроцессора(процессора) РОН — 4 штуки, а у микроконтроллера — 16/32?

Wat.

AMD64 — 16, ARM — 15, ARM64 — 31, MIPS — 31, RISC-V — 31.

AMD64 — 16(?) - отбросьте индексные регистры, они не РОНы. А остальные ARM(RISK архитектура — микроконтроллер!!!)

А остальные ARM (RISK архитектура — микроконтроллер!!!)
Болшей чуши в жизни не слышал.

Standford’s RISC — MIPS
Berkeley’s RISC — SPARC
IBM’s RISC — PPC
Да в те времена те «микроконтроллеры» в комнате еле помещались. Это как раз эра суперкомпьютинга. Про рождение ARM даже в мыслях ни у кого не было.

Подписаться на комментарии