Foreword
In the previous post we wrote some code enabling the reading and writing of 16 bits at a time from DDR3 memory, as required by an Amiga FPGA core. All this effort was required because DDR3 memory doesn't work with a single 16-bit group at time, but several.
Luckily we could around this "hurdle" of DDR3 by making use of data masks.
At this point in the journey to implement an Amiga core on an Arty A7, it becoming clear that we will need some sort of non-volatile storage for storing ROM's and disk images. We will be using SD Card storage as non-volatile storage on the Arty A7.
The technical details of interfacing with an SD Card via an FPGA can be quite overwhelming, even if you are using an existing library. So, in order to make it less intimidating, I will make a multi part series of interfacing with the SD Card.
This post forms the first in the series of interfacing an Arty A7 with an SD Card. More parts to come in the future.
Using PMOD Headers
When I started this blog, more than three years ago, the FPGA I started playing with was a Zybo board. This nice thing of this board was that it had a build in SD Card Slot.
On the Arty A7 board, however, we don't have such a luxury. All hope not lost, however. One can add an external SD Card reader by means of a PMOD header.
For those that are not familiar with PMOD headers, let us go into a bit more detail of what PMOD headers is and how it is used.
PMOD is a standard Digilent use on their development boards. Digilent, by the way is the manufacturer that produces both the Arty A7 board and the Zybo board.
Let us start by having a look at the PMOD headers on my Arty A7 board:
As you can see, each PMOD header is 6 pins wide and 2 pins high. The pin spacing for these headers are fairly standard, and are the same as you will find on a breadboard or the GPIO pins on a Raspberry Pi.
One thing that might annoy the alert reader is that their is no 'safety notch' to prevent inserting the PMOD module the wrong way around. It is indeed possible to insert a PMOD module the wrong way around, so just keep this in mind when working with PMOD's. More on this a bit later.
At this point, the question is: Which PMOD header do we use on the Arty A7 board? At first sight, this may sound like a stupid question. I mean, if you have a PC with a number of USB ports, you just pick one, right?
Well, with PMOD's you need to exercise a bit more caution. Let me explain. You get two types of PMOD: Standard and high speed. With standard PMOD the current is limited on each by means of resistors. This is a kind of safety feature, so that if you incidentally short two pins on the header, the FPGA doesn't go up in smoke.
The downside of these resistors is that they also limit the maximum speed that the pins on the PMOD can run at and this is where high speed PMOD comes in. On a high speed PMOD, these protection resistors are absent, which makes it possible to make your FPGA go up in smoke 😱.
So, nothing wrong in using a high speed PMOD, but if don't need the speed it provides, it is safer to for the Standard PMOD.
Let us where these types of PMOD's are located on the Arty A7. I got this picture from the Arty A7 Reference manual, hosted here:
The SD Card PMOD
So, I bought myself a PMOD SD Card Reader from RS Components. With everything removed from the bag of the courier and excess packaging, this is what I got:
Now, to come back to our question from the previous section, how do we determine the correct orientation for inserting this module into the PMOD header? Start by flipping this module around, so that the Sd Card slot faces to the top:
In this picture I have indicated with a red arrow the presence of a "1" on the PCB. This marks pin 1 of the PMOD header, which if you follow this pin from the PCB, is the top right pin on the PMOD header.
Compare this to the pin out of a PMOD header, which I also retrieved from digilent.com :
This means the upright orientation of the SD Card slot, as shown above, is the correct way to insert the module into the PMOD Header.
I feel I was quite pedantic, just to explain which site is up 😂.
About the Software
We have more or less the hardware in place for reading from an SD Card. However, we still need the necessary software for interfacing with the SD Card.
I belief Vivado does provide some IP blocks for interfacing with an SD Card reader. However, I am not a big fan of these proprietary blocks, and would rather want to use an Opensource module.
There is indeed an Opensource module on GitHub developed by Dan Gisselquist. This module is written in Verilog. We will explore this project more in the next post.
In Summary
In this post we explored how to interface the Arty A7 with an SD Card for non-volatile storage. I will be using a PMOD module from Digilent that will act as the SD Card reader.
In the next post we will be exploring the SD Card project by Dan Gisselquist, which we use to interface the Arty A7 with the SD Card reader.
Until next time!
No comments:
Post a Comment