After tearing everything up and restarting at least three times, I've finally got a PCB design I like. I don't think it's possible to be completely satisfied with a PCB when you've spent hours staring at it, but the important thing is that it’s done and ready for a prototype.
The hardware is largely the same as the backplane system I’ve been hacking together since the start of the project, but it’s all on one board. Here’s a quick overview:
- 68008 CPU: Mackerel uses the 52-pin variant for 4MB of address space
- 512 KB Flash ROM: Only 492 KB are usable as the rest of the address space is used for memory-mapped I/O.
- 3.5MB of SRAM: This does look a bit silly on the board, but it’s simple to wire and use.
- XR68C681 DUART – The workhorse of the system, providing two serial ports, a timer interrupt, and now bit-banged SPI. The two serial ports are connected to “standard” FTDI USB adapter headers. These are pretty common and what I personally use. The pins are all labeled, so they could easily be adapted to another style of adapter with a few jumper wires.
- Expansion header – I crammed as much as I could into a single 2x20 pin header. Dropping the high address bits seemed like a reasonable compromise since all of that address space is already filled with RAM. There’s room for a single peripheral device (or more with additional off-board decoding) with interrupt and DTACK support.
- SPI headers – A new addition to the system, using the DUART’s I/O pins to bitbang SPI/SD card connections.
One of my major goals when I started Mackerel was to build the simplest SBC that could run "modern" uClinux with a m68k CPU (i.e. not kernel 2.0). I don’t know if this counts as simple anymore, but it is most definitely a single-board computer. I’ve also designed the board with 100% through-hole components. Technically the two PLCC parts are surface-mount, but their sockets are through-hole, so the soldering is easy.
There are a few by-design limitations of Mackerel-08 (some of which can be addressed in future revisions):
- As mentioned earlier, the expansion header is only exposing the lowest 16 bits of the address bus. As this board is intended to be used with lots of onboard RAM, this should not be a major issue, but it prevents some “off-label” uses. Time will tell if the compromise was a good one.
- I have not included any of the bus mastering or synchronous/8-bit peripheral pins. Personally, I don’t have a need for these. They’re both a bit out of scope for the goals of the Mackerel project.
- Only two interrupts are mapped. IRQ level 1 is connected to the DUART and IRQ level 2 goes to the expansion header. Again, this is mainly to keep hardware complexity to a minimum. Since it’s possible to map multiple interrupt sources onto the one interrupt input on the expansion header (with additional decoding hardware), this should also not be a huge limitation. The trade-off is that the interrupt handlers would have to do more work to determine the source of the interrupt.
This is not designed to be a do-everything system. I’ve mainly focused on the hardware required to get Linux running and deferred everything else for future iterations.
I’ll be submitting the PCB to the manufacturer in the next day or two once I’m convinced I haven’t missed anything obvious in the design (there’s always something, right?). IWhile I wait for delivery, I’ll be working on a Linux driver for my new SPI/SD card hardware and cleaning up some documentation.
I’ll post the v1 schematic in PDF form here and once I get the boards delivered and brought up, I’ll be able to share the Gerbers as well. All of the design files and code already exists on Github if you want to check it out.
https://github.com/crmaykish/mackerel-68k
https://github.com/crmaykish/mackerel-uclinux-20160919
For the curious, here's what the routing looks like (inner power and ground planes not shown):
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
*obligatory "Holy Mackerel" comment.*
Are you sure? yes | no
Somebody had to make it :-)
Are you sure? yes | no