2
\$\begingroup\$

I start by saying that I'm not an electrical engineer, I've got a basic understanding of things from school and from work (I'm a long time computer programmer), but this is not much my field of competence.

I'm in the process of evaluating the feasibility of a device that I'd like to try to get designed and produced. But, even before paying a specialist for a feasibility study, I'd like to understand how much I'm far from reality.

The focus of the device (90% of its functionality) will be on writing data on an SSD disks connected via a SATA port, so I'll need some kind of chip capable to do that (or, in extrema ratio, to get one designed for it). Is this a realistic thing, can a SATA controller be just bought and used easily on a board, or even designed from scratch? (so to have just one chip that do everything)?

\$\endgroup\$
  • 1
    \$\begingroup\$ Suggestion: if you choose SD cards, they're considerably easier to write to. What data rate will you be writing at? \$\endgroup\$ – pjc50 Dec 23 '15 at 14:14
  • 1
    \$\begingroup\$ (actually writing SATA at full speed requires one of the higher end microcontroller/SoC chips and a large part of an operating system such as Linux) \$\endgroup\$ – pjc50 Dec 23 '15 at 14:18
  • \$\begingroup\$ Thanks for the comments, @pjc50. Problem is, the whole purpose of the thing is to write to an SSD, not an option on where to store data :-) \$\endgroup\$ – motoDrizzt Dec 23 '15 at 14:29
  • 1
    \$\begingroup\$ I needed over one year to implement a SATA controller in a Virtex-5 FPGA and another 6 month to upgrade it to SATA 6 Gbps and the 7-Series FPGA family from Xilinx. The controller handles only a basic subset of commands, so HDDs and SSDs can be operated. Some FPGA boards have SATA connectors onboard or can be extended. Currently we achive over 90% link effectivity to an SSD. \$\endgroup\$ – Paebbels Dec 23 '15 at 14:54
  • 1
    \$\begingroup\$ Reading your question again, I got a question by my own: Where do you get the data from? Is it a measurement card which has already an FPGA then the controller could be embedded. Is is a CPU / SoC then it's will have native SATA or PCIe ports. There are controller chips and cards to translate PCIe to SATA, moreover new SSDs have a native PCIe interface - no SATA needed. And yes for FPGAs or ASICs, IP cores can be bought :). \$\endgroup\$ – Paebbels Dec 23 '15 at 18:45
3
\$\begingroup\$

A number of ARM SOC chips have provision for a SATA interface, so I don't think that requirement is a particularly huge barrier. For example, the Allwinner and Texas Instruments ARM-based SOCs- SATA and even SATA II are available.

Simply make sure that you're using a chip that supports SATA and feed it copious amounts of memory, a real operating system such as Linux, and a lot of cycles to make it happen. If the requirement is written in from the start, I don't think it will be your biggest problem. It does push the required level of hardware sophistication up to around the Raspberry Pi level (GHz-class CPU with lots of memory).

\$\endgroup\$
  • 1
    \$\begingroup\$ Thanks, @Spehro. I must admit all answers are really good and useful, but for site rules I've got to choose only one and your is incidenatlly the one who gave me the kick to a deeper thinking and to reviewing my plans in a better direction. However, to be fair, I gave a +1 to all other answers. Thx all, really! \$\endgroup\$ – motoDrizzt Dec 27 '15 at 10:14
3
\$\begingroup\$

I am a strong advocate of using existing technology wherever possible. Leverage saves a lot of money in product development.

That said I think that you would be way better off thinking of using an SSD that is attached behind a USB interface. There are available a number of straight through USB to SATA interface chips that are commonly used in external drive enclosures. These days there are even USB3 types that can keep the speed up similar to SATA. USB3 does limit the available choices for hosts though as there are more SOCs and MCUs with USB2.

\$\endgroup\$
3
\$\begingroup\$

I've designed several products with SATA interfaces at varying speed levels. You'll find SATA controllers (at least discrete ones) in two major interfaces:

  • USB
  • PCI Express

PCI Express basically mandates the usage of a FPGA or a high-end SoC in your design, which comes along with the design complexity baggage expected from that type of design.

With USB, you will still likely be stuck with a BGA-packaged device (unless you are OK with SATA-I) but at the expense of requiring a USB master device, you hugely reduce your design complexity.

At SATA-3 speeds (6Gbps), the investment in equipment will be high to properly debug the design. The trace layout requirements are not the end of the world if you work with your fabrication house to get the appropriate geometries and use a decent EDA package.

Finally, it's worth noting that you could bypass SATA entirely with the increased availability of native PCI Express SSDs.

If I was doing this, I would pick the following (guessing at your design intent):

  • high-speed / low-latency data acquisition: FPGA -> PCIe SSD. Most mid-range models have built in PCIe hard-IP cores that can operate as a root complex. If you use a Zynq or similar, you can run a full Linux distribution on-board as well.
  • Custom storage peripheral: High-end ARM SoC (i.MX6, etc.) -> SATA I/F -> SSD. It is worth noting that a lot of these SoC designs do not even come close to delivering the theoretical performance of interfaces like SATA, but they will certainly 'work'.
\$\endgroup\$
2
\$\begingroup\$

Easilly is subjective, expect to pay an experianced high speed digital guy significant money to design and prototype a board with a SATA interface on it. For low volume work I would expect using existing boards where someone has already worked out the hardware kinks to be more economical.

The real questions which you need to ask yourself to guide you to the best soloution are:

  1. How much data do you need to put on these SSDs?
  2. Where is it coming from?
  3. How fast do you need to move it?
  4. What volume do you intend to produce this device in?

USB to SATA chips are readily available, as are PCI and PCI express to SATA chips and "applications processors" with SATA interfaces. You are unlikely to find SATA on microcontrollers. Many FPGAs have serial transcivers that can be used for SATA but I would probablly only consider that option if the FPGA was going to be the main datasource anyway for other reasons.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.