We love the simplicity of Arduino for focused tasks, we love how Raspberry Pi GPIO pins open a doorway to a wide world of peripherals, and we love the software ecosystem of Intel’s x86 instruction set. It’s great that some products manage to combine all of them together into a single compact package, and we welcome the recent addition of Seeed Studio’s Odyssey X86J4105.
[Ars Technica] recently looked one over and found it impressive from the perspective of a small networked computer, but they didn’t dig too deeply into the maker-friendly side of the product. We can look at the product documentation to see some interesting details. This board is larger than a Raspberry Pi, but its GPIO pins were laid out in exactly the same order as that on a Pi. Some HATs could plug right in, eliminating all the electrical integration leaving just the software issue of ARM vs x86. Tasks that are not suitable for CPU-controlled GPIO (such as generating reliable PWM) can be offloaded to an on-board Arduino-compatible microcontroller. It is built around the SAMD21 chip, similar to the Arduino MKR and Arduino Zero but the pinout does not appear to match any of the popular Arduino form factors.
The Odyssey is not the first x86 single board computer (SBC) to have GPIO pins and an onboard Arduino assistant. LattePanda for example has been executing that game plan (minus the Raspberry Pi pin layout) for the past few years. We’ve followed them since their Kickstarter origins and we’ve featured creative uses here and there. LattePanda’s current offerings are built around Intel CPUs ranging from Atom to Core m3. The Odyssey’s Celeron is roughly in the middle of that range, and the SAMD21 is more capable than the ATmega32U4 (Arduino Leonardo) on board a LattePanda. We always love seeing more options in a market for us to find the right tradeoff to match a given project, and we look forward to the epic journeys yet to come.
There are also a number of Udoo boards offering this.
They all have failed so for for my purposes by having a non-realtime link between the x86 and Arduino cores.
What would classify as a “realtime” link?
Shared memory, SPI, CAN, others. But not USB.
Shared memory isn’t feasible unless both cores are on the same SoC die. SPI and CAN and definitely not “realtime” by any definition, and USB can be a whole lot faster than SPI or CAN.
You consider 480Mbps “non-realtime”, but 1mbps is “realtime?”
Real-time is not just bandwidth but interrupts and signal protocols – all well and good to send 480 times more per second but if it takes several tenths to get packaged and then get its turn to be sent – for things that really need extremely tight real-time timings that’s huge!
I’m not sure what they could really be wanting but there are certainly downsides to the way USB works for ‘real-time’ – that annoying vague term that for some folks could mean whole seconds but others not even milliseconds are quick enough..
The Arduino part would need to be implemented as a PCIe device with DMA capability. It wouldn’t be cheap :(
I hope with FPGAs becoming more prevalent that open source IP for a PCIe target materializes. Then that could provide provide the desired buses along with the Arduino core.
The FPGA PCIe cards that I use run open-source VHDL. I am not clear, though, if the PCI bridge is in the FPGA or if it is a discrete bridge chip. Here is one of them: http://store.mesanet.com/index.php?route=product/product&product_id=301 and the code is all included in the zip file under “specifications” (for some reason). Expand the zip until you find “hostmot2”
The picture does show more than just an FPGA, though, so I suspect a commercial PCI bridge.
(Despite writing some of the x86-side drivers for those cards, that particular detail has never mattered)
@andy that looks really close to what I had in mind. If it has some onboard ram, supports PCIe DMA and has a way to keep the RAM windows in sync, that’s great. If there is an integrated ARM core then it’s perfect. I had no idea that stuff like this had gotten so affordable!
The Udoo boards are pretty neat, too. Similar to LattePanda, they’ve put more emphasis on compact size and less on “just plugs in” benefit of Odyssey’s RPi GPIO pinout and M.2 slots. Different tradeoffs that will work for different projects.
Curious about your project, why “non-realtime link” became an issue, and your eventual solution to the problem.
And exactly how would a realtime link be achieved? Having the SAMD21 core be on the same die as the x86 core so they share registers and a clock?
That’s not exactly trivial, and would require sharing IP between competing CPU manufacturers, a custom kernel, and a major overhaul of the Arduino toolchain. Many of the bare-metal features that make the SAMD21 useful, like interrupts and predictable instruction times, wouldn’t be available at that point due to coupling with the x86 core.
Just switch from Arduino to Processing (or learn to use a real IDE/compiler toolchain) and run your code directly on the x86.
No need to share IP. I build a lot of systems that do exactly this, with a Linux kernel running on an x86 writing to registers on an FPGA. Typically using a PCI / PCIe bus, but sometimes with Ethernet or SPI or even Ye Olde EPP protocol. Other options are CAN, EtherCAT, Modbus…..
None of those are realtime links and most of them are serial, and you putting an Intel x86 core and a Microchip SAMD21 core on an FPGA would definitely require sharing IP or at least you licensing both from their respective designers.
And more importantly, if you’re doing an application where you’re comfortable with a high-end FPGA running an x86 softcore, why on earth are you using Arduino at all?
Arduino framework isn’t real time.
The systems I am talking about use a standard x86 PC running a realtime-patched kernel. The FPGA is a separate device but which requires new data from the x86 on a millisecond tick +/- a fraction of a millisecond.
It isn’t a lot of data, a few hundred bytes. But it needs to be sent on schedule.
Don’t confuse bandwidth with latency. USB is fast, but the data isn’t necessarily transmitted in the same millisecond as you write it.
The liked the idea of using the Arduino core as an _alternative_ to the FPGA as the FPGA boards are fairly expensive.
There is isochronous in the USB for real time application like audio and video with constant data rate requirement. The host reserves bandwidth for it.
1023 or less bytes for full-speed
1024 or less bytes for high-speed
Why bother with the a microntroller when you already paid for the FPGA. :P
You could implement the peripherals or even the microcontroller core(s) in the FPGA too.
To save money on future projects and boards?
SPI you say? This board has SPI on the Raspberry Pi-compatible GPIO header, and SPI on the SAMD21 Arduino. What if we take a few jumper wires to connect them together, creating a communication channel to bypass USB serial. Theoretically speaking, would that be good enough?
Yes, SPI might work.
My original comment was related to why my Udoo is on the shelf rather than in a machine, and as a query about whether this new board is different. Striaght inb() and outb() between the two cores would be ideal, but SPI could be made to fit.
They could have connected the Arduino to the LPC interface of the CPU… This allows Port IO while being slow enough to work with the AVR.
At 188 its not a bad choice for the form factor.
If you don’t need it to fit cleanly in a nice case, old Dell nucs can be purchased cheaply enough off ebay and you can stick an arduino in one of those with an internal USB header to micro USB adapters.
A more powerful microcontroller or even the addition of a little ice40 FPGA would have been welcome but at $188 it’s not half bad.
Cant think of anything I would use one for, but I’m sure some neat projects could arise
Nice Advert, OK price but the same as many new x86 mobos of a similar;ar vein
[citation needed]
We’d all love to learn about more x86 SBCs with Pi-compatible GPIO and onboard Arduino.
Name some names!
Dual Intel gigabit LAN greatly increases the appeal of this board. Interesting. Could be a decent robotics platform too.
Robotics is how I came across this item, actually. I couldn’t find a graceful way to fit the information in this post, but the DC input requirements are listed as 12-19V implying we could plug 4S LiPo battery power straight into the DC barrel jack and onboard voltage regulators will gladly deal with the dropping voltage as it discharges. (Over discharge monitoring and alert would have to be handled separately, a job for the onboard Arduino perhaps?)
Now that is neat, good range of voltage input. Wonder how clean the power needs to be – if you are say running high current motors or regen braking or a great many other robot component actions it could create some pretty intense momentary spikes even if its kept well within range..
I’d certainly try to keep it isolated enough that it wouldn’t be an issue regardless, but if it can take it that could make it even more useful, simplifying the number/complexity of PCB your robot would need.
That’s definitely an unknown for the moment. I’m lazy and I’m likely to take the easy way out: have two separate batteries, a “motor battery” for electromechanical components and a “logic battery” for brain power. Diagnosing unpredictable system transient issues is enough of a headache I’m happy to pay a few extra bucks for additional LiPo batteries to minimize the issue.
This would be ideal for building a “cyberdeck” style homemade portable computer, desktop processing power with Arduino IO capabilities in Raspi size.
Wow, look at the heatsink on that..for the performance of that intel POS, I could get a PI4, or even several PI4’s, more GPIO, and even hookup an arduino to it if I had to.
It even comes with free security vulnerabilities, free ME.
I’ll stick with the PI/Arduino combination, especially since now the PI4 boots from USB.
The Pi 4 has an ARM SoC, not x86. They aren’t the same thing.
Code is code, if it can compile, it can run. Nobody codes in X86 assembler anymore.
Only legacy, old, non-open source apps need legacy X86 mode, and for that, there are virtual machines on better hardware.
> Nobody codes in X86 assembler anymore.
Just because you aren’t experienced enough to write Assembly doesn’t mean others aren’t. x86 Assembly is still very common for high performance applications. Ignorance like yours are why modern software is so absurdly inefficient.
I code in verilog, I know more about X86 arch and ARM arch than most, because I’ve seen the verilog code, and modified it, tested it, simulated it, and have the silicon wafers on my desk to prove it.
But go ahead, write your little java crapplet.
only the very most experienced programmers can and should write assembly code and you certainly won’t find it in any java crapplet.
BLAS libraries, math, and other “hard stuff” beyond the understanding of a simple programmer like yourself can benefit from assembly.
everything else, not so much.
The Odroid H2+ ( https://www.hardkernel.com/shop/odroid-h2plus/ ) is a similar offering, but without the built-in Arduino and costs quite a bit less. At the same time, though, the Odroid sports dual 2.5Gbps Ethernet — perhaps not particularly useful for any DIY-projects, but very nice for e.g. use as a router or a low-power server of some sort.
Those are Realtek NICs and you need to add the memory yourself, so both price and performance aren’t what they seem.
Is it possible to make an x86 sbc with a Raspberry Pi’s price range and low electricity consumption?
I don’t think I need a lot of speed. I just want to run Cups on it. I want it to appear on my network as a generic PostScript printer and when printed to do the translation to my actual printer. The damn thing claimed to support Linux on the box but actually it’s drivers only really support one old version of Debian on x86 and now I am stuck with it.
I get by using drivers for a similar model and it works about 90% of the time but some things just will not print that way. Also, with every update to cups I may or may not be able to get the duplex ability to work.
I’ve been waiting for x86 SBCs to hit sub $50 prices but instead they just keep getting upgraded in speed or other features while staying more expensive than I want to pay for this project. I don’t need fast, I want cheap!
I’d use an old PC but I don’t want something that I have to turn on and boot every time I print (I’d never get the family to use it) and I don’t want to pay for or feel guilty about all that wasted electricity from running a PC 24×7.
I even tried a cheap x86 tablet. But it turned out that it was impossible to use it’s only port for both charging and ethernet at the same time. Plus the onboard wifi cuts out after a few minutes. I really do have a lot of pent up anger towards hardware manufacturers!
I so miss the days when linuxprinting.org was a comprehensive and accurate printer buyer’s guide for Linux users.
Broken laptops.
I pick up Thinkpad x220/x230 motherboards with broken individual USB ports for $5-10. You can sometimes find whole laptops with cracked screen in $10-30 range.
I can’t find the writeup now, but people have managed to run x86 printer drivers on the Raspberry Pi using qemu. That might be an option for you.
Check out the Atomic Pi. Looks like it could be a good fit for you.
These might do ya…
https://www.aliexpress.com/item/33005952879.html
There’s another version around without a back panel parallel port, but there’s a header on the board for one.
Ha, “just the software issue of ARM vs x86”
Why not both? :-)
Because, y’know, it technically is (the SAMD21 is an ARM Cortex-M0+)
Only if want use windows.. for linux arm is good and i like linux systems..
I am using an hp t620 thin client for my low power, tiny-computer project. Sure it is a bit larger than an RPI, but It has a quad core AMD with radeon graphics, and 4 gb or ram. And it was only $30 refurbished on ebay.
Same here. Runs W10Pro, mosquitto, Node-Red, wampp and a bunch of .NET apps and does file serving from a bunch of usb-sticks.
Works fine, but might not win any price for extrem speed….
Buyer advice: Make sure to buy one with power supply.
“low power” yeah I looked up that old clunker and maybe its power consumption is better than an aluminum smelter but not much
Your ballpark comparison isn’t even in the right galaxy
https://support.hp.com/ca-en/document/c04017240#AbT5
To X: What are you talking about? The thin client uses 5W idle and 10W under a high load — it is the same order of magnitude as an rpi 4 and an order of magnitude less than a regular desktop computer. I don’t know about an aluminum smelter, but my forge is powered by a bag of charcoal and a vacuum cleaner, so probably ~3-6 orders of magnitude larger than the thin client.
Another nice thing about those hp thin clients is that for additional couple of bucks you can get the t620plus which has a low profile pci-e slot
I think the people who do this should also make old computers like the Stardent and the Sequent and the Data General mainframes, or the old DEC RISC boxes , much more interesting to study than yet another PC clone. If you are gonna waste time on stupid stuff then do it right.
Yeah if one needs a computer that’s the size of a refrigerator.
An 11/780 or MicroVAX-2 ought to fit on a modest FPGA and run at much better than original speed. Maybe a DE10 board? I know it’s an expensive way to buy into learning, but it’s supposed to be “idiot resistant”. Of course I don’t know what I’m talking about… and I have this stupid beaglebone-to-S100-to-Disk1A-to-floppy project to finish first, and it’s been dragging for about 2 years now…
Has anyone found out any more info re the hardware detail on the GPIO’s? Unless I have missed it somewhere, at present there is a vague reference to them in what looks like rather slow script level calls. Similarly the detail re the interface to the SAMD21 appears vague. This aside we have a half a dozen of these in different configs and in their little alloy enclosures they are a very nice low cost piece of kit if you specifically need to run code on an x86 while still twiddling some external bits such as driving a smart external power control and reboot supervisor such as a task literate watchdog.
RE: GPIO
The example in Python was a “Hello World” demonstration and not full reflection of capabilities. Also, that script is calling via the deprecated sysfs interface.
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
In theory they should be using the character device ABI.
https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/about/
But as always, “slow” is a relative term. This is as fast as anything you can do from user mode but that might not be fast enough depending on scenario. Discussion of kernel mode code and/or applying RT-PREEMPT patch is out of scope of this article.
RE: SAMD21
Judging by the Linux device path /dev/ttyACM0, the interface to the SAMD21 is USB CDC ACM. If correct, it is used no differently from plugging an Arduino Zero into your desktop PC via USB cable. But here it is super compact and hard wired into the circuit board.
* Obvious Comparison – Full ASRock J4105-Based PC Build vs. Seeed Odyssey (TL;DR: ASRock Wins – IMO):
1. ASRock J4105 Celeron Motherboard MiniITX & CPU Combo, B079GHR8L9, qty.-1, $75.99
2. Crucial 8GB Kit (4GBx2) DDR4 2400 MT/s (PC4-19200) SR x8 DIMM 288, B019FRCY2U, qty.-1, $37.95
3. Kingston 120GB A400 SATA 3 2.5″ Internal SSD SA400S37/120G, B01N6JQS8C, qty.-1, $24.99
4. APEVIA SFX-AP400W Mini ITX Solution / Micro ATX / SFX 400W P.S., B01MEDG1PM, qty.-1, $29.99
5. Cooler Master MasterBox Q300L Micro-ATX Tower, B0785GRMPG, qty.-1, $49.99
6. Total Cost $218.91 USD
Notes:
1. Compare: Seeed Odyssey J4105 Celeron, no Windows 10, 128GB eMMC, re_computer case… $239 + shipping from China.
2. All ASRock J4105 parts prices are from Amazon.com on 07-August-2020, ASIN codes are shown, free shipping included, shipping times were 4-days or less in CONUS.
3. The ASRock J4105 Celeron Motherboard can easily accept a SATA expansion card for a NAS build, the Odyssey cannot.
That’s a nice little setup, but without GPIO pins (Raspberry Pi compatible or not) and no integrated microcontroller (Arduino compatible or not) it is not relevant to the discussion.
I have a similar setup using a Mini-ITX motherboard. The Arduino is plugged into the USB connector and I talk to it using C++. The Arduino has a wireless module and can alert me if I left my garage door open or somebody is in my yard at night. Meanwhile the ITX motherboard is my web and file server. So my motherboard didn’t have a built in Arduino but $3.56 from Banggood solved that problem.
@Roger Cheng said: “That’s a nice little setup, but without GPIO pins (Raspberry Pi compatible or not) and no integrated micro-controller (Arduino compatible or not) it is not relevant to the discussion.”
It is absolutely “relevant to the discussion”, and you mentioned why. With the PC build if you need GPIO, I2C, SPI, serial, etc., you can plug a micro-comtroller into it, any micro-controller you like. Also, the ASRock motherboard has 2 x RS-232, and 1 x LPT headers on it.
Has anyone seen an Eagle library/footprint for this SBC?