I have rebuilt my Parallella FPGA to connect up UART0 via the EMIO to external pins (were assigned to GPIO). I'll have a tutorial up for this process soon.
The next step for me is interfacing to an external microprocessor (an AVR I use to drive motors) running at a higher voltage domain (5v). So as part of this, I thought it may be helpful to others if I provided an interfacing guide, suggesting how to safely interface the ~2.5-2.9-3.3v (depending on PMIC config / stage of bootup process) IO levels to arbitrary external interfaces using a bi-directional converter.
I intend to use BSS138 MOSFET based convertsion, as described in this . The reason I chose this one, apart from its simplicity (no ICs required) and cost is that it does not tie you to fixed levels. This is a very versatile converter to have in your toolbox, allowing you to convert from ~1.2V up to ~10V - I've found differing claims on the exact limits). So you can use it to convert 2v5 to 5v to connect your Parallella to an AVR, and then reuse it to connect either of these to your Beaglebone (2v5 to 3v3, or 3v3 to 5v). The only concern I have is the speed of the circuit, and what effect this will have for various applications.
I have a veroboard prototype of the converter mostly working, and from my DMM measurements (I have no scope at home) it seems to deliver what it promises - once I've connected it via something expendable (like an ARM7 board, or a Raspberry Pi), I'll hook it up to the Parallella. For my project, I intend to build the converter into the PCB carrying the AVR. Not planning to roll a daughterboard - but something which interfaces to the Porcupine - likely cabled for now.
You can order these as separate modules from the likes of .
Assuming I am able to get something sane happening with my veroboard prototyped converter - it seems fairly sound based on DMM measurements, but I might wait until I can scope it at work next week before I potentially risk my Parallella. Hmmm... I guess I do have a Raspberry Pi lying around with no purpose - perhaps it will make a good canary
Obviously there are IC-based solutions which might be more appropriate where high-speed interfaces need translation - like the . This provides a similar wide-range of operation, and also bi-directional - but the current driving capacity is minimal, so you can't use it for switching loads.
Anyone used the BSS138 converter before, and familiar with their performance/speed (with/without pullups - since those are only needed for open-drain outputs such as I2C) and want to provide some input? (at whatever voltage you like ) Or want to suggest any alternatives?