When trying to build a truly silent home server, choosing a backplane is hard. They are typically either built into a case which does not isolate vibrations and sound the way they should or they are way too expensive and hard to find.
So, let's design our own, custom 4x SATA backplane. The difficult part is designing the PCB itself. Once this is done it will be extremely cheap and also not hard to solder.
As the design is already done, you can download the gerber files (fabrication data) for the backplane on GitHub and order it on JLCPCB. The exact order details can be found on github as well.
In this post we will go over each design decision, signal integrity, electromagnetic interference, and manufacturing considerations.
Fig. 1 shows the assembled backplane. Note that the red wires in the back are a prototype issue which is fixed in the current, released version.
Before we get to the actual PCB design, let's write down a list with features we want. As the project is quite simple, we will provide the list without too much discussion.
The most important thing however is that the backplane does not increase error rates.
Now that we have a list of requirements, we can start talking about design considerations. As SATA is "high speed", we have to keep an eye on signal integrity and electromagnetic interference.
SATA III operates at a data rate of 6 Gbps, which corresponds to a frequency of 3 GHz. However, the frequency we need to design for is not 3 GHz! The actual frequency lies in the rise and fall times of the signals. We see this when using fourier analysis for the rectangular waveform. A fast rise and fall time results in higher frequency components, which can lead to electromagnetic interference and signal integrity issues.
The highest frequency component of the signal we will consider is called the knee frequency and given by $$\begin{align} f_{knee} := \frac{0.35}{t_r} \end{align}$$ where \(t_r\) is the rise time of the signal (\(20\%\text{ to }80\%\)). For SATA III, the rise time is typically around 50 ps, which gives us a knee frequency of around 7 GHz [2]. This means that we need to design our backplane to handle frequencies up to 7 GHz to ensure signal integrity and minimize electromagnetic interference. For fr4 with \(\varepsilon_r = 4.4\), this leads to a wavelength $$\begin{align} \lambda = \frac{c}{f_{knee} \sqrt{\varepsilon_r}} \approx 0.02 m \end{align}$$ where \(c\) is the speed of light.
As a rule of thumb, the trace will start to behave like a transmission line when its length exceeds \(\lambda/10=0.002 m\), which it clearly will.
SATA uses differential signaling to improve signal integrity and reduce electromagnetic interference. Here two wires carry the signal with opposite polarity (simplified: one wire carries the signal, the other carries the inverted signal).
This works in the following way: The receiver looks at the difference between the two signals, which will cancel out any noise that is common to both signals. So, if a electromagnetic wave induces a voltage on both traces (which it should as we route them next to each other), the receiver will compute the difference between the two signals, which will cancel out the common mode noise and allow the receiver to correctly interpret the original signal.
For this to work, we will route the traces as differential pairs. The ECAD software typically has a tool to do exactly this.
Note: There are several discussions about the necessity to actually route the differential pair next to each other. We will not add to this here and go with the standard approach of routing them next to each other.
In this design: Primary concern.
As discussed above, the idea is to cancel out interference by computing the difference between the two signals. However, if the signals have a different propagation delay, this can lead to timing issues and reduced signal integrity.
Consider the following example: We emit a signal on both traces. Then the pair has a corner. Obviously, the signal will take longer to propagate on the outer (longer) trace than the inner one. We now have a timing mismatch. The two signals do not arrive at the same time.
If the receiver now computes the difference between the two signals, they do not align properly, causing issues with signal integrity.
To mitigate this issue we have to make sure the signal takes the same amount of time to propagate on both traces. This is often called length matching as the two traces are made to have the same physical length. This is incorrect however, as we have to match the actual delay.
Let's keep going with the example to see where we have to apply the delay matching. If a voltage is induced on both traces after the first corner, the receiver will still cancel out the common mode noise.However, if we now match the delay before the receiver to realign the signals, we shift the noise such that it no longer ligns up on both traces/signals. Thus it is no longer canceled out by the difference computation.
To avoid this issue, we must match length/delay close to the point where the mismatch occurs.
The sata standard specifies this intra-pair skew to be \(\leq 10 ps\) [3].
In this design: Primary concern.
Another thing to mention is the propagation delay, which is the time it takes for a signal to travel along a trace.
The reason why length matching is technically not correct is that the signals may travel at different speeds through the two traces. The easiest way for this to happen is if we were to route one trace on an internal and one on an external layer (which we are obviously not doing). However, this is not the only reason the signal might travel at different speeds.
Consider the way a PCB is actually built. We have copper layers and inbetween glass fiber prepreg layers. The prepreg is a composite made from woven glass fibers and resin. Depending on if the trace is above glass fiber or above resin will affect the propagation speed.
The weave is typically oriented in \(0^\circ\) and \(90^\circ\). So, if we route our pair horizontally, One trace could be above a fiber strand and the other above resin. To combat this issue, we may align the layout to \(45^\circ\) and route the traces at \(\pm 45^\circ\). This way the differential pair is on average equally above both materials.
Another possibility is to rotate the whole PCB in CAD by around \(10^\circ\).
We have mentioned this for completeness sake but we will not consider this in this specific PCB design for SATA.
In this design: Not critical.
Crosstalk is the unwanted coupling of signals between adjacent traces. If we route two traces (not differential pair) next to each other, the signal in one can couple into the other, causing ovious issues.
The best way to avoid this issue is to maintain adequate spacing between traces. More is better but we will go with the rule of thumb:
In general, routing traces in parallel is not recommended as it will increase the chance of crosstalk. If we have to cross other signal traces we should do so at right angles.
We take a more critical look at trace spacing and its effect on crosstalk in section 5 below where we simulate the finished PCB and a spacing example using FEM.
In this design: Primary concern.
In a transmission line, return currents flow through the ground plane to complete the circuit. The current will take the path of least impedance. For fast digital signals, due to capacitance effects, the return current will flow directly under the signal trace. It will not necessarily take the shortest path through the ground plane.
This is something we have to keep in mind when routing. We do not want to split the reference plane (ground directly under the signal trace) and thus interfere with the return current paths.
Again, consider the following example: We route a trace on the internal layer below the signal trace. As we have created a discontinuity in the reference plane, the return current has to take a detour around the slit. It will travel along the slit back and forth, creating in essence a slit antenna.
If the length of the slit approaches \(\lambda/4\), it will start to act as an antenna and radiate energy. Even if we do not match \(\lambda/4\), we have still increased the loop area which is proportional to the radiation efficiency.
In this design: Primary concern.
As we are dealing with a transmission line, we need to ensure that the impedance of the trace matches the impedance of the source and load. This helps to minimize reflections and maximize power transfer.
For SATA the impedance is specified as 100 ohms [3].
As we want to order from JLCPCB we will use a 4-layer board even though we only need two layers. The reason is that a two layer board is constructed differently from a multi layer board.
A typical pcb is \(1.6 mm\) thick. Thus on a two layer board the top and bottom layers will be \(1.6 mm\) apart. For multi layer boards however, a thick core is used then copper layers are separated by a thin dielectric (prepreg) layer. For the stackup we will use (JLC04161H-7628) the top layer is only \(0.2104 mm\) apart from the In1 layer. This allows us to use much thinner traces to achieve the desired impedance (think about capacitance as a function of area and distance).
We start by choosing an acceptable trace spacing. Then we can use the JLC impedance calculator to compute differential pair spacing/width to achieve the desired \(100 \Omega\). For our stackup:
In this design: Primary concern.
Now that we have computed the required trace dimensions, we have to ensure that the impedance remains constant throughout the transmission line. One possible issue are corners or vias that can cause impedance variations.
Let's start with corners. The problem here is that the cross-section of the trace changes at the corner, which can lead to impedance variations. For the speeds we are concerned about this effect is probably negligible. However, a \(45^\circ\) is better than a \(90^\circ\) corner and an arc (fillet) is better than a \(45^\circ\) corner. We will go with the arc.
Vias also cause an impedance mismatch. For this project we do not need to use vias in data lines so this is not an issue we have to consider.
Connectors and other passive components can also cause impedance mismatches. So can the pads they are attached to. We will keep pads and footprints as small as possible.
In this design: Not critical.
As mentioned above, the return current flows in the reference plane below the signal trace. If we were to use vias in our signal traces, the signal would change its reference plane. We therefore need to place ground vias next to the signal wire to allow the return current to change planes as the signal does.
Thus, we will always use vias in pairs. If we use a via, we will place a ground via next to it.
In this design: Avoided by layout.
Stubs are short sections of trace that branch off from the main transmission line. They cause unwanted reflections and if they are longer than \(\lambda/20\) to \(\lambda/40\) (again, rule of thumb) signal integrity issues. We will avoid stubs in our design and, if we have to use them, keep them as short as possible.
A non obvious cause of stubs are vias when routing on internal planes. If we were to go from one internal layer to another, the via would still go from the top of the pcb to the bottom. It would not be connected to the top and buttom layer but it would create a stub. Depending on the frequency/wavelength we are working with and the length of the stub this could be an issue.
If we determine that via stubs are an issue, we can opt for back drilling. The manufacturer would then drill away the unwanted part of the via, removing the stub.
Again, we will route on the top and bottom layers and there is no reason to use vias in this design. But it is something to keep in mind when working with high-frequency signals.
In this design: Avoided by layout.
Via fencing is a technique used to reduce electromagnetic interference by placing a row of ground vias around the signal traces. This creates a sort of "fence" that helps to contain the electromagnetic fields and reduce crosstalk between adjacent traces.
We will not use via fencing in this design. We want the differntial traces to couple to the reference plane and to each other, nothing else.
Placing ground vias around the signal traces can surely help, however, if they are too close to the signal traces, they can cause unwanted coupling, they could cause standing waves etc. We would have to carefully consider the placement and spacing of these vias.
For this design, I will therefore avoid using via fencing and go with adequate spacing instead.
Another technique to consider is PCB edge via stitching. Here ground vias are placed around the PCB edge, connecting the top to the bottom plane and creating sort of a fence. The reasoning is the following: If we use vias on signal traces, they will radiate perpendicularl to the via itself, causing a wave to travel longitudinally in the dielectric with the planes above and below as a waveguide. The wave will then exit through the edges of the PCB. If we place vias there, the wave cannot exit. We could also get the edge plated by the manufacturer.
Again, an interesting approach but in my opinion not necessary for this design. We do not use vias on the signal traces and thus we do not need to contain waves emitted by them.
In this design: Not critical.
Many RF designs remove the solder mask from the signal traces as it is not invisible to high frequency signals. It will affect the impedance and increase dielectric losses. Controlling solder mask thickness is also not easy during manufacturing.
However, to avoid corrosion we would probably have to go with ENIG (Electroless Nickel Immersion Gold). Furthermore, removing the solder mask from a PCB that goes inside a PC is not a good idea as it increases the risk of shorting traces. Lastly, the solder mask will not be an issue at the frequency range we are in.
Thus, we will keep the solder mask on the PCB.
In this design: Not critical.
There are a few sata specific considerations for our design.
Pin 11 of the SATA power connector is used for staggered spin-up and the drive activity indicator LED. If pin 11 is pulled low, staggered spin up is disabled.To support staggered spin-up, we will connect pin 11 to the 5V rail through a pull-up resistor (R1). This allows the drive to spin up when the sata controller tells it to, allowing for staggered spin-up of multiple drives. We do this similarly to [3, 4]
Fig. 1 shows the schematic for this connection. 1_ACT is the connection to pin 11 of disk 1.
SATA uses AC coupling capacitors (typically \(100 nF\)) to isolate the DC component of the signal while allowing the AC component to pass through. This way each side can set its own DC bias. In our design we will not add any additional capacitors as they are already present on the host side.
SATA supports hot plugging, which is primarily enabled by the staggered pin lengths of the standard power connector, ensuring that ground and pre-charge pins make contact before the main power and signal pins. Since this backplane uses standard SATA power connectors, it inherits this sequencing behavior. In typical desktop systems, power supplies are designed to directly handle drive insertion and the associated inrush currents, so this design behaves electrically similar to a passive Molex-to-SATA adapter. However, as discussed on GitHub and Section 6.14.3 of the SATA specification [3], fully compliant hot-plug implementations may include additional measures such as controlled inrush current and signaling considerations. These are not implemented here, meaning that while hot plugging works in practice, this design does not provide the robustness of enterprise-grade backplanes.
Now that we have gone over the design considerations, we can start designing the PCB. We will use KiCad for this project. The design files are available on GitHub.
Figure 3 shows the routing for the schematic shown in Figure 2. We use planes for power distribution, whick traces and multiple vias. Furthermore, we make sure to offset the activity LED from the hard drive so that it is actually visible.
Figure 4 is more interesting. We apply everything discussed in section 3. The signal traces are routed as differential pairs, the corners have fillets, delay matching is done close to the corners, and the two differential pairs have ample spacing between them. We have a solid ground plane on In1 directly under the signal traces. The top layer has no co-planar plane, just the differential pairs. Furthermore, no vias in the signal traces were required.
To be more exact, the spacing between the differential pairs is around \(3.1mm\) which is roughly \(15w\). The intra-pair skew is kept to \(0.001mm\) and the two differential pairs have a length mismatch of around \(6mm\) between them.
Before we finish with the mechanical design for this project, I'd like to simulate the PCB itself and also how spacing affects cross-talk.
To do so, we will convert the fabrication output (gerber files) from KiCad to a simulation ready 3D model using a free browser based tool. We will then solve Maxwell's equations for the 3D model using PEC (perfect electrical conductor) boundary conditions for the copper layers and PML (Perfectly Matched Layer) to avoid reflections on the edge of the airbox.
The simulation itself is done using CENOS RF Software. It does everything we need for this project and it is quite simple to use. Furthermore, it is very cheap for students.
Once the simulation is set-up we can compute the impedances and S-parameters. S-parameters measure the relationship between incident and reflected waves at each port. Thus, they can be used to analyze not only reflections but also cross-talk.
For this, we will sweep from \(3 GHz \) to \(11 GHz \).
Fig. 5 shows the resulting S-parameters. Note that the y-axis of the plot is in dB. Low values indicate good signal integrity.
The mechanical design is much simpler than the electrical one. We will use rubber standoffs to mount the backplane itself to the case/chassis. The standoffs are quite soft and will isolate any vibrations. Then we will use a 3d printed cage to hold the drives in place and avoid stain on the connector.
To avoid slides and a thus lot of 3D printing we will use DIN912 M3x6 screws to hold the drives in place. The screws screw fully into the lower four holes of the HDD and the nice round head of the screws will slide in a slot in the 3d printed cage, securing the drive in place.
The cage can be bolted to the PCB using the rubber stand offs. Furthermore it will get slots for airflow between the drives and two holes that facilitate fan mounting.
During the design process, we can use the step export from KiCad (also on GitHub).
Below is an interactive 3D model of the finished backplane with cage.
In this article we have designed a custom 4x SATA backplane. We went over the design considerations for high-speed signals and how to apply them to our specific design. The design files are available on GitHub and you can order the backplane from JLCPCB.
Overall, I am quite happy with how this project turned out. Below is a video of me plugging a HDD into the backplane, it works really nicely:
The content published on this page (with exceptions) is published under the CC Attribution-NonCommercial 3.0 Unported License. You are free to share on commercial blogs/websites as long as you link to this page and do not sell material found on blog.hirnschall.net/* or products with said material.