Ever since I was a kid, I always wanted to develop my own video game console. I started using the Pi Zero W as my development board, which is great for developing software apps, learning more about low-level Linux APIs, learning how to develop my own Linux OS stack (I bought a book on the Yocto Project), I've been learning circuits, and how to design PCBs.

So, I definitely believe that there's quite a bit that goes into developing an embedded system, but I don't understand what all goes into it that makes it difficult. For example: people keep asking when the fabled "Raspberry Pi 4" will be announced, and the response is "not soon" at best as not only does the Pi 3 fulfill the Pi Foundation's mission to provide a low-cost computer for educational purposes (it really is a great little board), but it's also been stated that a hardware re-design would be required for a more powerful SoC. Also, but the Pi Foundation is also working with manufacturers to meet current demands for the products it provides which is partly why the Pi Zero/W is limited to 1 per order.

So, what I'm asking is: how do I go from a Raspberry Pi, to building my own RetroMini. Here's the RetroMini: https://www.youtube.com/watch?v=LIfecgHhA_4. I understand that the RetroMini uses an AllWinner SoC while the Pi uses a Broadcom SoC, which has different business implications (manufacturing contract, NDA, etc), but is it possible to buy just the surface mount SoCs to mount on a custom-made PCB for prototyping?

I know these questions are too broad for a forum thread, I wouldn't doubt it if it took years to learn the necessary skills, and I'm sure I can't do it alone, but this stuff fascinates me. Are there any learning resources out there to start learning this, or is my only option to go back to college for computer engineering?

Ever since I was a kid, I always wanted to develop my own video game console. I started using the Pi Zero W as my development board, which is great for developing software apps, learning more about low-level Linux APIs, learning how to develop my own Linux OS stack (I bought a book on the Yocto Project), I've been learning circuits, and how to design PCBs.

So, I definitely believe that there's quite a bit that goes into developing an embedded system, but I don't understand what all goes into it that makes it difficult. For example: people keep asking when the fabled "Raspberry Pi 4" will be announced, and the response is "not soon" at best as not only does the Pi 3 fulfill the Pi Foundation's mission to provide a low-cost computer for educational purposes (it really is a great little board), but it's also been stated that a hardware re-design would be required for a more powerful SoC. Also, but the Pi Foundation is also working with manufacturers to meet current demands for the products it provides which is partly why the Pi Zero/W is limited to 1 per order.

So, what I'm asking is: how do I go from a Raspberry Pi, to building my own RetroMini. Here's the RetroMini: https://www.youtube.com/watch?v=LIfecgHhA_4. I understand that the RetroMini uses an AllWinner SoC while the Pi uses a Broadcom SoC, which has different business implications (manufacturing contract, NDA, etc), but is it possible to buy just the surface mount SoCs to mount on a custom-made PCB for prototyping?

I know these questions are too broad for a forum thread, I wouldn't doubt it if it took years to learn the necessary skills, and I'm sure I can't do it alone, but this stuff fascinates me. Are there any learning resources out there to start learning this, or is my only option to go back to college for computer engineering?

I think a custom PCB is an option from the licensed contractors, Element14/RS.
Start with Zero or CM prototype and then do a PCB with what you need, however expect to pay for lots of PCBs.
But it is only 1000's of boards if I remember right?

RPF before they were RFP had trouble finding someone who would only do as small as 10,000

I guess it depends if you want to just develop the hardware or you want to write the games too.
Doing both probably means double degree?
The easiest way is just to copy someone else's design like that Retromini.

So, what I'm asking is: how do I go from a Raspberry Pi, to building my own RetroMini.

An embedded system product like the ReroMini is simply something like the Raspberry Pi altered to do what is required for that product. A product is often a prototype built from something like a Raspberry Pi and other parts but in a form more suitable for that final product.

If all the parts used for the prototype are available they can be used for the final product. If not available one has to use parts which are available and alter the prototype to suit what is in the product.

The problem with the Raspberry Pi is that the processor SoC is not readily available separately. The best one can do is obtain it as a Raspberry Pi model (ideally the Compute Module) and use that or use a customisation service like Element 14 offers.

Also, even if you could obtain Pi SoC's through unsoldering them from other Pi Boards or some other source; there is the issue of software required to start up the SoC and use it. One would need to have legal and licensed software available. You might not be able to use the software which is used by the Foundation because of licensing and ownership issues.

You could choose to ignore such issues for a one-off or personal project but not in a commercial product.

Lack of availability of SoC is probably the only specific difficulty with starting from a Raspberry Pi; everything else is pretty much as would normally be involved in moving from prototype to embedded product.

If you simply want to build a RetroMini type thing that is relatively easy enough. Take your Pi, an LCD, some buttons, battery, and case and put them together. That's entirely achievable.

I want to learn how to design and build the embedded hardware, and build my own software stack.

I think a custom PCB is an option from the licensed contractors, Element14/RS.
Start with Zero or CM prototype and then do a PCB with what you need, however expect to pay for lots of PCBs.
But it is only 1000's of boards if I remember right?

I'll look into Element14. I knew that they do basic Pi soldering mods, but I didn't know that they could transplant a Pi's SoC onto a custom PCB. I was thinking of going through Seeed Studio for prototyping PCBs. Yeah, I planned on starting with a Pi Zero, and then work my way up to designing my PCB in EAGLE. I wouldn't doubt it if PCBs get expensive due to all the one-off orders. I've looked into homebrew solutions for fabricating PCBs for prototyping, but haven't found anything promising yet. When you say 1000s of boards, are you saying that it's expected that I'd go through 1000s of PCB iterations, and subsequently need to purchase 1000s of PCBs one at a time during the prototyping phase?

Making a clone of the Retromini PCB doesn't sound like a bad idea. I could learn a lot through observation by closely studying it. I'm sure my first attempt will miss traces, components, or get the wrong components.

Then just run RetroPie?

I've actually been building my own front-end. RetroPie is cool, but the UI can be laggy at times. The game scraper is a nice touch, but you have to re-scrape everything whenever you change games. I started writing my own UI since I do have experience doing that. I think I can provide a nice, lightweight UI without X11 (I've looked into the raw FB, DirectFB). I do plan on supporting emulators first instead of dedicated games. I think there are some interesting features I can add to it with my current software skills, and it gives me a chance to learn more about emulators. I could write software that'll listen for changes in the ROM directory, and update the UI when ROMs are being copied, finish being copied, etc from USB or wifi (thought about doing it all via HTTP with a REST API since parallel uploads are faster). I can also build my own ROM database for boxart and metadata, which I've put quite a bit of time into. So, the user uploads a ROM to the device, and the device automatically grabs and caches the metadata in storage upon completion based off of its header data.

I also thought about going the AllWinner route instead of Broadcom since it sounds like the barrier of entry to get ahold of them isn't horrible, but we'll see. I'm sure there'll be compatibility issues to worry about between the Pi Zero's Broadcom chip, and AllWinner, but maybe it's not that bad? Maybe...

An embedded system product like the ReroMini is simply something like the Raspberry Pi altered to do what is required for that product. A product is often a prototype built from something like a Raspberry Pi and other parts but in a form more suitable for that final product.

Yeah, that's what I'm going for I'm just unfamiliar with the process of going from the prototype I've hacked together with a Pi to a custom PCB that's specialized to my project's needs. A lot of seems straight forward: copy the relevant parts of the Pi's schematic, and add my breadboarded elements to it, but it's just like you've said: The SoC's not easy to get ahold of, there'll be licensing issues to get the startup software (I wouldn't even know where to start with getting it off the Pi), and the Pi's schematic is vague to due Broadcom's confidentiality requirements.

I think the first question I need answered is: how do people generally learn how to work directly with SoCs to make their own embedded system? Is this generally learned in computer engineering programs in colleges, on-the-job at large companies (such as Broadcom, ARM, Sony, Apple, Nintendo, etc), or is it a mix of both? I mean, you have to start somewhere, right? It sounds like SoC availability will eventually be my largest hurdle. I'm kind of interested in the story of how the original Raspberry Pi and its various clones were developed. Maybe I can learn from that.

I think the first question I need answered is: how do people generally learn how to work directly with SoCs to make their own embedded system? Is this generally learned in computer engineering programs in colleges, on-the-job at large companies (such as Broadcom, ARM, Sony, Apple, Nintendo, etc), or is it a mix of both? I mean, you have to start somewhere, right?

Mainly on the job I would say, though not necessarily large companies.

People have or acquire an interest in electronics or software engineering, learn theory and skills at college, join companies where they gain the experience in actually doing it, often as part of a team which provides mentoring and additional assistance.

Others learn and gain experience through pursuing the same as a hobby, though they won't usually have the resources and tools which employment in the field may provide.

Getting skilled, experienced and capable is an ongoing process, just as in any other field.

As in anything; it's start small and grow from there, get better as you progress. Learn chord sequences before the symphony, swim a length before swimming the channel, build a simple PCB before a more complicated one.

One of the problems with the SoC used by the Raspberry Pi is its rather secretive nature compared to other products. There are no full datasheets, no full electrical specifications which can be easily obtained. That might not matter depending on what one is doing but may be essential for some things, like laying out tracks or boards. One probably needs a commercial relationship to obtain that information.

Unless I had a commercial relationship with the manufacturer of the SoC or someone who did, the SoC used in the Raspberry Pi is not something I would elect to use in an embedded product which wasn't using a Raspberry Pi board.

On a smaller scale, there is also Geppetto, who have NO minimum quantity (but $2000 setup)
and can build your custom design at around $40 per unit (based around the compute module - so you'd have to add $25 for those)

If you want to do a Retromini type design it is actually not that hard design wise.
To get the framerate up look for parallel LCD data bus, in Pi land that is called SMI mode.
For the rest of world - 6800 or 8080 mode.

There are some Arduino LCD's that have this 8 or 16bit parallel data mode.
ttps://ultibo.org/forum/viewtopic.php?f=14&t=538&p=6200&hilit=SMI#p6200

A 320x240 LCD in parallel mode should give you 60fps? Forget trying that in SPI mode.
There is some code around that only changes the moving pixels, ones that don't change don't need to be touched.
You could try it with a SPI LCD, I suspect 320x240 might be ok, 480x320 perhaps too slow.

Most of the 2.8, 3.2, 3.5" SPI LCDs are 320x240, might cost you $20 to get and test.
Look for Arduino LCDs where all the pins come out the PCB, then you can test both parallel and SPI.
There is a DPI mode on bigger LCDs but that uses just about every I/O pin.
The promised (implied) DSI displays are very few.

Olimex had a similar how to start issue when they first started making Linux boards.
So they started with a iMX233 TQFT package, which can be soldered by hand and it had full datasheet.https://www.olimex.com/Products/OLinuXi ... e-hardware.
Obliviously they regarded it as a success as they now make much more complex ones.

Will the iMX233 be good enough for your Retromini?
Designing the PCB with Eagle is okay if you can do it 2 layers, 4 layers or more is usually needed for BGA packages.
Soldering those POP BCM2835 packages, er no thanks, even professionals would lose a bunch tuning that processes.
A very good reason Sony is used to do this, they are one of the few who can solder them in the UK.

A Zero plus parallel LCD and a few switches could be used to develop nearly all the software on.
A CM might be better as you get more I/O. No need for PCB just solder tiny wires to the edge connector pads.
Prototyping on the cheap, some hot melt glue is great to hold it all together.
Or do/get a Gumstix/Geppetto

Using the LCD in 8 bit mode will get you some Zero GPIO back, enough for switches if the framerate was fast enough.

Plenty of small run Chinese PCB makers around, you may get a half dozen PCB for a few hundred dollars.
My rule of thumb is, third time is the charm, ie it takes three tries to get a good PCB design where everything fits and works.

As for learning how to do all this, it starts before going to Uni, well it used to, not so much when Pi's started.
The Pi's came about because kids showed up at Uni without knowing how to do all this.
It was easier in the old days, no such thing as a SOC, the closest I got to it at the time was the DragonBall 68328.

You can get mini module PCBs with the SoC and memory on a tiny carrier PCB, it makes it easier as you only have to make a simpler motherboard.
The common term for these are breakout boards. More complex one are called system on module.
These are quite common for Bluetooth and WiFi modules.
RF is very tricky, you really do not want to design them yourself.

The biggest task is going to be the software, normal rule of thumb 5-10 software guys for every hardware guy.
For you that mean software will be 5-10 times harder, 5-10 times longer or both at once.

I am not a software guy, I design hardware, so for that reason I use Ultibo.
Else it would take me 10-100 time longer to do the software, with the advantage I don't need to master the Linux OS as well
Since the Pi's came out my poor little brain has never worked so hard even at Uni.

Generally you learn this stuff before or after Uni, some people are trying to change that.
I now work in a Uni, it can be a struggle to get even the basics taught.
Not many could learn the complete DIY Retromini in that time. It would be at least a double degree.

All us oldies stayed up nights and weekends coding and soldering to learn in our own time, most of us still do

Mainly on the job I would say, though not necessarily large companies.

People have or acquire an interest in electronics or software engineering, learn theory and skills at college, join companies where they gain the experience in actually doing it, often as part of a team which provides mentoring and additional assistance.

Others learn and gain experience through pursuing the same as a hobby, though they won't usually have the resources and tools which employment in the field may provide.

Getting skilled, experienced and capable is an ongoing process, just as in any other field.

You bring up good points. I was hoping that I could learn how to do this stuff myself, but it's like injection molding or PCB fabrication: there isn't any desktop-class equipment to do this stuff (only industrial), and getting ahold of any SoC for just prototyping is difficult and expensive. I'm considering the AllWinner route for an SoC if the barrier of entry is reasonable. I'm still going to use my Pi Zero W as a development board for as long as possible because it is an embedded system with GPIOs on it. There's quite a lot I can learn from it, especially from the embedded OS side of things.

It's like you said though: learn the chords before composing the symphony. I have plenty of theory I need to wrap my head around regarding circuits. Going back to college to get another degree is expensive right now, so I've been reading up on computer engineering degrees trying to find out which books the courses require. Then, I can figure out how to obtain them, and go from there.

On a smaller scale, there is also Geppetto, who have NO minimum quantity (but $2000 setup)
and can build your custom design at around $40 per unit (based around the compute module - so you'd have to add $25 for those)

Even cheaper, design your own compute module carrier and get those PCBs made up ... or just use a ready made pi 3

That's pretty sweet! I heard about this through The Ben Heck show a while back, but I thought it was only for performing small modifications to the board such as soldering/unsoldering stuff from an original board. I'm still stuck in the learning phase of how to design hardware though. I'm trying to figure out what I need to learn, and unfortunately, these lead to me asking really ambiguous and open-ended questions

It's targeted for desktop OpenGL, so those features would only transfer over to OpenGL ES 3.0 (The Pi can only go up to 2.0). I found this book extremely helpful at the beginning of 2010 when I finally wanted to jump to 2.0 and learn shaders:https://www.amazon.com/OpenGL-ES-2-0-Pr ... ming+guide

If you want to do a Retromini type design it is actually not that hard design wise.
To get the framerate up look for parallel LCD data bus, in Pi land that is called SMI mode.
For the rest of world - 6800 or 8080 mode.

My device actually won't have a display on it. I'm actually streaming the data to my TV wirelessly. Ironically, I don't need OpenGL either, and the GPU will be used for compression, which is kind of a double-edged sword considering the main perf bottleneck should be uploading uncompressed data, and downloading the transformed, compressed data to and from the GPU.

I thought about using a Pi Zero W, but if I were to make this a finished product, then I'd want my product to have a single USB port that can both transfer data, and charge it. I was going to breadboard an Adafruit PowerBoost 1000C to the Pi Zero W's OTG USB port, but I'm not sure how dangerous that is the more I think about it...

I'm also cramped for space with the product I've designed. I'm basically putting a Pi Zero W in a gamepad I designed in Autodesk Fusion 360 that streams emulated games to set-top box apps I've written. I've got a bunch of ideas for software features that I wish the SNES Mini Classic had. The problem is, with the Pi Zero W being on a separate board, my enclosure's internal support ribs are too tall. This can cause defects during the injection mold process, and increases the cost of tooling and unit costs. Consolidating my gamepad into a single board will allow me to shorten the design, reduce plastic part production costs, eliminate defects, and give the PCB proper structural support for when fingers press down on the buttons because my current design doesn't do a great job there.

An alternative is do it all with a FPGA, experts only apply

I recently started learning about those, and then I discovered the Super Nt. REALLY cool concept.

The biggest task is going to be the software, normal rule of thumb 5-10 software guys for every hardware guy.
For you that mean software will be 5-10 times harder, 5-10 times longer or both at once.

That's good to know! I will keep that in mind as I learn more about the YOCTO Project. I'm currently learning more about the Linux OS stack, and it's been an exciting ride. I've put off doing that for years.

Generally you learn this stuff before or after Uni, some people are trying to change that.
I now work in a Uni, it can be a struggle to get even the basics taught.
Not many could learn the complete DIY Retromini in that time. It would be at least a double degree.

Nice! Where would you recommend I start to learn the hardware side of things? I bought these books:
Digital Systems: Principles and Applications
The Elements of Computing Systems

Regarding software: I need to learn the Linux OS stack to build my own embedded version of Linux that can handle power management properly (shuts down the OS when battery is low, doesn't turn on when battery is too low, etc). This will also help me develop a software update feature. One glaring criticism that haunted the RetroEngine Sigma's launch was software updates, and I personally don't like how large and out-of-hand system updates have gotten with smartphones and other embedded devices. I'm trying to keep this OS tiny.

All us oldies stayed up nights and weekends coding and soldering to learn in our own time, most of us still do

I'm with you there. I'm only 28 now, but I've been obsessed with code since I was 14 when I started learning C++ and DirectX 9. Looking back at it, I bit off way more than I could chew... I still pull all-nighters learning new stuff like I did back then. It was all about building arcade cabinets 3 years ago (built 1), and 3D printers 2 years ago (built 2). It makes me a zombie during the days, and my friends miss me from time to time, but it's fun. I love it.

However if you want to emulate any old game that is a different skill, stick with RetroPie

I'm just targeting SNES for right now. I've got a SNES emulator's code running, and outputing audio and video to my own OpenGL ES 2.0 window. Going to switch that over to streaming once I get the web clients written (I've been learning Angular 4 and SQL since that's all anyone seems to be hiring for where I live). The web client will replace Emulation Station, and run off of separate hardware from the console I'm building. It's a strange setup, I know haha.

They still needed to be masked, bathed in acid, and cleaned, but at least I can get some idea of the layout figured out while I learn more about circuits, and how to make PCBs. I can make the traces thicker, have wider gaps, and use larger-packaged components in the beginning. That should allow me to reduce the cost of PCB prototype costs, and lead times. It's just a matter of getting SoCs to mount onto those designs once I'm at that point. I might try AllWinner.

Probably not.. SOC devices generally have very small PCB footprints which wouldn't be suited to DIY PCBs.
I've made PCBs in the past using the method of printing a 'mask' on a laser printer, exposing using a UV lamp and then developing/etching the PCB. Worked fine for larger TSOP or SOIC package ICs but certainly not for anything requiring more than 2 layer PCBs/complex vias etc that are common requirements for SystemOnChip packages like on the raspberry pi.
Beyond making the actual PCB, SOCs often require reflow soldering and whilst people have done this in a hobby environment it requires additional equipment.

If you have done C++ and DirectX ignore my comments about coding, you already know more than me

We make PCBs here, designed in Altium, laser printed then a photo mask made with UV box.
Film Laminated to the copper on PCB, then exposed and developed then spray etched.
10thou (0.254mm) track width border line, 12thou sort of ok, 15 thou good.
Double sided only with no plated through holes or vias, no solder mask.

This is fine for motherboard that Pi's plug on to or Pi hats.
44pin TQFT ok DIY PCB, 208 pin TQFT only on pro PCB. BGA forget it.

Got about 20% success rate for a pre-tinned LGA package on DIY bare copper PCB.
Solder mask PCB and stenciled paste would be better to stop the chips falling off the pads.

So soldering could be done DIY but get a professional PCB with solder paste mask.
That laser could do the paste stencil? Would solder mask be needed if paste stenciled?
So many Chinese PCB makers, get a pro board made if you even think BGA.

I want to try UV laser on film coated PCBs, that would eliminate the laser paper artwork/photo-mask step.

It sounds like I'm out of luck when it comes to working directly with SoCs for the time being. It's ok though. I need to get better at a few things. I could be getting better at circuits, I could be learning more about writing device drivers, and I could be learning more about the Linux stack in general. I've also got a few books on computer engineering that I can read through, and they're pretty large.