Pull to refresh

Comments 88

"Это процессор с частотой работы ядра 580 Гц, ..."
Он что, Линукс за 20 лет грузит?
Не, аффтар просто так вот взял и на шесть порядков ошибся, поэтому убедительно приглашается глотать йаду.
Видимо опечатка. На kikstarter значится 580 MHz.
<a href="">Ссылка на страницу устройства на кикстартере.

… и естественно 580 MHz
Самые маленькие в мире микрокомпьютеры с Linux и Wi-Fi это всё-таки Wi-Fi SD
http://elinux.org/Wifi_SD
Хотя, конечно, устройство в статье намного универсальнее
Ктобы статью про них здесь бы написал…
Нужно было так видимо:
Самые маленькие в мире _модульные_ микрокомпьютеры с Linux и Wi-Fi
Несколько странные характеристики — что делать с 64 МБ RAM, если программы могут грузиться только из внутренней ROM, которой всего 16МБ? Тут могла бы помочь USB-флешка, но не понятно может ли встроенный USB быть хостом? Но цена радует, можно использовать даже просто как WiFi адаптер. А вот цены на модули расширения совсем не радуют — чего стоит бузер за $13, остальное тоже несоразмерно по цене с самим одноплатником.
Несколько странные характеристики — что делать с 64 МБ RAM, если программы могут грузиться только из внутренней ROM, которой всего 16МБ?


Между первым и вторым как бы нет особой связи.

чего стоит бузер за $13, остальное тоже несоразмерно по цене с самим одноплатником


А они одноплатник ниже себестоимости продают, у него один только SoC стоит $2,5 в партии 1000 штук. Плюс память, флэшка, PCB, антенна, мелочёвка, собственно сборка — и получаем минимум $7-8 на выходе с фабрики.
> А они одноплатник ниже себестоимости продают, у него один только SoC стоит $2,5 в партии 1000 штук
Жаль, это значит что он будет также малодоступен как сейчас 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 без плат расширения.
UFO just landed and posted this here
Кого удешевить? Медиатековский чип? У меня для вас плохая новость: Медиатек — это уже китайцы.
UFO just landed and posted this here
Обвязка чипа — это DDR2, SPI flash и горка мелочёвка. Мелочёвка стоит меньше $1, а вот память — увы. Чип-антенна, разъём UFL, 4-слойная PCB с дорожками не толще 0,1/0,1 — тоже не совсем копейки. Аналогов чипа нет (ну т.е. у того же Медиатека есть совсем убогий RT5350, он чуть дешевле, но с него сейчас все уходят, уж больно он уныл).

Самое дешёвое, что вы найдёте такого класса — это LinkIt Smart 7688 за $12, и это — собственный модуль Mediatek, т.е. маркетинговый проект, в рамках которого продукт продаётся по себестоимости.

P.S. Мы разработкой и производством подобных модулей занимаемся.
У вас пока нет планов по розничной продаже Unwired One?
>> RPi — маркетинговый проект Broadcom и Farnell

Всё же это проект Дэвида Бребена.
http://venturebeat.com/2016/07/07/how-computing-legend-david-braben-schemed-to-create-elite-dangerous-and-raspberry-pi/
Один из основателей проекта работал в Broadcom разработчиком чипов. Посему с выбором поставщика процессоров проблем не было.
Если бы туда не было занесено довольно много денег из бюджета Broadcom — Дэвид Бребен до сих пор бы в своём гараже на стопку опытных экземпляров медитировал бы вместо рассказов о том, что «мы хотели показать, как можно такой крутой компьютер сделать так дёшево» (в скобках отмечу, что так и не показали: ничего больше на рынке с таким соотношением цена/качество нет).

Те же процессоры RPi Foundation изначально получала по минимальной возможной цене, которую посторонним заказчикам давали только при очень больших объёмах.

И отсюда же растут естественные ограничения продаж RPi — официально больше 10 штук в руки не отпускается.
>> Если бы туда не было занесено довольно много денег из бюджета Broadcom.
Считайте это благотворительностью. Это же касается и цен. «Свои люди», как-никак.
Они поддержали проект, но не являлись его основателями.
Broadcom никакой прямой маркетинговой пользы с этого нет. Они чипы не людям продают.
Считайте это благотворительностью. Это же касается и цен. «Свои люди», как-никак


У вас прекрасные представления о работе крупных корпораций. «Чуваки! Это же Дэвид, из инженерного отдела! Он клёвый парень, давайте дадим ему миллион баксов! Да наплевать на KPI и маржинальность, это же Дэвид! Мария, сделайте презентацию про Дэвида, на еженедьном совещании покажем директору департамента!».

Я вас сильно расстрою, если скажу, что даже благотворительностью обычно занимается Corporate Marketing Team?

Broadcom никакой прямой маркетинговой пользы с этого нет. Они чипы не людям продают


Вы, вероятно, имели в виду «они эти чипы не продают в b2c», потому что не людям — это значит марсианам или роботам. А я вас уверяю, что в b2b решения о покупке чипов Broadcom принимают вполне себе люди.

Но вообще, вы мне много нового о корпоративном маркетинге рассказали.

Тут, кстати, показателен пример Odroid-W — дноплатного ПК, который был по ТТХ полным аналогом RPi, но за счет того, что интерфейсы были не распаяны, имел совсем крошечные размеры в связи с чем в DIY был серьезным конкурентом для малины(стоил 30$ и до кучи имел всякие полезности, тапа выведенного разъема под аккумулятор)… как итог, Broadcom добились закрытия этого проекта. Вот и как после такого не говорить, что они всеми силами проталкивают свою "карманную" малинку.

Я вам так скажу, я пытался смастерить проект на ESP8266 и это была сплошная боль. Так и не закончил из-за сломанного API (и из-за того, что это микроконтроллер а не компьютер). Очень сложно писать программы выходящие за рамки примеров считал температуру — залил на сервер. Вот серво работает, WiFi тоже, а вместе — нет.

Эта штука выглядит очень интересно. При хорошей поддержке она будет как минимум так же популярна как ESP.

Но ESP-микроконтроллер, с реалтаймом, ШИМом и возможностью быстро "дрыгать ногами".

Проблема скорее даже в том, что ESP это «WiFi датчик». Как микроконтроллер ESP проигрывает Arduino во многом.

Я могу назвать такие минусы: кривое SDK и процессор черт знает какой архитектуры (Expressif или как там его), что затрудняет под него разработку.
А по техническим характеристикам ESP8266


Процессор по умолчанию работает на частоте 80 МГц, которая может доходить до 160МГц, чип имеет около 80 Кб ОЗУ DRAM, и ~35Кб высокоскоростной IRAM.

дает фору даже многим STM32 (правда, существенно уступает им по GPIO и переферии).


В чем еще проигрывает?

Процессор там чтобы шифрование тянуть. Любая другая ресурсоемкая задача там уткнется в регулярные callbackи и нехватку памяти. Т.е., грубо говоря, DOS на нем не запустишь, в дум не поиграешь. Многопоточности, соответственно, тоже нет. Ноги дергаются тоже с меньшей частотой, так что я не знаю где реально эти 80Mhz можно использовать. Может быть простенькая графика?

Но главная проблема — в разработке, конечно: высокий порого вхождения. Не смотря на то, что и ардуино-подобная среда есть и Lua и C(++), железо просто не позволяет определенные вещи. Ты думаешь, что покупаешь ESP-01 с, как минимум, парой GPIO а де-факто все GPIO нужно куда-то подтянуть просто чтобы инициализировать проект. 3.3V тоже радости ардуинщику не добавят. Короче на каждом этапе от Blink до проектирования платы устройства ты попадаешь в грабли которые и в интернетах толком-то не описаны. В результате используешь ESP8266 как датчик, подключенный к ардуине (что тоже, вообще-то говоря, нетривиально).

Без GPIO и переферии микроконтроллера не получится в любом случае. Все остальное — вторично.
А что вы такое делали на ESP что не получилось, если не секрет? У меня в целом положительный опыт, хотя API конечно кривое, тут согласен.
Хе. Отдаю задаром.

Хотел сделать настенные часы которые появляются в фильмах о Гарри Поттере: они показывают, кто и где находится. Частичная реализация включала бы мониторинг WiFi на предмет определенных MAC адресов: если телефон дома то и человек, по идее, дома. В какой-то мере получилось это сделать с Breakout board где разведены все пины ESP (серво подключал где-то в районе GPIO6). Но хотелось, конечно, с ESP-01. Забросил на том, что серво дергался, но крутиться не собирался. Возможно, level shifter 3.3->5 решил бы эту проблему, но его у меня не было. Пришлось бы подключать ардуину а это уже не так интересно.
Но SoC там как в первой Омеге, древний атерос 9331. И можно расширить память например до 16М, 64М. А wr703n (wr702n) еще меньше, при том же самом железе.
Одна маленькая программа размером в сотню-другую байт может запросто задействовать гигабайты RAM… Поэтому как-то очень странно сравнивать оперативную память и память программ. Это в классических ПК размыли грань между этими видами памяти и то лишь ради быстродействия и гибкости.
Но какие IoT-задачи генерируют 32Мб данных и имеют потребность в их кратковременном хранении? По-моему такая модель использования памяти не типична для IoT, и этот микрокомпьютер стал бы существенно полезнее, если бы у него было бы хотя бы 32Мб Flash-памяти.
Так у них есть версия Omega2 Plus с RAM 128 МБ и флэшем 32 МБ за $9.
Это издержки. Память нужна не на IOT-задачи а на работу операционной системы. Кроме того, для элементарной организации потокового вещания(онлайн-радиостанция домашнего масштаба) тоже внезапно нужна память.
Для распознавания образов тоже нужно много памяти…
UFO just landed and posted this here
Мне C.H.I.P отписался, что отправили железку свою https://getchip.com/pages/chip
UFO just landed and posted this here
Бесплатная доставка была.
Мне пришёл, доставка по-моему 7$ (может и 6, уже не помню), но если брать оптом, то дешевле. Кто-то не из РФ на форуме писал, что взял 5 штук с доставкой в 7$, что в общем-то недорого.
У меня их две (Orange Pi One), разочарован, линукс на этом поделии работает криво и косо, половина периферии недоступна, энергопотребление как у чайника, греется будь здоров…

RPi A+ по сравнению с этими поделками — просто гибрид швейцарского армейского ножа и автомата калашникова.
UFO just landed and posted this here
Требования к блоку питания посмотрите. Для всевозможных Alwinner как правило минимум 2А, PINE64 даже при таком токе работает только пока графический акселератор не используется, желательно иметь БП 3А.

Малинка (А+) работала от телефонной зарядки 700 mA вместе с USB хабом, WiFi-свистком и прицепленной к ней ардуиной мега.
Так вы оверклокинг уберите, и не будет он греться как утюг. По крайней мере способ работает с Orange Pi PC. Кроме того, оранж нормально стартует от блок питания на 1А, если не планируется подключать прожорливую периферию. Ну а если 4 usb порта занять устройствами с потреблением по 500мА каждый, то конечно же нужно взять БП не меньше, чем на 3А, это вроде логично.

В моём случае к оранжевому pi pc подключен 4 rtl-sdr донгла, каждый потребляет в районе 250мА и нагружает одно ядро на 80%, всё питается от 5В 2А блока питания и работает 24/7. Активного охлаждения нет, к cpu приклеен небольшой радиатор, всё находится в пластиковом полугерметичном боксе на улице, сильнее всего греются донглы, температура проца примерно на 10 градусов выше температуры окружающей среды.
Я температуру мерял при загрузке 4 ядер на 100% при времени более 1 минуты, получалось около 110 градусов с радиатором. Idle — 60 градусов без радиатора, 45 — с радиатором. Возможно, оно и будет так работать сутками, не проверял.
Хм, я же написал, каждый донгл грузит по ядру на 80%, 4/4 ядер загружено постоянно на 70-90%. Если ваш оранж под рукой, покажите вывод lscpu. В моём случае он выглядит так:
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
$ lscpu
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
Однако, ожидал увидеть 1600мГц при таком нагреве, ибо примерно так у меня и было при первом включении с официальным образом системы. После возврата частоты на 1200мГц проблем с аномальным нагревом больше не наблюдал. Максимально фиксировал температуру проца 60 градусов в очень жаркий день на несколько минут, и это при почти полной загрузке.

image

Но то, что малина греется значительно меньше — это точно. Но и стоит она подороже.
Там сейчас вообще никакой нагрузки нет, приклеен довольно большой радиатор и температура 47 градусов. Вторая «апельсина» не подключена, но на ней было то же самое. Возможно, это особенность именно One или даже этой партии. На тематическом форуме что то писали про неправильные регуляторы напряжения, которые устанавливали на One (возможно, не на все экземпляры). Мне было не настолько интересно разбираться, у меня много разных отладочных плат и конкретно на этой свет клином не сошелся, могу выбросить в любой момент.

Куда хуже, что у меня на ней постоянно отваливается Wi-Fi (один-два раза в неделю) и так и не заработал модуль ядра fbttf (с дисплеем на базе ILI9325). На малине этих проблем нет. Разбираться мне не хочется, так как Allwinner H3 уже не производится и перспектив какого либо серьезного применения у этой платы нет. А время жалко.
Интересно посмотреть что там с мощностью WiFi и поддержкой этого WiFi в OpenWRT.
Linkit 7688 оказался гораздо хуже AR9331 в этом плане. Тут, в принципе, тот же чип. Но может что-то лучше с антенной сделают?
Зачем дразнить интересным устройством, но не предоставлять его (за 5 баксов то) для обзоров реализаций?
Но спасибо за интересное устройство, в наше время информация ценнее железок.
Электронное устройство, которое не должно формировать и сохранять электрическое или магнитное поле, можно сделать сколь угодно малым. Тут другая проблема — припаятьсяподключиться.
Система совместима как с Arduino, так и с собственными картами расширения. По словам авторов устройства, с их помощью в систему можно добавлять ряд датчиков, дисплей, реле, ЦАП, АЦП и прочие типы функциональных модулей.


Примерно то же самое, что Arduino Yún, с Линуксом на борту, на Гиктаймсе и статья была 3 года назад: Arduino Yún — Wi-Fi и Ethernet при нём

Цена около 20$.
низкая стоимость исключительно за счет дорогой обвязки. Все карты расширения $15 или больше стоят.
Штука актуальна только по 9$, брать их модули расширения по 15$ — это смешно. Не удержался, «взял» штучку (пусть валяется), если ещё выяснится, что доставка +20$ — нафиг это всё.
Они пользуются дешевой почтой. Не знаю как куда, в Европу должно обойтись в 5 баксов с трекингом.
Объясните мне, пожалуйста, зачем для IoT 580MHz и полноценная ОС на борту? Я прекрасно понимаю, что так писать гораздо удобнее среднему разработчику, чем на RTOS или голых прерываниях, но IoT вроде придерживается идеологии «одна железка — 1-2 простые функции», откуда сложные и тяжёлые задачи?
>>так писать гораздо удобнее среднему разработчику, чем на RTOS или голых прерываниях
«среднему разработчику» стоит потратить пару недель и писать на С/С++ и голом железе, чем тащить линукс ради мигания лампочками или пары датчиков. Инерция мышления, нежелание изучить еще один ЯП, страх сложностей, так мне кажется.
Разумеется, в IoT есть задачи где линукс — хорошее подспорье, но куда чаще нужно делать что-то очень простое.
Зачем в IoT голое железо?
Писать под Линукс проще и быстрее, чем под голое железо прошивку.
Я понимаю, когда в промышленности так делают. Так каждые сэкономленные 10 центов превращаются в миллионы долларов при производстве большого тиража устройств.
Но дома?? Сэкономленные 500 рублей на полноценной железке дают на выходе десятки часов сэкономленного времени. И в DIY эти десятки часов никогда не окупятся…

Делал климат контроль на Black Swift/Unwired One.
Через 15 строчек скрипта у меня уже что-то работало.
Через 100 строчек — у меня был веб интерфейс и контроль температуры входящего воздуха и автоматическое слежение за чистотой воздуха в помещении.
На голой железке я за это время только wifi с веб сервером бы завел в стабильном режиме.

Не говоря уж о том, что обновление ПО я делаю по WiFi за минуту, без перезагрузки контроллера климат-контроля и без ризка окирпичивания. По сути со стороны обновление проявляется в остановке вентилятора на 5 секунд.
С голой железкой каждое обновление требовало бы подключение программатора, либо нетривиальной системы обновлений.

Ну и зачем это?
>> Зачем в IoT голое железо?
оно как минимум дешевле в разы

>>Писать под Линукс проще и быстрее, чем под голое железо прошивку.
Да ну? Что может быть проще чем скетч на Ардуино?

>>На голой железке я за это время только wifi с веб сервером бы завел в стабильном режиме.
К голым железкам тоже есть масса готовых библиотек.

>>С голой железкой каждое обновление требовало бы подключение программатора, либо нетривиальной системы обновлений.
Тут в целом соглашусь, хоть для той же ESP8266 уже есть готовые библиотеки для обновления по воздуху. Нужно дописать буквально 2-3 строчки кода, с какого сервера что грузить.

>>Ну и зачем это?
Цена, пожалуй, основной фактор. Можно хоть в каждую розетку и лампочку ESP8266 воткнуть.
И еще, пожалуй, надежность. Ядро Линукс — это тоже звено системы с неабсолютной надежностью. На голом железе его нет.
При прочих равных ядро линукса куда надежнее хоббиста, который дома что-то ковыряет.
И дело даже не в профессионализме хоббиста. Просто отсутствие комьюнити и отделов тестирования играет свою роль.

ТОт же самый Black Swift/Unwired One у меня уже год работает в режиме 24/7. Были сбои в работе и всегда они по моей вине. Железо и ОС еще ни разу не подвели.
А при чем тут код хоббиста? Он у хоббиста и на линуксе условно такой же надежный как у хоббиста без линукса.
Конечно ядро линукса несравнимо надежнее, но и оно не идеально. А на голом железе его просто нет:
Линукс-библиотеки-код_хоббиста vs библиотеки-код_хоббиста.

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

Знаете я много лет занимался прикладным энтерпрайзным софтом. С++, Java, Delphi, 1C, PHP, SQL и т.п. и тоже считал программирование контроллеров тяжелой низкоуровневой задачей. Но стоит попробовать и понимаешь, что все то же самое. И отсутствие ОС вообще никак не мешает решать множество прикладных задач.

И более всего восхищает, что штуковина за пару баксов (или даже за пару десятков центов) со смешным объемом памяти позволят решать довольно сложные прикладные задачи. И тут же возникает вопрос — а зачем все эти мегагерцы, мегабайты и миллионы строк кода ядра, если нужно всего-то переключить логические уровни или отсчитать N тактов процессора. Или даже показать веб-страничку.
А потом, когда соберёшься собрать воедино сотню несложных устройств оказывается что у них разный протокол по разным причинам, но в основном «так было проще писать программу».
У простых разработок на микроконтроллерах есть ряд проблем: масштабируемость, совместимость и сложность кода.
А разве Линукс автоматически позволит обойти все эти грабли? Это уже от разработчика зависит.
Когда есть опора, обходить грабли гораздо легче. По крайней мере они будут не на всех уровнях.
И более всего восхищает, что штуковина за пару баксов (или даже за пару десятков центов) со смешным объемом памяти позволят решать довольно сложные прикладные задачи. И тут же возникает вопрос — а зачем все эти мегагерцы, мегабайты и миллионы строк кода ядра, если нужно всего-то переключить логические уровни или отсчитать N тактов процессора.


У микроконтроллера ОС имитируется аппаратно, N тактов отсчитывают таймеры тоже аппаратно, и вызывают аппаратное прерывание, ОС в обычном понимании им не нужна, даже вредна, так как увеличивает время реакции. Микроконтроллер логический уровень переключит за доли микросекунды. Под ОС нужно ждать, пока ядро разрешит.
А если у вас на каком-нибудь прерывании по таймеру работает маленький планировщик задач (одна задача опрашивает клавиатуру, другая — датчики, третья — шлет данные куда-нибудь из буфера) и еще есть какая-нибудь библиотека для облегчения работы с переферией (даже самая простая, скажем, запись нескольких регистров вы обернули в функцию с красивым понятным названием), можно ли считать это ОС? Мне кажется, что да, и тогда получается, что для более-менее сложной задачи операционная система у вас появится сама собой, как только вы решите отделить «системную» логику от «прикладной».
Хотелось бы устройство не самое маленькое, а самое оптимальное. Пусть оно будет размером не с вишенку, а с яблоко, но с внушительной частотой и размером памяти. То есть, чтобы это был оптимальный вариант в соотношении размер / мощность. А цена, кстати, особой роли не играет, если она оправдана (с учетом себестоимости).

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

Качество и полезность важнее размеров, когда речь идет уже о миллиметрах.
Под ваши требования попадают десятки давно уже выпускаемых SoC, на любой вкус и кошелек.
Не поверишь, полноценный трансивер WiFi занимает меньше квадратного сантиметра на плате, а СВЧ-коммутатор и усилитель на +20дбм — деталька размером с SOT-23. Тут больше вопросов как тепло отводить, где-то полватта будет выделяться при максимальной активности… А если ограничить активность на передачу, может и нагрева даже не будет при сохранении хорошей «пробивной» способности.
То есть, чтобы это был оптимальный вариант в соотношении размер / мощность. А цена, кстати, особой роли не играет, если она оправдана (с учетом себестоимости).

Вы наверное не сталкивались с программными глюками, сырой ОС криво прикрученной к SoC. Железо кажется мощным, параметры рвут конкурентов, но на практике ничего не работает. Победили несколько глюков и плата вообще исчезает из продажи, все разработки под эту плату пропадают впустую. Пока самым надежным решением является Raspberry Pi, стабильное ПО, поддерживаются старые платы, обновляется ПО, всё изначально сделано качественным. А вот клоны часто RPi гонят сырыми, чтобы успеть захватить рынок.

На Гиктаймсе подробно разбирали вопрос
А мне нравится идея заложенная в onion omega. С одной стороны это маленький plug in модуль который можно ставить на плату собственной разработки с необходимой переферией. С другой стороны для начала разработки достаточно подключить модуль и dock к usb, и дальше по мере надобности подключать переферию. Это уменьшит порог вхождения и увеличит популярность платы среди тех кто не очень дружит с паяльником. И с интерфейсами у второй омеги намного лучше чем у первой, можно подключить микроконтроллер на второй uart и консноль при этом останется, и SPI быстрый аппаратный есть.
На SPI там висит флэшка (как и во всех подобных чипсетах), так что сильно на него не надейтесь.
На SPI там висит флэшка (как и во всех подобных чипсетах), так что сильно на него не надейтесь.

Флэшка занимает CS0, а CS1 свободен:


Это вам не сильно поможет. Во-первых, освободить SPI с CS1 в OpenWRT для какого-то стороннего устройства — задача сама по себе нетривиальная, во-вторых, нормальная скорость у вас будет только в специфических условиях, а в общем случае будет либо ОС стоять и ждать, когда её к флэшке пустят, либо внешнее устройство — когда ОС SPI отпустит.
Во-первых, освободить 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 очень хочет общаться ядро системы?
Странно, что никто не вспомнил про Domino Core. Выпускается и продаётся уже год как.

image
Еще есть российский аналог на OpenWRT (400MHz, ROM 16Mb, RAM 64Mb) — Unwired One (он же Black Swift).

Олег aka olartamonov, поделитесь текущим статусом проекта, доступностью и стоимостью устройств?
В оригинальном виде проект сейчас не развивается — это экономически не очень эффективно, специфическое устройство на конкурентом рынке (особенно с учётом наличия на нём таких героев демпинга, как Omega).

Мы сейчас делаем микрокомпьютер на MT7628AN, но он предназначен под конкретные проекты и вряд ли пойдёт в продажу сам по себе.

Если кому-то нужен именно Black Swift — их в офисе есть ещё довольно много, мы их используем для своих текущих нужд (гейтов сетей LoRa и 6LoWPAN, например).
Sign up to leave a comment.