← Back to Explore

Linux_soc

Not submitted card · pro

Made by
Simon

About this project

A linux capable module

MD0
1k
MD1
1k

Journals

Follow the progress behind this project.

6h

Even more Routing

This is essentially just laying out allot of stuff and following the rules. At first i wanted to do the layout of the next component, The DC/DC converter that does the DC/DC conversion of the different power levels required by the ic. It was a bit of trial and error to get it all fiitting in the right space. After this it looked a bit like this: Image Image So Now it was time to route the USB now that i know where the DC/DC Converter would go. I decided to move some components around a bit for better routing and stuff. Image Since usb was now routed i could compact the rest of the DC/DC converter components so it would all fit a bit nicer as shown above. Now it was time to route the DC/DC converter. I would take great precautions with this to minimize the EMI generated from the high frequency switching that is done. Image This took some time because this was done with great care on how it would be laid out and also the routing to also have as thick as possible traces for power ext. Image

Big ah brainfart of scopecreep

Now that i was done with the DC/DC converter i saw there was some space left over in the bottom right corner. So my genius that is almost frightening came to the great idea of placing an atmega 328P, the same microcontroller found in the arduino uno. But i wouldn't leave it at just a microcontroller, no i wanted more. So i also added a second usb-c port and usb-ttl converter so i could talk to the ic to program it. So up first was the schematic: Image Now it was time to find a way to place this all on the remaining space, at first i went for a vertical usb-c connector to save space. Image Now after about an hour i got this all in the right space and it looked a bit like this, in the end it was all very tight and lets say some basic pcb rules where broken in the making of this journal, but that is just a side effect. Image Now that i had all the loose part done it was time to tie all the ends together, only a bit of spi i2c and uart to be laid but i was almost done. These where just some puzzles to get done thru all the spaghetti but it was doable, after around a lot of time i got the PCB done. Here is it in its all and glory Image Image Image Image Image

Credits

@KOEG

3h

Routing

So for this project routing was of the essence, with high speed sd card and some other stuff i really wanted good routing for this board so i went for a 4 layer board instead of a simple 2 layer board to have better routing and power layout.

First problem

So at first i wanted to have my external inputs and outputs in a way so i could access them easily. So that meant the usb connector for the mcu and the sd card for the linux software. i did a bit of back and forth but ended up with this at the end. USB_C_AND_SD_CARD After i laid these out i kinda really hard forgot to take ss of most of the things. :heavysob: But at first i choose the top left corner of the pcb as a good place to place the linux soc ic. That would make routing of the sd card allot easier and quicker. Then i started with the supporting parts of this, like the crystal, decoupling ext, ext. Image Image Image Image Image This was all jam packed as close as possible in that corner because i knew i would still have to place allot more components in the free space, also still needed to route all the stuff and that would be pretty difficult with 4 different power rails all needing to be distributed around the board. Then i did a bit of usb-c placement for the resistors ext. Image

SD-card

Now it was time for the terror of the week, the routing of the sd-card, with a total of 6 lines that needed to be flipped because of this terror: Image I also wanted everything to be length matched because this would be my boot drive for my linux soc. I really wanted this to be good, and o yeah i forgot they also almost all need pullups attached somewhere, so i couldn't just route stuff in a way that would be easy for the length matching. after around half an hour of trying things after things to get this in a working state i got to this (still not so final) version, avoiding all do not route places that the sd card holder specifies and all the other limitations. Image Image

Credits

@KOEG

4h

Allot of design

So this is the whole problem you have when you make a complex module, this took well over 5 hrs to get the schematic right, at first i started with adding a DCDC converter i saw used with this ic, this actually took way longer than i expected because i needed to get everything in an as small as possible footprint because 30x20 mm aint much. DCDC After i added the DCDC converter i actually went into a crazy locking and forgot to take like any pictures at all and have to think about what i did so this may not 100% correct because i also did some projects in between but ill try my best to journal as much as i can remember. So after the DCDC converter i went on to and added the usb port. USB The usb port was pretty easy but then it was time to add the microsd card slot to boot from. I have never done microsd before so this was new for me but it was just pretty easy and a case of connecting 2 pins of the same name together and it went something like this: Micro_SD Micro_SD Micro_SD Then after i made all the the small stuff i went on to connect everything together, with labels as clearly as possible: main The schematic was this time just a whole bunch of searching datasheets to find the right component values, not allot of actual trace laying.

2h

Started work

So first of all i had to get started on the main part of this whole project, the F1C100s doesn't have a symbol for kicad. So i had to make this symbol myself, at first i just made all the pins for the CPU in kicad with the right names for everything out of the very bare datasheet that is included in the documentation, this is only 20 pages long and is very low detail, also has something with the letters of 'CONFIDENTIAL' written over the pages. image So i had to type everything over in kicad in the symbol editor to make all the pins, and this took a while. Its 100 pins and very little documentation so a bit of guessing about what each pin did and what for type it needed. image Then laid out everything in a nice way to have everything easily accessible and power on top gnd on bottom and io on the sides. image

Schematic

So now it was time to actually create the schematic and lay everything out, at first i started with the general layout in the root page, and created 2 sub pages for the linux soc and the PowerManagementIC. I also added the standard hackxpansion port to plug this module into a hackxpansion console. image So now i had the general layout done i started on the decoupling of the main ic, the allwinner F1C100s. This was a bit difficult because its not stated in the very short datasheet what is needed to get this thing up and running so i just came up with some things i wanted, 100nF per pin and 2.2uF per rail, so i implemented this and got this. image This was what i had done in this time, bye bye

Credits

@Koeg for the idea

20m

Started the idea

So how did this idea even come to live? Well after discussing with @Koeg what kind of crazy modules could be made we he said that i could build a linux module with the F1C100s linux capable ic. So of course i jumped at this idea and searched up this chip to realize there was almost no documentation. But still i thought this would be a fun little project to make a linux capable devboard that would fit in the hackxpansion console but still be standalone capable.

Design requirements

So i had a few requirements i wanted to set for this project, first to make it actually usable and second to make it fun. So

  1. is that it needs to fit in the hackxpansion console as a single unit module, this would make it really tiny but also really fun.
  2. it should run on a allwinner F1C100s because its cheap and the ic that sparked this ic.
  3. it should be able to run standalone outside of the console with a usb-c port for power and data.
  4. it should have some stupidly iddiot features.
  5. it should actually run a linux. (duh)