электроника сәнгате
658 subscribers
656 photos
72 videos
56 files
328 links
сәлам дуслар! здесь схемотехника, pcb дизайн, микроконтроллеры, линукс встроенный и десктопный
Download Telegram
как вам трассировка?
❤‍🔥226
Forwarded from Интернет ненужных вещей (Oleg Artamonov)
У моего коллеги Саши Батина (техлида проекта Станции Стрит) — первая статья на Хабре.

https://habr.com/ru/companies/yandex/articles/925610/
🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
А вы знали, на что готовилось нападение?!

Альт Гном команда сбросила свою йадерку!

ALR! Это аур для альта! Приплыли. Хром можно поставить на раз два. Яндекс музыку на счёт три!

И для это нужен простой, современный набор команд в ваше чёрное окно

epmi 386131
alr repo add aides https://altlinux.space/aides-community/aides.git
alr in yandex-music


Ссылочек вам тут насыплю:
https://altlinux.space/aides-pkgs
https://altlinux.space/aides-community
https://t.iss.one/aides_space

📹 https://youtu.be/Pv-u9DShmWg и youtube версия для друга

С понедельником Вас!

@toxblh_linux
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1
Forwarded from dlinyj
Один мой хороший товарищ - @nikhotmsk, организует фестиваль самодельной электроники и компьютерного искусства в Рощино, Ленинградская область.

Восьмой по счету Undefined состоится 16 августа и будет идти два дня подряд. Никита активно ищет докладчиков, волонтеров и просто посетителей, кто желает отважиться на путешествие в живописный лес, навстречу 8-битным консолям, старинным компьютерным играм и демосцене!

Конечно, один анонс не сможет вместить всего, что может быть на Undefined, ведь это фестиваль всего на свете.

В своё время, я даже принимал участие в демосцене этого мероприятия и делал демку для "Микроши", которую можно увидеть тут.


Итак:

Телеграм-канал Никиты: @undefined_diy_fest

Сайт фестиваля Undefined: https://undefined.chaosconstructions.ru/ 👈

@dlinyj_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
признайтесь захотелось?
🤣7
Forwarded from Грокаем C++
​​Volatile
#опытным

Ключевое слово, которое не embedded С++ разработчик вряд ли когда-нибудь встречал в код. Сегодня мы поговорим, для чего оно используется.

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

int keyboard_press = 0;
size_t count_test = 0;

void some_function() {
while(keyboard_press == 0) {
count_test++;
}
// doing stuff
}


Что в ассемблере?

some_function():
mov eax, DWORD PTR keyboard_press[rip]
test eax, eax
jne .L1
.L3: // это кстати пустой бесконечный цикл, куда нельзя попасть и откуда нельзя выбраться
jmp .L3
.L1:
ret
count_test:
.zero 8
keyboard_press:
.zero 4


А где цикл? А где инкремент count_test?


На самом деле код собран с -О3 и компилятор просто выкинул цикл. Он не видит, что в данном коде где-то еще изменяется keyboard_press, поэтому разумно полагает, что мы написали бесконечный цикл без сайдэффектов, который вообще-то ub.

Но keyboard_press может изменяться, просто это никак не понятно по коду программы.

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

Однако компилятор точно видит тип переменной. И на него мы можем повлиять. Вот чтобы отучить компилятор от таких фокусов, нужно пометить keyboard_press ключевым словом volatile.

volatile int keyboard_press = 0;
size_t count_test = 0;

// same


Теперь ассемблер выглядит так:

some_function():
mov eax, DWORD PTR keyboard_press[rip]
test eax, eax
jne .L1
mov rax, QWORD PTR count_test[rip]
add rax, 1
.L3:
mov edx, DWORD PTR keyboard_press[rip]
mov rcx, rax
add rax, 1
test edx, edx
je .L3
mov QWORD PTR count_test[rip], rcx
.L1:
ret



Все, что делает volatile - все операции над переменной становятся видимыми спецэффектами и не могут быть оптимизированы компилятором. Ну и еще операции над volitile переменными не могут переупорядочиваться с другими видимыми спецэффектами в порядке кода программы.

Говорится ли здесь что-нибудь о потоках? Нет! Здесь говорится только об оптимизациях компилятора.

Поэтому использовать volatile можно только для обработки сигналов(хэндлер которых вызывается в том же прерванном потоке), либо в тех местах, где вы работаете с переменной строго в одном потоке.

Доступ к volatile переменным не атомарный + с их помощью нельзя делать синхронизацию неатомарных переменных между потоками, так как volitile не подразумевает барьеров памяти.

Именно из-за этих ограничений volatile используется в очень узком спектре задач работы с I/O. Во всех остальных случаях в С++ используются атомики.

Don't be optimized out. Stay cool.

#cppcore #multitasking #memory
10❤‍🔥2👍2
Forwarded from Идиот в компиках
9
Forwarded from Embedded Doka (Dmitry Murzinov)
В электронике тоже есть своё правило№34:
На любую вашу хотелку существует готовая реализация в интегральном исполнении (с) Doka 😅


Правило#35: если нет микросхемы, перепроверь еще раз у китайцев

Правило#36: всегда существует еще более тупая дешевая дискретная реализация нужного функционала из говна и палок на рассыпухе

Правило#37: рассыпуха под рукой всегда будет не той мощности, которая нужна в данный момент, поэтому TO-3 балласт будет соседствовать с 0201

Правило#38: Всегда существует реализация которая займет больше времени на разработку и отладку и вы выберете именно ее

Правило#39
: [Если вы не китаец, то] что бы вы не делали у китайцев этот же функционал реализован проще

@embedoka
13👍1
Forwarded from Segment@tion fault
This media is not supported in your browser
VIEW IN TELEGRAM
Это я, сижу жду когда ИИ меня наконец заменит на работе
😁15
RP2350 Hacking Challenge
Raspberry Pi неожиданно показали отличный пример системного подхода к безопасности: как грамотно организовать bug bounty и превратить это в удачный пиар.

Для начала их контроллер использовался в бейдже на прошлогоднем DEF CON 2024 — крупнейшей в мире конференции по информационной безопасности. Нужно отметить, что DEF CON ежегодно собирает около 30 000 человек — профессионалов и энтузиастов в сфере безопасности. Это сильно гиковская тусовка, собирающая лучших хакеров со всего мира.

Одним из традиционных развлечений конференции является конкурс с бейджем — стилизованной печатной платой. Для одних это способ социализации через взаимодействие бейджей, для других — возможность пореверсить и взломать устройство, что и является сутью конкурса. Для третьих — шанс попрограммировать на новой архитектуре. Взломать бейдж — всегда азартная и престижная часть DEF CON.

Во-вторых, Raspberry не просто предоставили свой контроллер для создания бейджа — они объявили отдельный приз за успешое извлечение ключа из OTP. За время конференции никто с задачей не справился, что вполне логично: большинство приехало пить пиво Club-Mate и развлекаться. Хардкорный хакинг обычно начинается уже после конференции, на воодушевленном подъеме. Поэтому Raspberry продлили конкурс до конца года и увеличили призовой фонд с $10 000 до $20 000. И это очень правильный шаг: если вас не взламывают (за предложенные деньги) — это не значит, что вас невозможно взломать, а скорее, что за эти деньги вы просто никому не нужны.

В итоге их поломали аж пять команд — и довольно разными способами. Все подробно описано в их блоге:
1️⃣ “Hazardous threes” – Aedan Cullen
2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree

По итогу:
- Raspberry, по цене полугодовой зарплаты одного сильного инженера, получили пять уникальных методов взлома своего чипа — и понимание, как защищаться в следующих ревизиях.
- Отлично прорекламировали конкурс и завлекли исследователей, по сути сунув чипы каждому посетителю прямо в карман
- Назначили достойные призы, не пожадничали и расширили фонд, не обидев ни одну команду — все участники реально проделали крутую работу
- По результатам открыто рассказали о взломах, дав отличный пиар и себе, и исследователям
- Для общественности это хороший набор примеров того, что следует учитывать при проектировании безопасных чипов

До этого момента я не воспринимал RP2350 как сколько-нибудь серьёзную платформу в плане безопасности. Сейчас смотрю кардинально иначе. Может быть, потому что не было никаких ожиданий — а в итоге увидел честный, правильный подход от команды, которая действительно старается.

Возможно, такой качественный результат конкурса получился потому, что подход Raspberry одновременно и привлёк сильных ресерчеров, и за счёт необходимости хоть немного вложиться (купить железо) — отсеял тех, кто обычно приходит на багбаунти ради копейки, заваливая платформы потоком низкосортных отчётов. Чаще всего — это выводы сканеров или, теперь уже, голый выхлоп ChatGPT без малейшей проверки.

Оставлю как напоминание, как грамотно организовать bug bounty.

Как поломали RP2350 ⬇️
🔥14👍31
1️⃣ “Hazardous threes” – Aedan Cullen
OTP хранит не только ключи, но и критические настройки (debug enable), а также модуль имеет логику-интерфейс (и стейт-машину), которая должна запоминать значение в условиях нестабильного питания. Вариация power-glitch, при которой при reset из OTP считывается неверное значение, и остаётся включённый JTAG. [github] [video]

2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
Недостаток API в BootROM. Команда которая называется REBOOT_TYPE_PC_SP и позволяет сделать soft-reset с нужным PC и SP, конечно же, только из доверенного загрузчика. С помощью fault injection во время команды к USB bootloader можно было изменить команду reboot API и вызвать soft-reset с PC в RAM, где уже был наш невирицированный код.

3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
Классика, fault injection на функции проверки подписи. RP2350 имеет voltage-glitch detector, поэтому гличили лазером.

4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
Ликнули OTP значения под SEM-микроскопом. Писал об этом выше.

5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree
Атакуем сам glitch detector. С помощью electromagnetic fault injection (EMFI) можно найти место на чипе, где гличинг не будет ловиться детектором.
🔥10
картинка для квартального отчета @wtfcontrolsengineer
7
Microchip анонсировали огромное количество 32-разрядных МК в низкоценовом сегменте. Даже не читая новостей, можно понять, что дела у компании идут не очень хорошо, и этим шагом компания пытается бороться за существование, взяв одну из долей рынка.

Я как разработчик продукцию Microchip для тех же ГБК не рассматривал, так как у их контроллеров, по крайней мере, раньше, был важнейший косяк — для прошивки нужен был специализированный программатор, который стоит очень дорого. Так, PICKIT-5 стоит на алиэкспрессе немилосердные 11кР, и это в то время, когда STM'овский "свисток" "нисколько не стоит", аналогичная ситуация для WCH, а для ESP32 программатор вовсе не нужен. Благо в последних контроллерах серии PIC32 я увидел JTAG, а значит, есть смутная надежда прошиваться через него.
5
Forwarded from Doque Embedded
Если бы "земля звездой" была компонентом
🔥9😁4
Аппарат точечной сварки FNIRSI SWM-10 по 🫳 людской 🫳 цене с доставкой из РФ.

https://market.yandex.ru/cc/7DvniA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥822
Forwarded from Embeddemy
Давно не писал, пора наверстывать. Запускаю рубрику #косяки — тут буду делиться ошибками, которые заставляли краснеть своей тупостью или вгоняли в стресс своей неочевидностью 🤦‍♂️

I Ситуация 😫
Спроектировал измеритель тока (80 Гц; ±2 А) на шунтe: дифф-усилитель + смещение (виртуальный ноль), чтобы мерить ток в обе стороны. Смещение дал делителем прямо на «плюс» ОУ. Получил плату. Ждал ровные 1,65 В (половина питания 3,3 В), а увидел колебания 1,65 ± 0,25 В в такт входному сигналу и насыщение (фото "BEFORE (1)"). Причина прозаична: не согласовал импеданс делителя с импедансом цепи обратной связи ОУ. Банально проморгал. Всегда моделируйте!

II Что такое согласование импедансов? ✍️
Упрощенно в схемах НЧ я люблю представлять импеданс как величину тока (I = V/Z), который способна выдать схема (выходной импеданс) или который схема потребляет (входной импеданс):
1) "Высокий" выходной импеданс → схема выдает "маленький" ток.
2) "Низкий" входной импеданс → схема потребляет "большой" ток.
(поместил в кавычки, так как разница познается в сравнении токов друг с другом)
Выбор соотношения этих токов и является согласованием (в аудио и НЧ). В RF/ВЧ схемотехнике при "согласовании" добиваются равенства импедансов.

III Как их согласовывать? 💔
1) Если нужно, чтобы смещение накладывалось на сигнал → источник смещения должен выдавать на порядки больший ток, чем цепь сигнала потреблять (мой случай и всегда при создании виртуальных земель)

2) Если нужно, чтобы смещение было невидимым для сигнала → возможный ток источника смещения должен быть на порядки меньше потребляемого сигналом тока (например при детектировании отрыва антенны/датчика от разъема)

IV Что в моем случае? 😮
Чтобы не возиться с токами в двух плечах, представим делитель как эквивалент Тевенина — идеальный источник + последовательное сопротивление:
Vэкв = 3,3 В / 2 = 1,65 В
Rэкв = Rtop∥Rbot = 5 кОм (получаем выходное сопротивление)
1) С делителя мы можем максимум забрать: I=1.65 В / 5 кОм = 330 µA
2) Пиковое потребление в цепи обратной связи: Iload=50 µA (пик положительной полуволны, смотрел в LTspice)
Запас по току ≈ 7 : 1. Для виртуальной земли этого мало — нужно хотя бы на порядок.
Чтобы получить наблюдаемые колебания ±0,25 B, надо помножить вых.сопротивление на пиковый ток U=Iload x Rэкв = 50 µA x 5 кОм = 0.25 В.

V Как обеспечить надежное смещение? 💡
1) Вариант "и так сойдет" - уменьшить ток обратной связи: увеличить на порядки сопротивления резисторов в цепи обратной связи (фото "AFTER (1)"). Амплитуда колебаний напряжения смещения уменьшится, но также уменьшится точность из-за шумов больших сопротивлений и увеличения входного тока смещения. Подойдет, если нет требований к точности и ограниченный бюджет с местом на плате.

2) Вариант оптимальный - поднять ток делителя: подать смещение с делителя не напрямую, а через ОУ-повторитель: его вход почти ничего не потребляет (мегаомы) и не окажет влияние на сигнал с делителя, а выход способен качать миллиамперы и состыкуется с токами в цепи обратной связи (фото "AFTER (2)"). Надежно, просто и сердито - рекомендую.

3) Вариант элитный - поднять ток схемы смещения: убрать делитель и поставить микросхему опорного напряжения с mA-классом выходного тока (фото "REF (3)"). Мой любимый вариант, если серия небольшая и есть бюджет на компоненты.

@embeddemy #косяки #импеданс #LTspice #измерение_тока
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10
Forwarded from Zenembed
Как-то совсем незаметно прошло очень важное изменение от ST. Теперь в CubeMX 6.15.0 есть полная поддержка CMake toolchain. То есть теперь при выборе Toolchain/IDE -> CMake ниже появится новый пункт Default Compiler/Linker, и там можно выбрать между GCC и Starm-Clang.

Для меня это крайне хорошая новость, т.к. теперь можно использовать всю инфраструктуру clang без необходимости думать о том, как подружить clangd со специфическими GCC-макросами. Наконец-то на контроллерах можно работать с единой экосистемой.

Я не успел ещё протестировать Starm-Clang, зато в старом конфиге (с GCC), что-то идет не по плану и обновление ломает генерацию кода. Если воспользоваться инструкцией из моей статьи, то код просто не будет собираться, с ошибками вроде:

error: implicit declaration of function ‘__LDREXW’
error: implicit declaration of function ‘__STREXW’


Это происходит потому, что в файле CMakeLists.txt не появилась очень нужная там строка:

# Include toolchain file
include("cmake/gcc-arm-none-eabi.cmake")


14 и 15 строки содержат два \n - как будто эти строки должны были появиться между ними, но что-то пошло не так.

В любом случае, проблему наверняка скоро поправят. А я думаю о том, чтобы написать третью статью из серии про работу с STM - в этот раз с акцентом на CMake toolchain и более глубокой настройкой clangd и clang-format.
🔥5
Интересная сборка АКБ LiFePO4 12V 30Ah

В ЮТ, оказывается, много скама по типу сборок на сотни ампер никелевой лентой 0.15мм, так что качественными мы делимся. Судя по части с тестированием, использовать для варки риса и чая...
❤‍🔥3🔥1
bbe0d11814a285b5765cb18c332c1d18.pdf
17.8 MB
Справочник инженера-технолога "Трафареты для SMT-монтажа" | Трафарез
🔥8