Everything related to embedded systems: microcontrollers, firmware, practical examples, hardware related tips, etc.

An Introduction to USB Communication (Part 2)

In this article, we will introduce the USB protocol layer. Please see our previous article for information regarding the physical layer and network topology: An Introduction to USB Communication (Part 1). USB is a polled bus where the host initiates all transactions. For the host to receive information from USB devices, it must request it

2021-05-09T23:45:06+03:00By |Categories: Embedded Systems|Tags: |0 Comments

An Introduction to USB Communication (Part 1)

USB (Universal Serial Bus) is an industry-standard used to specify cables, connectors, and protocols that are used for communication between electronic devices. Advantages: Self-configuring interface, no need for user configuration of speed, data protocol, etc.Capable of supplying power to small auxiliary devicesVarious communication speeds are supportedStandard connectorsError checking increases the communication reliability Limitations: Limited cable

2021-03-16T07:14:28+02:00By |Categories: Embedded Systems|Tags: |0 Comments

FreeRTOS: Using MCU Peripheral Drivers

Communication interfaces (I2C, SPI, UART, etc.) are some of the most commonly used microcontroller peripherals in embedded systems. In this introductory article, we will look at how low-level drivers for such peripherals can be used in FreeRTOS. Polled Drivers vs Interrupt-driven Drivers Based on the method used for getting information on events (e.g errors, operation

2021-03-08T06:23:40+02:00By |Categories: Embedded Systems|Tags: , |0 Comments

FreeRTOS: Using Software Timers

In this article, we will take a look at the software timers in FreeRTOS. A software timer allows a function to be executed at a set time in the future.FreeRTOS - RTOS software timer functionality and features description The function that is executed is referred to as a timer's callback function. The interval between starting

2021-01-03T18:53:29+02:00By |Categories: Embedded Systems|Tags: , , |0 Comments

Toolset for Debugging Embedded Programs

Writing programs that just work would make the development of embedded systems a lot easier. In practice, however, a considerable amount of time is devoted to finding and removing bugs from the code. This process is commonly known as debugging and there is no way of avoiding it. In this article, we will give an

2020-11-22T22:35:01+02:00By |Categories: Embedded Systems|Tags: |0 Comments

FreeRTOS: LED Blinking And Button Polling

FreeRTOS is one of the most widely used open-source real-time operating systems (RTOS). In this article, we will look at a very simple FreeRTOS program: a push-button will enable/disable the blinking of an LED. The program is developed and tested using the LPCXpresso54102 board with NXP's LPC54102 microcontroller. The program can be easily adapted for

2020-10-20T23:58:11+03:00By |Categories: Embedded Systems|Tags: , |0 Comments

Using Callbacks in Firmware Development

In its classic form, a callback (aka callback function) is a function that is passed as an argument to another function. The function that accepts the callback as an argument is expected to call back on it (execute it) at a certain point in time. The callback mechanism allows a lower-level software layer to call

2020-10-05T09:01:21+03:00By |Categories: Embedded Systems|Tags: , |2 Comments

Aligned and Unaligned Memory Access

Unaligned memory access is the access of data with a size of N number of bytes from an address that is not evenly divisible by the number of bytes N. If the address is evenly divisible by N, we have aligned memory access. We can express this as Address/N, where Address is the memory address

2020-07-19T16:56:39+03:00By |Categories: Embedded Systems|Tags: , |0 Comments

Little-Endian vs Big-Endian in Embedded Systems

To better understand the concept of little-endian and big-endian formats we first have to look at how memory is accessed. The memory space of a microprocessor is expected to be byte-addressable. When a CPU has a 32-bit address bus this means that it can access a total of 232 addresses each with a size of

2020-06-07T21:07:09+03:00By |Categories: Embedded Systems|Tags: , |2 Comments

Prusa i3 MK3S Filament Sensor rev. 0.4 and FW 3.9.0

In the latest firmware release (at the time of writing this article) Prusa Research added a feature for filament sensor recognition (available for i3 MK3S only). Essentially the printer can tell when then filament sensor is disconnected and can interrupt the print and wait for user action. More details can be found in their GitHub

2020-05-31T12:47:21+03:00By |Categories: Embedded Systems, How To|Tags: |0 Comments
Go to Top