You are currently viewing Nvme Controller Initialization and registers for Nvme over Pcie

Nvme Controller Initialization and registers for Nvme over Pcie

You may have come across terms like NVMe and PCIe used together, such as NVMe over PCIe. The connection between them might spark curiosity, leading to questions about their interrelation. In the following section, I explore the dynamic interaction between NVMe and PCIe. This question has intrigued me, and likely, many of you share the same curiosity. Here, I delve deeper into the subject and uncover some insights.

Let’s begin by understanding the role of the NVMe controller during the initialization process.

To start, let’s define the NVMe controller:

Drawing an analogy, picture a situation where you need to pack various items for a camping trip. If you randomly throw things into your bag, retrieving them later might be a chaotic experience. However, if you organize and sort items systematically from the beginning, the overall experience will be much more enjoyable. Similarly, the NVMe controller plays a crucial role in orchestrating and optimizing data flow during the initialization process.


The act of organizing items for placement within a card is akin to the role of an SSD controller. Just as a car cannot autonomously arrange its contents, the flash cells within our SSD require a mechanism to sensibly fill data with ones and zeros before communicating with the computer. A direct wiring of the data connector into the SSD controller facilitates the processing of data, which is then transmitted to the flash memory. In summary, it is the responsibility of the SSD controller to manage the placement of data onto the SSD.


Throughout the initiation of the NVMe controller, the host executes a range of actions: –


Now, let’s observe the practical application using the NVMe CLI on my SSD.

The command “nvme show-reg” is executed, which reads and displays the specified NVMe controller registers over PCIe.

Here is the output of the “show-reg” command.