Arduino + PCI card, hear me out

Have questions about a SparkFun product or board? This is the place to be.

Moderators: phalanx, TS-Tim

Post Reply
Posts: 1
Joined: Sun Jan 10, 2010 11:50 am

Arduino + PCI card, hear me out

Post by milkfilk » Sun Jan 10, 2010 12:19 pm

I'm not trying to do this. I just want to know how someone would think about the solution. And I know this is an annoying post, I've been to graphics programming boards where people ask impossible questions without knowing the basics and that's me right now.

So if someone gave you two Arduino's and two fiber HBAs (or ethernet or even an PCI based null modem kit), how would you go about making them talk to each other (without using a PC). Assume it's PCI and single mode fiber and forget about sending high-level messages (TCP or whatever). What if you just wanted to send a single bit as a proof of concept? I know it's hard but what if you had a lot of time and money to do it?

Someone on this board asked a similar question when someone asked how to use a PCI ethernet card and the arduino and someone replied, "the arduino couldn't keep up with the buffer". Ok, but why? Did they multiply the bus width x the bit throughput? What exactly is the upper limits or the Arduino or how could I compute it? How crazy of a device is the cut-off point? How much can be externalized (breakout boards?) to make "hard" things viable (minus just serial to a PC/real box)?

Sorry that this is a hard question to answer. I'm just trying to grok it a bit even if I don't intend to do this ever. Would you try to breakout the PCI connections and power it externally? Is there an IC type/family that I could read up on? For example when someone says "PCI controller" what exactly is it?

PCI-e x16 has 82 pins. I've done the little 7 segment LED hello world test but that's just an array of on/offs with a common anode. Are the PCI/PCI-e so complicated that people don't even think of the pins as high/lows but as something else? If there's a protocol to communicating with a device, do people interface with a chip that does all the heavy lifting?

Thank you for your patience.

User avatar
Support Volunteer
Posts: 5734
Joined: Sun May 01, 2005 11:20 am
Location: St. Leonards-on-Sea, E. Sussex, UK.

Post by leon_heller » Sun Jan 10, 2010 12:23 pm

You could manage it with a special PCI chip made by PLX, or a suitable FPGA, and a fast processor which could be implemented in the FPGA. It won't be easy, though.

Leon Heller

Ex-SFE Guru
Posts: 700
Joined: Fri Jun 17, 2005 11:08 am
Location: Vancouver, BC, Canada

Post by busonerd » Sun Jan 10, 2010 3:51 pm

The simple answer is that PCI / PCI-e have timing requirements that the arduino would not be able to meet. You might be able to pull off bit-banging an ISA card though.....

--David Carne

Support Volunteer
Posts: 633
Joined: Thu Oct 02, 2008 1:50 pm
Location: CA

Post by theatrus » Mon Jan 11, 2010 3:25 pm

The AVR simply doesn't have the resources to manage a PCI bus, and in no way could attempt a PCIe bus (the serial differential bus is running at 2.5Gbit/s). The total throughput of an AVR is approximately 0.4*clockRate bytes per second, doing nothing but copying one port to another port in a tight loop.

To prototype on a PCI or PCIe bus you need the high speed requirement for your product first off, or you will be causing yourself a ton of work for no reason (kernel drivers, etc). There are upper end FPGAs capable of this.

Digilent sells an FPGA board with a PCI bus and quad GigE Ethernet interfaces, designed for wire-speed packet handling. Its also around $1k. ... od=NETFPGA : Open Source Hardware : BeagleBoard Expansion boards, EFM32 (Cortex-M3), AVR32 Dev Boards, and debug tools

Post Reply