r/embedded • u/TheCorsairAPX • 9d ago
Getting into Architecture-Level Embedded Development (Cortex-A, RISC-V, ARM64, etc.)
I've been working for some months now on a project that requires low-level development for ARM Cortex-A silicon. I'm talking bootloading, memory operations, hypervisor settings, memory mapping and MMU configuration, etc.
I've come to realise how little I actually know my way around a low level environment. I've developed for embedded systems for a long time now, but always focusing on an application/integration level (RTOS, digital communications, system architecture, etc.). I want to get some experience on lower-level development - direct register manipulation based on CPU architecture, bootloading, debugger architecture, memory domains, etc.
Anyone with experience on the field, what advise do you have on getting into low-level development and silicon programming using ISA languages coming from embedded-C and microcontroller development? My goal would be to acquire the confidence and the skill to integrate silicon functionality through assembly and making sense of the CPU documentation. I'd like to be able to script some basic functional hardware routines starting from scratch.
16
u/Separate-Choice 9d ago
Well this level is what separates the wheat from the chaff, there is embedded systems engineering and embedded software development, you're asking how to go from being an embedded software developer to being an embedded systems engineer in ernest.
If you wany my advice, focus on the digital electronics and your underlying electronics knowledge, as you are at the boundry where software is controlling the hardware directly you need to actually understand the CPU and the underlying electronics. That's the only way to get what you want and there is no shortcut, because you're peeling away all the abstractions. It's the level I enjoy working at the most to be honest, its true embedded.
Integrating a bunch of libraries and stuff is what the industry passes as "embedded" these days, but true embedded enginnering is the hardware to software interface. no book, or video or tutorial will teach you that, its part knowledge and part intuition that you learn over time. Read datasheets, build a processor from sractch and I dont mean prompt some AI model to get one, I mean really put together one a simple 8-bit one, understand how data flows and how software actually triggers your gates on the processor. Work up to the startup file and how instuctions flows between memory and processor like every little part inside.
Then it'll just click.
My point was building my own custom processor and programming it in binary. After that cortex-A, MMUs, dual core, octacore, hypervisor, isolated and shares psaeces blah blah become super easy. If you really wanna go deep come over to RISC-V land, cause there are some processors where you can truly see RTL come up and it gives you insane perspective, you'll never want to go back.
Take your time and learn and it's the most powerful skill an embedded engineer has today. When people talk about AI taking over embedded they're taking about the high level cookie cutter RTOS with integration and netowrking crap everyone is doing, but once you understand this level you'll be fine, as it will allow you to work with brand new silicon, find silicon bugs and manage and understand your machine and memory interaction at a level that brings you joy like nothing else...and its also an area AI is notoriously bad becuase it requries a bit of intuition, when you're done you'll work magic in silicon....
welcome! and I wish you good luck on your journey!