Hey there, welcome back! In Day 4, BL2 successfully initialized the DRAM and the UART console. The platform is stable. Now, BL2 must execute its primary mission: loading the remaining firmware stages into memory and passing the baton to the Secure Monitor.
With BL1 having done the heavy lifting of raw architectural setup, we have arrived at BL2 (Trusted Boot Firmware) . BL1 was executing out of ROM; BL2 is executing out of Secure SRAM. The environment is a little less hostile now, but we are still in the dark. It’s time for BL2 to turn on the lights, initialize the broader platform, and prepare the system memory. Let’s see how it’s…
Hello! To recap in Day 2’s article, we covered the primary CPU core wake up, disable its caches, set up a stack pointer, and finally jump into bl1_main() . Today, we’ll walk you through what BL1 actually does in C, setting up early memory management and handling the crucial task of loading the next stage (BL2) from flash into SRAM.
In Day 1, we established that TF-A operates as the gatekeeper of the system, and that the boot process is a chain of trust broken into several stages. Today, I want to show you the very beginning of that chain: BL1, the AP Trusted ROM . When you press the power button on an ARM SoC (or type system_reset in QEMU), the CPU comes out of reset. Where does it go? What’s the very first instruction…
Hey there! Welcome to a brand new deep-dive series. If you followed my previous arm64* exception levels and bare-metal series, you know I love getting into the weeds of how things actually work at the silicon level. In this series, we are going to tackle ARM Trusted Firmware-A (TF-A) . We will take the official TF-A source code, dissect its assembly, trace its memory mappings, and watch it boot…
The three key skills you need to start your career as an embedded software engineer. Spoiler alert! It’s C-Language , 32-bit CPUs , and a good understanding of the compiler toolchain !
What Makes “OOPS Under the Hood” Special “OOPS Under the Hood” is not a traditional C++ course that focuses only on syntax, libraries, or design patterns. Instead, it teaches how C++ actually works beneath the surface—inside the compiler, linker, memory system, and runtime environment. This deep technical focus is what makes the course truly unique. Most developers learn how to write C++ code, but…
The Design and Deliberation I am a big believer of mental models and visualisations when it comes to learning technical concepts. This course is deliberately heavy on insight and frameworks of thinking about pointers. Pointers in C is a straight forward concept but it has earned a reputation for being hard to understand. In my opinion, the problem is - most of those who try and learn pointers…
I made this project to understand how audio data can be analyzed and displayed visually. The idea was to take a WAV file, process its samples using Fast Fourier Transform (FFT), and show the frequency spectrum in a window using XCB (X11 protocol), all in C.
What is so special about this course? What makes this course special is its end-to-end, system-level view of embedded middleware, going beyond definitions and APIs. Instead of treating middleware as a black box, the course explains why it exists, where it fits, and how it is designed—from drivers to applications. It connects theory with real automotive use cases, including a practical SOME/IP case…
What is so special about this course? The Automotive Electronics course is first of its kind because it provides a complete system-level understanding of how modern vehicles work — not just isolated topics. It starts with E/E architecture, the backbone of every vehicle, and builds upward through sensors, actuators, diagnostics, control strategies, and software stacks. Unlike traditional courses,…
What is so special about this course? There are several courses online that dive into how to use FreeRTOS. This one take a different approach and dives into the internals of FreeRTOS and how to port it from scratch on a new micro-controller. Learning it this way will ensure that you understand the internals of this RTOS and reason better when using it.
Embedded systems are specialized electronic setups designed to handle specific tasks by sensing environmental conditions, processing the data, and affecting the surroundings through actuators. These systems are integrated into larger devices to control particular functions.
Course Highlights Hands-On Approach : Follow along with practical, real-time demonstrations of each step, from source code to a running system. ARM64 Focus : Target the ARM64 architecture, widely used in modern devices like servers, mobile devices, and embedded systems. Minimalist Userspace with BusyBox : Learn to create a compact and efficient userspace to complement your kernel. QEMU…
Let’s now actually understand the need and usage of GDB, OpenOCD, JTAG, SWD, etc. Let’s go over some of the use-cases to see how all of them come together and form a coherent debugging environment for a typical embedded system.
GDB, OpenOCD, JTAG, SWD etc are terms often thrown around when it comes to debugging in an embedded environment. They are naught but just tools made available to us. We will actually understand the core principles and ideas behind debugging such that the usage of such tools would become evident and obvious.
Syscalls and switching between different exception levels is a very intricate topic filled with minute details which are often overlooked. Let’s dive into details.
ARM-A is the most prevalent architecture out there powering billions of devices. We will be covering these topics over the course of multiple articles in this series.
Nordic nPM1300 PMIC Evaluation Board! A Power Management Integrated Circuit (PMIC) is a critical component in modern electronic devices, designed to manage power requirements efficiently. It takes input from a DC power supply or a battery, delivers regulated power to various system components, and often includes functionality to charge an onboard battery.
Bootloaders are the unsung heroes of ARM Cortex-M-based systems, ensuring reliable startup, application execution, and firmware updates. By leveraging the Cortex-M’s vector table, VTOR, and low-power features, developers can create efficient and secure bootloaders tailored to their application’s needs.
Important: Planned courses are not yet ready for learners and will be added as the current recording concludes. Email from one of the learners ♥️ One of the subscribers wrote to us, this... The Philosophy behind the courses? We have been creating content for the Embedded Software Engineering community for over a year now. If you have been following us, you would know that we have launched courses…
How to learn Firmware Development Every embedded system has a CPU with firmware running on it. Being able to master Firmware engineering comes down to mastering the following - High level view of the courses in this pack! 1. C Language C is the workhorse when it comes to firmware. While there are languages like Rust and C++ that can be used, C is still the dominant language. Primarily because of…
Most Linux device driver engineers cannot reason about how the Linux kernel boots or how a device driver is loaded. This post details how you should learn to write device drivers by being able to reason down to the hardware level.
What does a humble device like a router do? To most, a router is used till it breaks like many other devices in the house. The router plays such an important role by making sure your netflix works smoothly. However, a solo glance at its shell will reveal a battle raged for OpenWRT, RDK, and prplOS.
I am going to explain the anatomy of assembly code using RISC-V as an example since it’s a clean, modern instruction set architecture (ISA) that’s easy to understand. Assembly code is a low-level programming language that directly corresponds to machine instructions executed by a processor.
Git and Gerrit are pivotal tools in the software development industry, each serving distinct yet complementary roles that enhance collaboration, code quality, and workflow efficiency.
Pulse-Code Modulation (PCM) is a method used to digitally represent analog signals, particularly audio. It works by sampling the amplitude of an analog signal at regular intervals and then quantizing those samples into a series of discrete numerical values. These values are stored or transmitted as binary data, making PCM a foundational technique for digital audio in computers, CDs, DVDs, and…
In this article, I want to talk about the do{..}while(0) construct in C. This construct is often used in C programming to define multi-statement macros. It is a common pattern used in the Linux kernel and other standard C projects. I will take an example of a macro that is not safe and show how do{..}while(0) construct can be used to make it safe. Especially in the conditional statements.
various types of scopes. In the C programming language, the scope of an identifier determines where it can be accessed or referenced within a program. Understanding the different scopes in C is crucial for managing variable and function names effectively without causing conflicts.
Delta Timer List Efficient timer management is a crucial aspect of embedded systems, especially in applications requiring low-power operation, RTOS scheduling, or precise event timing. One of the most efficient ways to manage multiple software timers is the delta list approach, which significantly reduces CPU overhead and optimizes wake-up schedules.
Storage Classes in C Language In the C programming language, a storage class defines the scope (visibility) and life-time of variables and/or functions within a program. There are four fundamental storage classes that can be used to define these properties: auto , register , static , and extern .
Tokens In the C programming language, tokens are the smallest individual units of a program that the compiler recognizes and processes during lexical analysis, the first phase of compilation. The C compiler breaks down the source code into tokens before proceeding to syntax analysis and further stages. Tokens are the building blocks of a program, and understanding them is fundamental to grasping…
Refund Policy Thank you for purchasing one of our online courses! We strive to deliver high-quality content and ensure your satisfaction. Please read our refund policy carefully before making a purchase, as it outlines the conditions under which refunds may be granted. 1. General Refund Eligibility Refunds are only available under specific circumstances. To be eligible, you must submit a refund…
At Typobrahe Education LLP (pyjamacafe.com), we strive to deliver high-quality online courses on Embedded Systems that provide exceptional value to our learners. To ensure we can continue to meet your needs and adapt to changing circumstances, our pricing policy is designed with flexibility in mind. Here’s what you need to know: Dynamic Pricing : We reserve the right to adjust course prices at any…
This privacy policy sets out how Pyjama Cafe (formally Pyjama Brah) uses and protects any information that you give Pyjama Cafe (formally Pyjama Brah) when you visit their website and/or agree to purchase from them. Pyjama Cafe (formally Pyjama Brah) is committed to ensuring that your privacy is protected. Should we ask you to provide certain information by which you can be identified when using…
For the purpose of these Terms and Conditions, The term “we”, “us”, “our” used anywhere on this page shall mean Typobrahe Education LLP , whose registered/operational office is F002, Keerthi Harmony Bengaluru KARNATAKA 560016 . “you”, “your”, “user”, “visitor” shall mean any natural or legal person who is visiting our website and/or…
Various Abstractions The layers of abstraction all the way down to Nature that lead us to the world of Electronics, Solid State machines and AI. This article explores the contracts that got us to where we are.Let us start by asking the question -
The Design and Deliberation As the embedded software gets more nuanced, the answer to performance and reliability usually becomes clever organization of the data and algorithms that leverage that organization. This course is designed with a focus on development in the C language. Special attention is paid to explaining the concepts of C and ways of thinking/reasoning intuitively.
What is so special about this course? Every complex embedded systems solution uses an OS/RTOS for implementing the state machine. An OS at its core implements a task scheduler (among other things). Not everyone understands how it works. The design of this course is deliberate in the sense that - in an attempt to implementing the “Scheduler” you will learn the CPU operations, how…
The Design and Deliberation The internet is flooded with coding courses—yet none rival this. For over a decade, C has been my daily driver at work. Unlike kernel developers leaning on abstractions, I’ve wielded C in its purest, most raw form—programming CPUs from scratch, without the crutch of standard libraries. This course hands you that same unfiltered power. By the end, you won’t just know…
Harris & Harris Few days back I decided to implement a RISC-V rv32i CPU and deploy it on an FPGA. Here are some initial thoughts on how I will go about doing this (and potentially you can follow).