At work I have a bunch of single-board embedded computers that have a mini-PCIe card slot onboard, which provides access to one USB 2.0 line. I thought that it would be cool to put an Arduino on a mini-PCIe card, and thus having pretty much an onboard Arduino for these computers.
Here's an "artist's impression" of what it might look like:
This is not to scale, the mini-PCIe card is 51x30mm in size, but the Nano is even smaller so it should work. The power line of the card is 3.3V so my inspiration is a mixture of the Arduino Pro (ATmega328P, 3.3V, 8MHz) and the Nano (onboard FTDI).
I've made a draft schematic with KiCAD, and would love to have some feedback on it! I'm not 100% sure if I have connected everything the right way...
The schematic is here: PCIeDuino328 Schematic v1 (or if you suggest me a better way to share it I'd love to hear).
One part I'm not entirely sure is which of the multiple 3V3 and GND pins of the mini-PCIe connector I should get my power and ground. Does it really matter?
So, what do you think? Anything I've messed up? Missed? Should include? Should exclude?
In the meantime I've posted the same question to the Arduino sub-reddit, and there's a bunch of very interesting feedback. I thought I share it here as well, might be helpful for other people designing Arduino-compatible devices
1) USB-Serial
Some question of the choice of the FT232RL for USB-to-Serial. It's not clear whether it's a "bad" choice, but it's clearly "not as good as could be", because of people's experience with the newer Arduinos raised the bar: more people want USB-HUD experience (mouse/keyboard emulation). Because of that some people suggested either using the ATmega32u4 as an USB-to-Serial serial chip in addition to the core, or even just using the USB-to-Serial functionality in firmware of that chip. I got to look into that, it looks interesting idea (especially the latter), but don't understand the practicalities of it just yet.
2) Choice of MCU
It was suggested to use other chips than the ATmega328P-AU that I'm going with so far. Either the ATmega32u4 as mentioned above, or if possible then an ARM Cortex-M4 instead like Teensy 3.1. These look interesting too, though probably not at first, but as I gain more confidence and experience in designing these and the requirements of the different chips. The 328 is already proven on 3.3V, and for a start it would work "okay" for sure. Still, it's awesome how many choices there are now.
3) PCB design
People commented that besides the "row-of-pins" arrangement like on the Arduino boards, there are other ways for breaking out the I/O in a more usable way (especially for a board that might be inside another computer like this.
More pads on the PCB surface for easy soldering to
I/O+VCC+GND combo pins like some servos
Break out additional lines from the mini-PCIe if available
These can be tricky, because the surface real estate is quite small (51x30mm altogether, and some of it is lost to the mandatory screws), so definitely cannot cater for everyone. Will need some more input on this, and likely more research on how others are doing this.
That's mostly it so far... I'm trying to figure out some more details about the PCIe connector (in particular whether I should use AC coupling capacitors on the USB2.0 lines coming in? and wiring the power lines for PCIe specs compliance and low noise.).
Thanks for the comment on the DTR, will check it out! The circuit is still "in progress" and some parts are more "copy-paste" than complete understanding, but won't print anything until I know exactly how the different parts work.
For the LEDs I included them because it's not 100% to be within an enclosure, it's just quite likely. E.g. the VIA Springboard I have here has the mini-PCIe on the front does not necessarily have an enclosure, and it would be great to see it right away (without any extra parts) that it works, e.g. "doing the blinky" with onboard components only. Another board, the VAB-820 has the connector on the bottom - there it's not much help. Others want to put it inside a laptop, that's nothing at all... I think, though, that it's a good general principle to be the most useful, even if it has functions that are not utilized by some users. That's why I'd like to include TX/RX LEDs, and probably add a Power LED as well for easy troubleshooting.
ODwyerPW:
MIght be a fun application for the upcoming Arduino ZERO.
Oh, yes, that works on 3.3V as well, thanks for pointing it out! Might not be the first version, as I'd like to keep it simple using components only from Seeed Studio's Open Parts Library but definitely good to consider. Cortex-M0+ got a lot of exposure these days, need to see how does that compare to the other available options.