Comments 88
"Это процессор с частотой работы ядра 580 Гц, ..."
Он что, Линукс за 20 лет грузит?
http://elinux.org/Wifi_SD
Хотя, конечно, устройство в статье намного универсальнее
Несколько странные характеристики — что делать с 64 МБ RAM, если программы могут грузиться только из внутренней ROM, которой всего 16МБ?
Между первым и вторым как бы нет особой связи.
чего стоит бузер за $13, остальное тоже несоразмерно по цене с самим одноплатником
А они одноплатник ниже себестоимости продают, у него один только SoC стоит $2,5 в партии 1000 штук. Плюс память, флэшка, PCB, антенна, мелочёвка, собственно сборка — и получаем минимум $7-8 на выходе с фабрики.
Жаль, это значит что он будет также малодоступен как сейчас Raspberry Pi Zero
RPi — маркетинговый проект Broadcom и Farnell, им в некоторых случаях произвести мощный всплеск в прессе важнее, чем реально что-то продавать.
Onion (разработчик Omega2) — обычная коммерческая контора. Первая Omega у них продаётся за $20 и отличается только SoC — в ней QCA AR9331, который немного дороже и медленнее, чем MT7688AN из Omega2. Там с маржинальностью всё хорошо — себестоимость первой Омеги на выходе с фабрики при партиях в десятки тысяч штук будет в районе $8-9.
Вторую Омегу они продавать будут, но в расчёте на то, что как минимум Omega Dock (а в комплекте с ним получается уже $20) будет брать абсолютное большинство покупателей. Если это окажется не так — будут постоянно держать в продаже бандл Omega2 + Dock, а на одиночную Omega2 вешать статус «Sold out».
Соответственно, жёстко фитиль прикрутят только тем, кто вдруг захочет оптовую партию Omega2 без плат расширения.
Самое дешёвое, что вы найдёте такого класса — это LinkIt Smart 7688 за $12, и это — собственный модуль Mediatek, т.е. маркетинговый проект, в рамках которого продукт продаётся по себестоимости.
P.S. Мы разработкой и производством подобных модулей занимаемся.
Всё же это проект Дэвида Бребена.
http://venturebeat.com/2016/07/07/how-computing-legend-david-braben-schemed-to-create-elite-dangerous-and-raspberry-pi/
Один из основателей проекта работал в Broadcom разработчиком чипов. Посему с выбором поставщика процессоров проблем не было.
Те же процессоры RPi Foundation изначально получала по минимальной возможной цене, которую посторонним заказчикам давали только при очень больших объёмах.
И отсюда же растут естественные ограничения продаж RPi — официально больше 10 штук в руки не отпускается.
Считайте это благотворительностью. Это же касается и цен. «Свои люди», как-никак.
Они поддержали проект, но не являлись его основателями.
Broadcom никакой прямой маркетинговой пользы с этого нет. Они чипы не людям продают.
Считайте это благотворительностью. Это же касается и цен. «Свои люди», как-никак
У вас прекрасные представления о работе крупных корпораций. «Чуваки! Это же Дэвид, из инженерного отдела! Он клёвый парень, давайте дадим ему миллион баксов! Да наплевать на KPI и маржинальность, это же Дэвид! Мария, сделайте презентацию про Дэвида, на еженедьном совещании покажем директору департамента!».
Я вас сильно расстрою, если скажу, что даже благотворительностью обычно занимается Corporate Marketing Team?
Broadcom никакой прямой маркетинговой пользы с этого нет. Они чипы не людям продают
Вы, вероятно, имели в виду «они эти чипы не продают в b2c», потому что не людям — это значит марсианам или роботам. А я вас уверяю, что в b2b решения о покупке чипов Broadcom принимают вполне себе люди.
Но вообще, вы мне много нового о корпоративном маркетинге рассказали.
Тут, кстати, показателен пример Odroid-W — дноплатного ПК, который был по ТТХ полным аналогом RPi, но за счет того, что интерфейсы были не распаяны, имел совсем крошечные размеры в связи с чем в DIY был серьезным конкурентом для малины(стоил 30$ и до кучи имел всякие полезности, тапа выведенного разъема под аккумулятор)… как итог, Broadcom добились закрытия этого проекта. Вот и как после такого не говорить, что они всеми силами проталкивают свою "карманную" малинку.
Эта штука выглядит очень интересно. При хорошей поддержке она будет как минимум так же популярна как ESP.
Но ESP-микроконтроллер, с реалтаймом, ШИМом и возможностью быстро "дрыгать ногами".
Я могу назвать такие минусы: кривое SDK и процессор черт знает какой архитектуры (Expressif или как там его), что затрудняет под него разработку.
А по техническим характеристикам ESP8266
Процессор по умолчанию работает на частоте 80 МГц, которая может доходить до 160МГц, чип имеет около 80 Кб ОЗУ DRAM, и ~35Кб высокоскоростной IRAM.
дает фору даже многим STM32 (правда, существенно уступает им по GPIO и переферии).
В чем еще проигрывает?
Но главная проблема — в разработке, конечно: высокий порого вхождения. Не смотря на то, что и ардуино-подобная среда есть и Lua и C(++), железо просто не позволяет определенные вещи. Ты думаешь, что покупаешь ESP-01 с, как минимум, парой GPIO а де-факто все GPIO нужно куда-то подтянуть просто чтобы инициализировать проект. 3.3V тоже радости ардуинщику не добавят. Короче на каждом этапе от Blink до проектирования платы устройства ты попадаешь в грабли которые и в интернетах толком-то не описаны. В результате используешь ESP8266 как датчик, подключенный к ардуине (что тоже, вообще-то говоря, нетривиально).
Без GPIO и переферии микроконтроллера не получится в любом случае. Все остальное — вторично.
Хотел сделать настенные часы которые появляются в фильмах о Гарри Поттере: они показывают, кто и где находится. Частичная реализация включала бы мониторинг WiFi на предмет определенных MAC адресов: если телефон дома то и человек, по идее, дома. В какой-то мере получилось это сделать с Breakout board где разведены все пины ESP (серво подключал где-то в районе GPIO6). Но хотелось, конечно, с ESP-01. Забросил на том, что серво дергался, но крутиться не собирался. Возможно, level shifter 3.3->5 решил бы эту проблему, но его у меня не было. Пришлось бы подключать ардуину а это уже не так интересно.
Для распознавания образов тоже нужно много памяти…
RPi A+ по сравнению с этими поделками — просто гибрид швейцарского армейского ножа и автомата калашникова.
Малинка (А+) работала от телефонной зарядки 700 mA вместе с USB хабом, WiFi-свистком и прицепленной к ней ардуиной мега.
В моём случае к оранжевому pi pc подключен 4 rtl-sdr донгла, каждый потребляет в районе 250мА и нагружает одно ядро на 80%, всё питается от 5В 2А блока питания и работает 24/7. Активного охлаждения нет, к cpu приклеен небольшой радиатор, всё находится в пластиковом полугерметичном боксе на улице, сильнее всего греются донглы, температура проца примерно на 10 градусов выше температуры окружающей среды.
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
CPU max MHz: 1296.0000
CPU min MHz: 480.0000
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
CPU max MHz: 1200.0000
CPU min MHz: 480.0000
Но то, что малина греется значительно меньше — это точно. Но и стоит она подороже.
Куда хуже, что у меня на ней постоянно отваливается Wi-Fi (один-два раза в неделю) и так и не заработал модуль ядра fbttf (с дисплеем на базе ILI9325). На малине этих проблем нет. Разбираться мне не хочется, так как Allwinner H3 уже не производится и перспектив какого либо серьезного применения у этой платы нет. А время жалко.
Linkit 7688 оказался гораздо хуже AR9331 в этом плане. Тут, в принципе, тот же чип. Но может что-то лучше с антенной сделают?
Но спасибо за интересное устройство, в наше время информация ценнее железок.
Система совместима как с Arduino, так и с собственными картами расширения. По словам авторов устройства, с их помощью в систему можно добавлять ряд датчиков, дисплей, реле, ЦАП, АЦП и прочие типы функциональных модулей.
Примерно то же самое, что Arduino Yún, с Линуксом на борту, на Гиктаймсе и статья была 3 года назад: Arduino Yún — Wi-Fi и Ethernet при нём
Цена около 20$.
«среднему разработчику» стоит потратить пару недель и писать на С/С++ и голом железе, чем тащить линукс ради мигания лампочками или пары датчиков. Инерция мышления, нежелание изучить еще один ЯП, страх сложностей, так мне кажется.
Разумеется, в IoT есть задачи где линукс — хорошее подспорье, но куда чаще нужно делать что-то очень простое.
Писать под Линукс проще и быстрее, чем под голое железо прошивку.
Я понимаю, когда в промышленности так делают. Так каждые сэкономленные 10 центов превращаются в миллионы долларов при производстве большого тиража устройств.
Но дома?? Сэкономленные 500 рублей на полноценной железке дают на выходе десятки часов сэкономленного времени. И в DIY эти десятки часов никогда не окупятся…
Делал климат контроль на Black Swift/Unwired One.
Через 15 строчек скрипта у меня уже что-то работало.
Через 100 строчек — у меня был веб интерфейс и контроль температуры входящего воздуха и автоматическое слежение за чистотой воздуха в помещении.
На голой железке я за это время только wifi с веб сервером бы завел в стабильном режиме.
Не говоря уж о том, что обновление ПО я делаю по WiFi за минуту, без перезагрузки контроллера климат-контроля и без ризка окирпичивания. По сути со стороны обновление проявляется в остановке вентилятора на 5 секунд.
С голой железкой каждое обновление требовало бы подключение программатора, либо нетривиальной системы обновлений.
Ну и зачем это?
оно как минимум дешевле в разы
>>Писать под Линукс проще и быстрее, чем под голое железо прошивку.
Да ну? Что может быть проще чем скетч на Ардуино?
>>На голой железке я за это время только wifi с веб сервером бы завел в стабильном режиме.
К голым железкам тоже есть масса готовых библиотек.
>>С голой железкой каждое обновление требовало бы подключение программатора, либо нетривиальной системы обновлений.
Тут в целом соглашусь, хоть для той же ESP8266 уже есть готовые библиотеки для обновления по воздуху. Нужно дописать буквально 2-3 строчки кода, с какого сервера что грузить.
>>Ну и зачем это?
Цена, пожалуй, основной фактор. Можно хоть в каждую розетку и лампочку ESP8266 воткнуть.
И дело даже не в профессионализме хоббиста. Просто отсутствие комьюнити и отделов тестирования играет свою роль.
ТОт же самый Black Swift/Unwired One у меня уже год работает в режиме 24/7. Были сбои в работе и всегда они по моей вине. Железо и ОС еще ни разу не подвели.
Конечно ядро линукса несравнимо надежнее, но и оно не идеально. А на голом железе его просто нет:
Линукс-библиотеки-код_хоббиста vs библиотеки-код_хоббиста.
Или вы намекаете что хоббист на линуксе лучше код пишет чем хоббист без линукса?
ПРограммист пишущий на уровне пользователя при том же уровне квалификации сделает более надежное решение, чем написав тоже самое на уровне ядра.
Знаете я много лет занимался прикладным энтерпрайзным софтом. С++, Java, Delphi, 1C, PHP, SQL и т.п. и тоже считал программирование контроллеров тяжелой низкоуровневой задачей. Но стоит попробовать и понимаешь, что все то же самое. И отсутствие ОС вообще никак не мешает решать множество прикладных задач.
И более всего восхищает, что штуковина за пару баксов (или даже за пару десятков центов) со смешным объемом памяти позволят решать довольно сложные прикладные задачи. И тут же возникает вопрос — а зачем все эти мегагерцы, мегабайты и миллионы строк кода ядра, если нужно всего-то переключить логические уровни или отсчитать N тактов процессора. Или даже показать веб-страничку.
У простых разработок на микроконтроллерах есть ряд проблем: масштабируемость, совместимость и сложность кода.
И более всего восхищает, что штуковина за пару баксов (или даже за пару десятков центов) со смешным объемом памяти позволят решать довольно сложные прикладные задачи. И тут же возникает вопрос — а зачем все эти мегагерцы, мегабайты и миллионы строк кода ядра, если нужно всего-то переключить логические уровни или отсчитать N тактов процессора.
У микроконтроллера ОС имитируется аппаратно, N тактов отсчитывают таймеры тоже аппаратно, и вызывают аппаратное прерывание, ОС в обычном понимании им не нужна, даже вредна, так как увеличивает время реакции. Микроконтроллер логический уровень переключит за доли микросекунды. Под ОС нужно ждать, пока ядро разрешит.
Слишком маленький размер вынуждает подозревать, что урезали всё, что только можно, и даже то, чего бы я не хотел урезать. Та же мощность сигнала WiFi, может напряжение USB, или устройство очень болезненно переносит даже мельчайшие скачки напряжения, да что угодно.
Качество и полезность важнее размеров, когда речь идет уже о миллиметрах.
То есть, чтобы это был оптимальный вариант в соотношении размер / мощность. А цена, кстати, особой роли не играет, если она оправдана (с учетом себестоимости).
Вы наверное не сталкивались с программными глюками, сырой ОС криво прикрученной к SoC. Железо кажется мощным, параметры рвут конкурентов, но на практике ничего не работает. Победили несколько глюков и плата вообще исчезает из продажи, все разработки под эту плату пропадают впустую. Пока самым надежным решением является Raspberry Pi, стабильное ПО, поддерживаются старые платы, обновляется ПО, всё изначально сделано качественным. А вот клоны часто RPi гонят сырыми, чтобы успеть захватить рынок.
На Гиктаймсе подробно разбирали вопрос
На SPI там висит флэшка (как и во всех подобных чипсетах), так что сильно на него не надейтесь.
Флэшка занимает CS0, а CS1 свободен:
Во-первых, освободить SPI с CS1 в OpenWRT для какого-то стороннего устройства — задача сама по себе нетривиальная,
во-вторых, нормальная скорость у вас будет только в специфических условиях, а в общем случае будет либо ОС стоять и ждать, когда её к флэшке пустят, либо внешнее устройство — когда ОС SPI отпустит.
Говорите: <<ОС стоять и ждать, когда её к флэшке пустят>>?
Давайте посчитаем, имеет ли это смысл.
К примеру, в старом Onion Omega использовалась загрузочная флешка MX25L1605D, наверняка в Omega2 используется либо такая-же флешка, либо флешка со схожими характеристиками.
MX25L1605D была подключена через единственную линию MISO (см. https://github.com/OnionIoT/Onion-Hardware/raw/master/Schematics/Omega.pdf), по даташиту максимальная частота SCLK в таком режиме — 86 МГц.
То есть чтение можно осуществлять с производительностью не более ~ 8 МБ/с.
В реальной жизни, 86 МГц выставлять наверняка никто не будет и это цифру придётся разделить на 2, а то и на 4.
А вот я взял плату WRTnode2R-Mini (SoC MT7688AN, ближайшая родственница SoC MT7688K, что применяется в Omega2),
и прямо под родным OpenWRT
root@OpenWrt:~# uname -a
Linux OpenWrt 3.18.23 #35 Wed Nov 18 17:57:57 CST 2015 mips GNU/Linux
root@OpenWrt:~# dmesg | grep "SoC Type:\|CPU Clock"
[ 0.000000] SoC Type: MediaTek MT7688 ver:1 eco:2
[ 0.000000] CPU Clock: 575MHz
запустил тест производительности чтения из ОЗУ из пакета lmbench:
root@OpenWrt:~# bw_mem 16M rd
16.00 236.84
Тест чтения ОЗУ из блока 16 МБ выдаёт 236 МБ/с.
Имея на борту 64 МБ быстрого ОЗУ, едва не имеет смысла часто читать из медленного SPI flash 16 МБ.
А теперь, что касается записи.
В даташите на MX25L1605D говорится о Typical 100,000 erase/program cycles.
Если в MX25L1605D непрерывно писать хотя бы 100 КБ/с, сколько она продержится?
(впрочем, даже 100 КБ/с — это совсем немного при частоте SCLK в десятки МГц).
Так что, в грамотно построенной системе на MT76x8 загрузочная SPI flash устройству на CS1
особых хлопот не доставит.
Что же касается того, что "нормальная скорость у вас будет только в специфических условиях",
то понятие нормальная скорость полностью определяется решаемой задачей.
Кому-то и 1 Мбит/с может хватить.
Кроме того, надо обратить внимание на используемый контроллер SPI.
Вот, к примеру, в AR9331 контроллер таков, что работа с SPI, в общем случае, реализуется при помощи bit-bang — там никакой производительности не светит.
А в MT76x8 контроллер чуть получше, но тоже слабенький — при передаче/приёме байтики/слова надо
копировать процессором, DMA нет, см. функцию mt7621_spi_transfer_full_duplex()
в linux'ом драйвере.
P.S. Я не понял, что имеется в виду под "освободить SPI с CS1 в OpenWRT для какого-то стороннего устройства — задача сама по себе нетривиальная".
Зачем нужно это самое освобождение, разве "SPI с CS1 в OpenWRT" кто-то захватил?
Вот, к примеру, в AR9331 контроллер таков, что работа с SPI, в общем случае, реализуется при помощи bit-bang — там никакой производительности не светит.
В AR9331 контроллер SPI точно такой же.
Зачем нужно это самое освобождение, разве «SPI с CS1 в OpenWRT» кто-то захватил?
CS1, конечно, свободен как ветер, это обычный GPIO. А вот по SPI очень хочет общаться ядро системы.
В AR9331 контроллер SPI точно такой же.
Только производительность при работе с не-SPI-flash-с-3-байтовой-адресацией будет отличаться.
AFAIR, приблизительно на порядок.
Вот в mt7621_spi_transfer_full_duplex, чтобы отправить 32 бита на SPI надо сделать одну запись в регистр, а затем запустить передачу, дёрнув бит SPI_CTL_START
:
static int mt7621_spi_transfer_full_duplex(struct spi_master *master,
struct spi_message *m)
{
...
for (i = 0; i < len; i += 4)
mt7621_spi_write(rs, MT7621_SPI_DATA0 + i, data[i / 4]);
...
val = mt7621_spi_read(rs, MT7621_SPI_TRANS);
val |= SPI_CTL_START;
mt7621_spi_write(rs, MT7621_SPI_TRANS, val);
...
А в ath79_spi_txrx_mode0 придётся для отправки 32 битов каждый битик вручную выставить, да ещё вручную-же на SCLK фронт организовать:
static u32 ath79_spi_txrx_mode0(struct spi_device *spi, unsigned nsecs,
u32 word, u8 bits)
{
...
/* clock starts at inactive polarity */
for (word <<= (32 - bits); likely(bits); bits--) {
u32 out;
if (word & (1 << 31))
out = ioc | AR71XX_SPI_IOC_DO;
else
out = ioc & ~AR71XX_SPI_IOC_DO;
/* setup MSB (to slave) on trailing edge */
ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out);
ath79_spi_delay(sp, nsecs);
ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out | AR71XX_SPI_IOC_CLK);
ath79_spi_delay(sp, nsecs);
if (bits == 1)
ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, out);
word <<= 1;
}
...
А вот по SPI очень хочет общаться ядро системы.
И на сколько МБ/с обычно ядро системы хочет общаться по SPI?
Вот в mt7621_spi_transfer_full_duplex, чтобы отправить 32 бита на SPI надо сделать одну запись в регистр, а затем запустить передачу, дёрнув бит SPI_CTL_START:
Это всё к тезису о том, что в OpenWRT из коробки тупо не предусмотрена работа SPI с чем-то, кроме флэшки, какое отношение имеет?
У вас на AR9331 есть контроллер SPI и у него есть ножка CS1. И? Что дальше-то? В вашей изначальной версии наличие CS1 играло какую-то определяющую роль в устройстве вселенной.
Это всё к тезису о том, что в OpenWRT из коробки тупо не предусмотрена работа SPI с чем-то, кроме флэшки, какое отношение имеет?
Это всё к тезису <<В AR9331 контроллер SPI точно такой же>>.
Ваш исходный тезис выглядит так
На SPI там висит флэшка (как и во всех подобных чипсетах), так что сильно на него не надейтесь.
В этом тезисе нет упоминания ни OpenWrt в частности, ни какого либо программного обеспечения вообще. Можно подумать, что имеет место чисто аппаратная проблема целой группы чипсетов. Кстати, в исходном комментарии OpenWrt также не помянут.
Ваше замечание о том, что в OpenWrt
по SPI очень хочет общаться ядро системы
также вопросы вызывает:
- ядро системы, это надо понимать linux; только вот заставить ядро linux по своей инициативе много общаться по SPI это ещё умудриться надо. Как правило общение по SPI — результат запросов к ядро из userspace, а не личная инициатива ядра (напимер, busybox запустил dropbear, и надо этот dropbear загрузить в ОЗУ). Да и старнно было бы, если бы кто-то ещё кроме ядра организовывал обращения по SPI. Источник этих постояных обращений не ясен — кто же именно все эти постоянные обращения организует?
- то, что OpenWrt очень желает общаться (кстати, не указано с кем он желает общаться, но наверное, с SPI flash) — это факт, только без конкретных цифр, какая пропускная способность SPI потребна для OpenWrt от SPI, принять решение о подключении ещё одного устройства к SPI затруднительно. Так на сколько МБ/с обычно по SPI очень хочет общаться ядро системы?
Олег aka olartamonov, поделитесь текущим статусом проекта, доступностью и стоимостью устройств?
Мы сейчас делаем микрокомпьютер на MT7628AN, но он предназначен под конкретные проекты и вряд ли пойдёт в продажу сам по себе.
Если кому-то нужен именно Black Swift — их в офисе есть ещё довольно много, мы их используем для своих текущих нужд (гейтов сетей LoRa и 6LoWPAN, например).
Omega2: самый маленький в мире микрокомпьютер с Linux и Wi-Fi