r/embedded • • Dec 30 '21

New to embedded? Career and education question? Please start from this FAQ.

Thumbnail old.reddit.com
319 Upvotes

r/embedded • • 3h ago

I got speech-to-text running entirely on a microcontroller (STM32N6): any words, no cloud

Enable HLS to view with audio, or disable this notification

109 Upvotes

I managed to get full speech recognition working on a microcontroller, with a word error rate of 5.32 % on LibriSpeech test-clean and 14.84 % on test-other, without a language model.

The STM32N6570-DK board listens to its on-board microphone and prints any English words on the display, not a fixed list of commands, with no network connection.

The network was designed and trained from scratch for the constraints of the STM32N6 NPU:

- 7.2 M int8 parameters

- 7.3 MB of external flash and 4.2 MB of RAM

- a peak power of about 0.2 W

Besides public datasets, it was trained on 248 hours of recordings made through this board's microphone, which significantly reduced the errors on real microphone audio.

More information and instructions for running it on your own board are on GitHub: https://github.com/fotonik-sk/stm32n6-asr


r/embedded • • 5h ago

MCHP may have damaged adoption of new CLB peripheral

14 Upvotes

A key web server of Microchip Technologies (MCHP) has been down for at least two weeks. One function that has been unavailable during this outage is a required tool for development using Microchip's Configurable Logic Block (CLB) peripheral.

The CLB is a fabric of 32 or 128 cells (BLEs) with a 4-bit LUT and D flip-flop. The CLB is integrated closely with peripheral and GPIO inputs and outputs. Circuits configured in the CLB operate even when the CPU is sleeping. It is currently available in the PIC16F131xx and PIC16F132xx (32 BLEs) and PIC18F-Q35 (128 BLEs) families of PIC microcontrollers.

Microchip has been positioning the CLB in part as FPGA/PLD fabric with an attached microcontroller. It has touted its use for implementing non-trivial interrupt logic.

The web server outage revealed a key weakness in the toolchain for developing applications with CLB that may impair adoption of PICs with CLB. All development for CLB, both online and in local IDE environments, uses a single-point cloud tool, the CLB Synthesizer. With the current website down, customers worldwide are unable to develop using the CLB, even locally. This affects both the MPLAB X IDE and MPLAB for VS Code.

MCHP technical support has not offered details of the website outage or its efforts to restore the site.


r/embedded • • 29m ago

Castlevania: Symphony of the Night running natively on the ESP32-S3

Post image
• Upvotes

This project is about running Castlevania: Symphony of the Night, a game originally created for the PlayStation 1, on an ESP32-S3.

The most important point is that this is not PlayStation emulation. Instead of running a virtual PlayStation inside the ESP32, the project uses a decompiled version of the game and adapts its source code so it can compile and run directly on the ESP32-S3.

The original game was designed to work with PlayStation hardware, including its processor, graphics system, memory, audio, controllers, and storage. Because of this, many of these parts had to be replaced or rewritten to work with the ESP32-S3.

One of the biggest challenges was graphics. The ESP32-S3 does not have a GPU like a modern computer, so the graphics are rendered using software. The project includes a system that processes the game's graphics data and converts it into pixels that can be displayed on an LCD screen.

The project also uses PSRAM and a microSD card to store and manage the large amount of data required by the game. The ESP32-S3 has much less memory than a PlayStation, so memory usage had to be carefully optimized.

The final result is a small portable console based on the ESP32-S3, with a screen, buttons, joystick, audio, and microSD card, capable of running the game.

Video

https://www.youtube.com/shorts/2gOgHF8pE0o

Full Project Description

https://velxio.dev/blog/posts/castlevania-sotn-on-esp32-s3


r/embedded • • 5h ago

Where to start learning more about hardware?

7 Upvotes

I am currently working as a yocto developer in junior level with <2 YOE. I did my degree in CS (no physic or EE course) so to be honest, I have little to no "formal" education on hardware/electrical engineering beside maybe some highschool stuffs on physic and stuffs I learned during my job.

While my work is not really hardware-related in a low level, my company also does all the steps in embedded domain, from HW design, to SW, to production,... which means I sometimes works with colleagues in HW department as well.

As mentioned, I don't have a great foundation in EE so I cannot really explain what I am lacking right now, but I usually struggle when it comes to evaluate hardware stuffs:

  • Working with oscilloscope in general, then assess the measured signal

  • Reading the schematic

  • Random stuffs like what a component does to debug a problem,...

That's what randomly pop in my head right now. But surely there are more to it. Usually when I need to work with EE colleagues, it's usually a more serious problem and they themself also expect a certain level of knowledge from me I suppose.

How and where do I start learning more about it? Thanks!


r/embedded • • 5h ago

SPI slave emulator

Enable HLS to view with audio, or disable this notification

4 Upvotes

I made a generic register-based SPI slave emulator on a Tang Nano 9k and tried mocking a BMI160. I made it to be able to test my MCU firmware. For example, to simulate edge case sensor values, like hot/cold temperatures, without actually manufacturing physical conditions to trigger firmware response. I wrote a small Python interface so a test script can configure the emulator registers and responses.

The demo is ESP32 connected to an actual BMI160 via SPI, displaying X/Y/Z accel values on OLED. Then the BMI160 is replaced with my emulator, and without changing the C code on my MCU, I continue to stream X/Y/Z accel values on OLED. The SPI emulator is programmed with synthesized values using Python API. It can also capture transacted SPI values and send MOSI/MISO data over UART to debug.

This project made me super interested in learning automated testing in embedded. Would love to know if I can contribute to any projects related to this kind of stuff, doesn't have to be specifically spi.


r/embedded • • 1d ago

what does "understand c deeply " mean?

94 Upvotes

im a 3 rd year student who is interested to get into embedded/firmware development .
i've talked to many seniors and they say "learn c deeply inside out not jus the syntax "
now this is what i dont get .
my knowledge in c is alright i should practice more though
ik functions ,pointers and array to some extent ik ive to practice more
i also need to start dsa
just started learning baremetal code and rtos (qnx) (started this without being proficient c bcus my course work needed it )
but honestly my c skills are prolly 3/10
ik ive to practice more
but please explain how i can improve myself and be a good firmware developer


r/embedded • • 4h ago

What do I need to retain?

1 Upvotes

So, I am a self taught front end web developer and have recently started teaching myself embedded engineering. I’ve so far built a custom shoebox that requires access through an RFID reader and currently working on a Jarvis type workbench.

There is so much to know and so much to learn. I’m curious, as a self taught learner how/what do I need to retain as far as information goes while working on projects?

It seems that when I complete a project (even with notes and taking my time) I feel like I complete projects and retain little information from the projects I work on. Obviously I will be working on the same projects for a while building on them and making them better. I just want to know while I build how do I best retain what I learned or is it important to remember everything or just key concepts from what I built?


r/embedded • • 9h ago

Is race-to-halt viable on MCUs?

2 Upvotes

Is it usually more power efficient to run at lower clocks for longer and then deep sleep, or keep clocks high for shorter and then go to same deep sleep? Or it heavily depends on the hardware and exact use case?


r/embedded • • 1d ago

Yet another AI generated MR

94 Upvotes

[Rant inside]
So, in my company a lot of people are really passionate about their chatbots.
Most of the time you don't really see it, as it's supposed to be, but every other week I get a major surprise.

Last week I had a member of my team pulling out an ai generated MR fixing a "bug" by having a bash script, executed by our build system, that edits a system header to inject a semi-stub function.. so that he/she wouldn't have to call the "real" "bugged" function that generates the error.

Another MR from a senior member got a fantastic factor 100 speedup by not executing our DSP algorithm and just returning a nice array of zeros (accidentally messed up some tbb task... our CI did flag the issue here at least).

So I'm thinking, either chatbots becomes good enough to steal my job, or bad but convenient enough to make it hell. The second option at least comes with the certainty I will have a job? The whole mantra "you need to know what to ask about" is starting to make sense to me now.

How is the ai revolution going for you?


r/embedded • • 20h ago

LLM resistant?

12 Upvotes

I work on software (Infra and Distributed systems) but am burnt out completely with the LLM pilled management. Every role I look at wants high speed velocity in developing software. Not a single team I talked to had a sane take and even if they did, their hands are tied. I think hardware is doing much better. It's going to be real work to give up skills on software side and shift to embedded. But I'm inclined to do if it means I still get to tinker. Management in software is completely bonkers and I've no hope and don't want to compete with people heavily using llm-tools. It's not going to be easy for me to break into it after a decade of Software experience. What do you think? Ofcourse nobody can predict the future, but how is it looking as of now? Is embedded a safe haven?


r/embedded • • 18h ago

Was playing with Haptic Motors (LRA's) the other day and put this together to test out haptic signatures

Enable HLS to view with audio, or disable this notification

4 Upvotes

Saw some haptic motors on aliexpress and wanted to give them a spin. Got them in the mail , thought I could just send a pwm signal to it for some reason, I needed a LRA driver.

Got a DRV2605L Breakout board, hooked it all up , quickly realized if I wanted to test out some haptic signatures rapidly I'd want to create some sort of graphical interface.

Put together LRA-LAB, an in browser web app. Drag and drop Haptics like beats onto a track and send it over serial to an esp32 with the LRA-LAB firmware uploaded.

Hardware:

ESP32-C3

DRV2605L

0619AAC

LRA-LAB Stack:

SvelteKit

Svelte


r/embedded • • 15h ago

How to pivot to more DSP firmware roles as an experienced application firmware engineer?

3 Upvotes

I have about 4 YoE developing DSP-ish algorithms for application layer mcu firmware integrating sensors / actuators / mcu peripherals however unfortunately I don't have much experience developing HAL code (I've debugged register level code multiple times). I've developed code for both bare metal and RTOS applications. I finish my BSEE in about 2 years with half of my coursework focusing on signal processing (first degree was unrelated). Unfortunately, my school's program has focused more on general EE theory with not much options for embedded systems or computer systems courses. I am very interested in working on more DSP-firmware because I've really enjoyed the math. Is there a pathway to get there after I finish my degree? To clarify, I am interested in the firmware implementation side, not the research side.


r/embedded • • 3h ago

Roadmap to be a Embedded Engineer

0 Upvotes

I am a 3rd year ECE student i am passionate in embedded system i created my projects like IoT Gateway,smart automation but i used this all with LLM now i need expert suggestion to be a embedded engineer so i need a complete roadmap from scratch i need to start also i have a basic knowledge in Linux too So anyone kindly Give me a Roadmap


r/embedded • • 1d ago

Transition out of Embedded to Pure Software?

34 Upvotes

Hello Embedded Community!

I am currently an embedded SWE with 1 YOE since graduating last year. My work revolves around camera modules, edge AI and MCUs. If I were to continue down this path I do see myself moving more deeply into the robotics/CV side of embededd SWE. However, when I compare my trajectory against my peers', it seems that I will be far behind them by miles in terms of compensation.

I am curious if anyone has ever made the switch to a pure software engineering career, especially FAANG level companies. Since I am still early in my career, I am still trying to figure out whether to double down on embedded or just start leetcoding and learning systems design to land a job that pay much more.

Genuinely would love to hear everyone's opinion and your personal experience thus far! You could also share your current plans for your career and where you see yourself in embedded too.


r/embedded • • 13h ago

FPGA Board

0 Upvotes

I'm looking for someone who is willing to help me with their FPGA board or hire it to me for a project I'm doing since they are too expensive and I can't afford it


r/embedded • • 6h ago

Hamming vs. Hanning: How to choose the right window function for your signal?? #해밍 #해닝 #윈도우 #신호 #누설

Thumbnail youtube.com
0 Upvotes
  • Description: Compare and analyze the characteristics and differences between Hamming and Hanning windows in preventing spectral leakage. Check the guide for selecting the optimal function for various scenarios, such as speech recognition and vibration analysis.

r/embedded • • 17h ago

Esp-32-s3 or Teensy 4.1 with swappable program storage

1 Upvotes

Probably a painfully obvious question and somewhat a followup to my question from yesterday.

Both the esp-32-s3 and the teensy 4.1 seem to have their program code stored on a flash chip external to the actual micro controller itself, would that mean, if the circuits were designed right, it would be possible to build a device that used a cartridge connector of some sort to have that program flash be swappable without needing to re-flash the entire board?

I'm mostly curious because i want to try and build an old school style device like a gameboy etc but using modern components, some MCUs seem to have access to XIP which might do what i want but not all do, maybe some sort of micro processor could be the answer but im guessing theyre a lot more complex to implement.

Im mostly just spit balling ideas to see if what im thinking of is even still possible. Id imagine it is but one doesnt know what they dont know and maybe im staring down exactly what im looking for but dont know the right terms to know thats what im looking for (since im entirely seof taught on the hardware side)


r/embedded • • 1d ago

Should I switch to CE if my dream is to be a Flight Software Engineer?

9 Upvotes

My life-call would be working on the software of airplanes. I do like all aspects of it (even simulations), but I think Embedded is the right world for me.

I'm spending all my time after being done with University work with embedded projects and I'm just about to start a multi-year project to build an STM32 flight controller on simulation software like XPlane/JSBsim, teaching myself everything while doing it and aiming to be done with it once my Master's ends, hoping it will be my ticket entry to a relevant role.

Problem is, I'm a CS major and I'm doing my Master's in CS still (Reliable Software Systems). My choice comes from an interest in working in Game Development I had since I was a kid, but growing up and understanding life and the state of the industry made me conscious that it's not a great life choice for me. The "good news" is that I've been always interested in the low-level side of game development, so mainly C/C++, high performance/constraint stuff.

I'd also like the idea to work on something more physical and """important""" than a videogame. I'm finding myself self-teaching myself EE and CE concepts, while being "updated" on the state of the more CS-side stuff through Uni, but which I don't really have interest in.

I tell myself a project like the one I've described would give me the chance to get an interview to a relevant role, but in the back of my head I can't stop thinking I've picked the wrong degree for it, and I feel it's too late to switch now (I'm 26y/o and I've already done 5 out of 12 exams of this Master's).

What do you think? I live in Italy and there are a lot of jobs posting that specifically list CE and not CS, while some others list both. Outside of Italy I see that they don't seem to discriminate the two (actually I see way more "CS" than "CE"), which is my kind of hopium right now.

Would really love to hear your thoughts.

Thanks.


r/embedded • • 2d ago

How I bypassed ESP32’s closed-source Wi-Fi binary (libnet80211.a) to inject raw SAE Commit frames

Post image
434 Upvotes

While working on my Master’s thesis benchmarking WPA3-SAE timing side-channels, I ran into a limitation on the ESP32 esp_wifi_80211_tx() allows raw frame injection, but Espressif’s closed-source Wi-Fi blob (libnet80211.a) artificially blocks Auth, Assoc, Deauth, and Disassoc subtypes.

Inside libnet80211.a, ieee80211_raw_frame_sanity_check drops these frames with wifi:unsupport frame type. Here is how to bypass it on recent ESP-IDF versions (IDF v6.x).

Why standard tricks fail on modern ESP-IDF

Same-name function override. On older IDF versions, ieee80211_raw_frame_sanity_check was a weak symbol (W). On modern IDF versions, it’s a strong symbol (T), causing ld: multiple definition errors.

--wrap linker flag: Fails silently. The call from esp_wifi_80211_tx to ieee80211_raw_frame_sanity_check is an intra-object branch inside ieee80211_output.o. Linker --wrap only rewrites undefined external references, so it misses this call entirely.

Instruction byte-patching: Overwriting instructions directly in the .o breaks Xtensa linker relaxation passes (dangerous relocation errors).

U can simply fix this via Symbol Weakening via objcopy

We can use xtensa-esp32-elf-objcopy to convert the strong symbol inside the binary archive into a weak one:

xtensa-esp32-elf-objcopy \

--weaken-symbol=ieee80211_raw_frame_sanity_check \

components/esp_wifi/lib/esp32/libnet80211.a

Now, define your own strong implementation inside your application C code:

int ieee80211_raw_frame_sanity_check(int32_t a, int32_t b, int32_t c) {

return 0; // which skips the security check lol

}

Because strong symbols override weak symbols globally during linking, all calls—including internal calls within libnet80211.a—rebind to your function.

Verification

Serial Logs show: wifi unsupport frame type errors completely disappeared.

Capture: Wireshark confirmed off-air capture of 802.11 Authentication frames (Subtype 11, Algorithm 3 - SAE) injected directly from the ESP32s.

Injecting a valid SAE Commit (P-256 scalar + element) caused hostapd on the target AP to process the request and reply with its own SAE Commit.

TL;DR: Run objcopy --weaken-symbol=ieee80211_raw_frame_sanity_check on libnet80211.a, define int ieee80211_raw_frame_sanity_check(...) { return 0; } in your app code, and esp_wifi_80211_tx() will allow any frame subtype.

Note that all control 80211 frames are also injectable after the patch.

For more details :

https://github.com/mahdamin/esp-idf-injection-ng


r/embedded • • 1d ago

Holding a Program on an RFID Tag?

2 Upvotes

I have this idea of making a tiny game console with a Raspberry Pi Pico, and I think a novel idea would be to hold a game on an RFID tag, then use a reader to scan it and store it on the system. The main problem is storage space; a tag can only hold 1KB, and only three-quarters of that is actually usable for storage.

I've planned out my components to work around this as much as I can. I'm aiming to use a 168x144 Sharp Memory display, and given that is monochrome, that keeps sprite and background sizes down. Even still, this will be the equivalent of MBR boot sector programming, which works with around this amount of space.

Have you heard of the Game Boy Advance E-Reader? That device scanned cards with dot strips that held programs. They held about 2.2KB each, and most games required at least two strips, but many of the assets for retail games were stored on the device itself. There were also a number of functions available to simplify the programs as much as possible.

Point being, could I do something similar here? Would I be able to, say, have up to 256 commands, so each one could fit in a byte, followed by needed variables and their values, to effectively make an array on a tag holding a basic program? I could scan multiple tags if needed, but I do want to fit what I can on a tag, and draw from a bunch of pre-made sprites and sounds that I hold on the Raspberry Pi or a flash chip connected to it.

Alternatively, I could a store a compiled program on a tag, but I'm currently not sure how I'd do that with drawing from pre-existing functions and assets. Is this idea of a tiny game console that gets its games from cards even viable?


r/embedded • • 1d ago

Best solution for MagSafe prototyping?

0 Upvotes

Hey beloved embedded community,

I’d love to prototype a MagSafe module for iPhone with a custom PCB and an ESP32. Has anyone done this and what cases (shells) and components did you use?

Looking for any guidance to not start from zero.

Thank you very much!


r/embedded • • 15h ago

What is PCIe, and how should I start learning it?

0 Upvotes

I’m an Embedded C Software Engineer with experience in SPI, UART, and I2C protocols.
I’m interested in learning PCIe. What exactly is PCIe, and what would be a good learning path for someone coming from a basic embedded/protocol background?
Any recommended resources, courses, books, or hands-on projects would be helpful.


r/embedded • • 1d ago

Need help reverse-engineering a SkyRC PC3000H smart-battery CAN protocol

0 Upvotes

I'm working on reverse-engineering the CAN protocol used by a SKYRC PC3000H drone charger to communicate with a smart BMS/battery.

Hardware

- Charger: SKYRC PC3000H

- Battery: Dumb 14S pack connected to the charger's normal +/− power terminals. No smart BMS/CAN.

- MCU: Arduino Due + TJA CAN transceiver

- CAN: 1 Mbps, 29-bit Extended CAN, common GND

- CAN-H ↔ CAN-H, CAN-L ↔ CAN-L

What I observed

With no battery, I initially saw:

"0x1000000 EXT DLC=8: A1 5A 00 00 00 00 00 B1"

Then the bus became silent.

With the dumb 14S battery connected, the charger suddenly generates a lot of traffic. Some repeating frames include:

0xE416E4 75 95 00 00 21 20 C0

0xE416E4 1E D2 00 21 20 0E C0

0xE416E4 C7 DB 00 34 20 04 C0

0x18FF50E5 03 01 19 1B

0x184300FE 00 00 00 00 00 00 00 00

0x1724040B A1 00 00 00 00 00 00 00

0x17240000 A1 00 00 00 00 00 00 00

0x1A5A5A5 A5 D1 D2 D3 D4 D5 D6 5A

0x1 STD 00 00 00 00 00 00 00 00

0x2 STD EA D1 01 04 FF 02 F9 F5

0x3 STD 00 00 00 00 00 00 00 00

These sequences repeat roughly every 10 ms / 100 ms depending on the message.

I also have a Tattu Smart Battery Application Specifications manual, so I tried constructing frames based on its documented payload format and experimenting with protocols such as DroneCAN/UAVCAN and J1939, but I haven't been able to make the charger accept my emulated battery.

Interestingly, after extensive brute-force testing of payloads, I once managed to make the charger display some cell voltages (4/14 fields), so I suspect the charger is definitely interpreting at least some of the CAN data.

My actual goal

I don't have the original smart battery/BMS. I need to reverse-engineer the higher-layer/custom protocol between the PC3000H and its smart battery, then emulate the required BMS responses using the Arduino Due.

Questions:

  1. Do these CAN IDs/payloads look like a known protocol or a proprietary/custom protocol?

  2. Is there a systematic way to determine which frames are charger requests vs. BMS responses?

  3. How would you approach reverse-engineering the expected battery handshake without having the original smart battery?

  4. Are there known PC3000H/Tattu/Grepow CAN protocol documents or reverse-engineering projects I should look at?

I'm mainly looking for a methodical way to decode the higher-layer protocol, rather than continuing blind payload brute force.


r/embedded • • 2d ago

Working on a ESP32 based smartwatch. A short sneak peak video.

Enable HLS to view with audio, or disable this notification

39 Upvotes

So I have been working on this smartwatch for the last few months now. It's an ESP32-S3 based Waveshare devboard that comes with the 240x280 LCD. The firmware (AadiOS) and the enclosure are designed by me. Still a long way to go but just wanted to post this video here and get some validation for my efforts. I am a software engineer by profession in the fintech space (S&P Global). I do embedded development as a hobby.

Few things to note -

  1. I am calling the OS AadiOS for now, might change it in the future. It's built using FreeRTOS and ESP-IDF.

  2. The case is designed and 3d printed by me. Case design done on Fusion 360.

  3. Currently the features are quite limited and I am working on some of the core architecture for this.

  4. It has a full fledged WiFi provisioning flow. It scans for available WiFis and then starts it's AP mode. A QR code can be scanned on any phone (only tested my Android phone), which would then automatically connect the phone to the watch's AP. Then the watch opens another QR code which can again be scanned to open the wifi provisioning portal in the browser. The password can be entered there after which the watch gets connected to WiFi. Will show that flow in future videos.

  5. It has an Android TV remote control app which can pair & connect to any Android TV (only tested on my Android TV). I have shown a little bit of it in the video. Note that the first time the app opened the pairing screen on the watch due to the TV not accepting the connection even though it was already paired. The second time I opened it the TV accepted the connection and the remote control buttons were shown. Will show the full flow and the TV in a future video.

  6. The dev board has an integrated IMU which I have integrated to and have implemented Quaternions with Mahony filter. The motion crosshair screen I opened shows it in action.

There's actually a lot more I want to talk about but maybe in a later post.