Category: it

ESP32 wired ethernet promiscuous mode

Господа и дамы, получится ли встроенный esp32-ethernet порт (не WiFi!!!) запустить в "promiscuous mode", чтобы сделать на этом чуде что-то похожее на wireshark?

Если кто-то считает, что да, может он тогда кинуть в меня примером кода для приема пакета в этом режиме? Мне нужно получить все пакеты, независимо от целевого IP.

Ожидаемая средняя скорость приема данных - около 100кбайт/с.

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

Как правильно эмулировать EEPROM во флеш STM32?

Обычно занимают лишь одну страницу флеша, что кажется расточительным, особенно когда прошивка занимает 8кБ, а флеша 128кБ! Инициализирую так:
typedef struct{
	user_conf all_stored;
	char struct_end[0] __attribute__ ((aligned(FLASH_BLOCK_SIZE))); // this pointer provides size of structure multiple of page size
} flash_storage;

#define USERCONF_INITIALIZER  { \
	.userconf_sz = sizeof(user_conf)	\
    ,.id = "identifier" \
	,.dist_min = LIDAR_MIN_DIST			\
	,.dist_max = LIDAR_MAX_DIST			\
	}

static const flash_storage Flash_Storage __attribute__ ((aligned(FLASH_BLOCK_SIZE))) = {
	.all_stored = USERCONF_INITIALIZER
};

static const user_conf *Flash_Data = &Flash_Storage.all_stored;

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

Ткните, пожалуйста, в примеры кода, где это реализуется правильно. Может, надо в линкере какую-то секцию указать и эту переменную с нужным смещением из линкера размещать?

P.S. Если кто знает ответ, можно себе увеличить карму на SO.

Schematics: The Heroin Of Electronics Design

Доклад "Schematics: The Heroin Of Electronics Design" от Dave Vandenbout на KiCon 2019 заслуживает внимания. Вероятно не все видили этот пост от ramlamyammambam. Использовать Питон для создания принципиальной схемы с помощью утилиты skidl это свежо.



stm32f4, выдача пачки импульсов

что-то я туплю.

есть проектик, пока что макет на stm32f4discovery. потом будет тот же камень ,но с более вменяемым обвязом. точнее, пачка похожих проектиков.
и вот понадобилось мне странное - выдать заданное количество импульсов заданной длительности с заданными интервалами.
точнее, импульсы можно тупо по 1мкс фиксированно, их число влезает в 15 бит а число заведомо влезает в 30 бит.

на данный момент плотно подсел на opencm3, что в комплекте с "-flto всегда и везде, и в либах и в проекте" даёт хороший запас и по производительности и по памяти.

а сегодня-и-впятницу внезапно застрял. протратил уже 17ч рабочего времени на вроде бы ерунду. явно где-то совсем детская ошибка (типа обращения к незатактованной гпио ножке).

но, вдруг кто уже делал такое - поделитесь кодом под "opencm" или с прямой работой с регистрами, но только не в ублюдочной парадигме заполнения простыней-структур и передаче их библиотечным суперфункциям.

нужно вроде бы несложное -- выдать пачку "тактирующих" импульсов, тупо одинаковых, на 1-4 ноги. импульс, например, 1мкс, пауза - например от 1 до 8к мкс, число импульсов в пачке задается менее чем 30-битным, а скорее даже менее чем 15 битным числом.

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

nRF51822 разработки под вопрос

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

Возьмем простой пример. Хочется сделать на нем простой бекон :) Чтобы отдавал в advertising свой ID и состояние парочки цифровых и парочки аналоговых входов.

Имеется: Комп на винде. Редактор кода (свой, да хоть тот же FAR Manager или NPP), никаких особых IDE не хочется. Китайский ST-Link.
Надо: Что-то поставить, что-то настрoить, где-то подмазать, чтобы поехало.

Находил вроде бы подробные описания, довольно многочисленные, но они базировались на старых SDK, а с тех пор там что-то изменилось и теперь ничего друг к другу не подходит.

Подскажете?

ПС: И да, хочется все бесплатно :)

MQTT/UDP

Привет.

В своих делах по умному дому захотел обеспечить все компоненты системы унифицированным транспортом. Поглядел на MQTT и остался почти доволен. Но - у меня возникли сомнения насчёт запихивания его в PLC, контроллеры на базе atmega8 и вообще, брокер показался мне избыточной сущностью, не нужной для задачи в целом.

И я спроектировал и реализовал самый простой и маленький IoT протокол на планете - MQTT/UDP. Требования к окружению у этого протокола фантастически минимальны - нужно уметь хотя бы только посылать только UDP пакеты. :)

Репозиторий тут - https://github.com/dzavalishin/mqtt_udp

Русский вводный текст тут - https://github.com/dzavalishin/mqtt_udp/blob/master/README.ru.md

Очевидные схемы применения (англ, сорри) тут - https://github.com/dzavalishin/mqtt_udp/blob/master/dox/Topologies.md

Написал :

  • реализации на Си, Яве, Питоне

  • скетч для ардуино с UDP/IP стеком, только на отправку пока

  • простой гейт-коннектор к классическому MQTT (обменивается апдейтами в обе стороны и глушит зацикливания)

  • программу для мониторинга данных в канале (бродкаст же, всё всем видно, мониторить легко)

Пока не осилил версию для Овен ПЛК, всё же этот их ST language - феерическое г на палке.

Буду рад, если кто-то применит в своих проектах. Повторюсь - проще протокола на планете, кажется, нет. :)

USB Mass Storage и несколько LUN [РЕШЕНО]

Проблема больше программная, нежели аппаратная, но мало ли.

Граждане, кто разбирался с USB MSC дальше и глубже, нежели чем просто запуск неких примеров, поставляемых вместе с библиотеками от вендора (типа CubeMX от STMicro)? Я не могу разрешить проблему с поддержкой нескольких накопителей на одном устройстве. Само устройство работает, первый LUN в винде работает и все они вместе работают в линуксе. Но я хочу, чтобы и в винде тоже были бы видны все накопители... может, нужен какой-то трюк, подсунуть ей что-то, выставить бит какой-нибудь хитрый в каком-нибудь поле какого-то дескриптора? Я не понимаю, что именно не нравится винде. Краткое описание злоключений Upd решил сам, а как именно -- описано здесь.

Решено [проброс усб]

вопрос немного не в тему. подскажите где еще стОит обсуждать такое.

есть машина с виндоус, на ней виртуалка вмварь/виртуалбокс, в виртуалке линукс. из виртуалки надо работать с электронной платой на стм32 (stlink) подключаемой через USB.

собственно вопрос, при каких условиях и как можно пробросить такое устройство из винды в виртуальный линух?

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

ps: также рассмотрю вариант с неким сервером-программатором на винде, с которым можно по сети из пакетного процесса без УИ связаться по сети с удаленной машины.

upd: всем спасибо, вопрос решился заменой усб-кабеля.
кстати, ардуйня (usb2com) через 'плохой' кабель (родной, короткий, синий) работала прекрасно.

Изготовление трафаретов для печатных плат на бюджетном плоттере

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



Способов довольно много, перечислю основные вкратце:

1)Вырезать вручную из пленки острым ножом.
2)Изготовить трафарет из металла травлением, используя технологию аналогичную технологии изготовления печатных плат (ЛУТ, фоторезист).
3)Заказать лазерную резку из полиамидной или другой пленки в специализированной или не очень фирме.
4)Заказать лазерную резку из листа нержавеющей стали у нас или в Китае.
5)Знаю прецеденты изготовления трафаретов на специализированном фрезере.

Еще один хороший способCollapse )