alvieboy

IO devices for ZPUino

Recommended Posts

Hi,

ZPUino, being a SoC, includes some "classical" IO devices, such as UART, SPI and timers. It's a fairly small design however, using (as I write) only 18% of one S3E500. So there is plenty of space to implement other device handlers in hardware.

One I'm already planning to add is a full USB 1.1 or 2.0 controller core (you'll only need proper transceivers).

What hardware devices would you like to see on this SoC ?

Right now we have: 1 UART, 2 SPI, 1 SigmaDelta, 2 16-bit timers (PWM-capable), 1 CRC16, plus 32-bit GPIO and interrupt controller.

GPIO pins can have special functions, like in most SoC. That's the case for most IO pins on ZPUino.

Álvaro

Share this post


Link to post
Share on other sites

It looks like you have all the basic cores covered! I just took a look at the ATmega328 datasheet to see if there was anything we were missing and the only thing I see is I2C.

One neat thing that we can do that will greatly simplify adding support and will end up with better compatibility for the ZPUino is to take the peripherals from a AVR168 project that I have and implement them in the ZPUino. That way we can have a USART that behaves the exact same way that the Arduino expects it to behave. Or Timers that have the same registers and bits etc, we can just change the memory location if we need to. We can even make the ports act the same with the familiar DDRx, PINx, and PORTx designations. It would all be under control of the ZPUino with the benefits of a 32 bit processor and the 100Mhz speed but the peripherals would have maximum compatibility! And best of all we already have high quality VHDL modules for all of this functionality, in the end it will make adding support for the ZPUino into the Arduino codebase even easier.

So back to the original topic, I'm stoked about the USB controller. I've been meaning to make a USB Wing with just the USB transceivers for some time now. It will be really awesome if we can make it a USB Host.

I already have an Ethernet Wing with an RMII transceiver, but the problem is I have not seen an Open Source core that supports RMII yet, only the larger MII interface.

We also have a VGA Wing so it would be neat to make or adapt a VGA core.

We also have a Stepper Controller Wing and we already have a custom core that could be integrated.

I'm very excited about this ZPUino project!

Jack.

Share this post


Link to post
Share on other sites

I2C should be quite straightforward to implement.

Mapping registers directly should not be a good idea, because one is a 8-bit micro, the other one a 32-bit :) You'd lose some interesting stuff like 32-bit SPI reads. However software can be of great help here, and we can virtually map those familiar registers in the real ones.

USB host (at least for USB1.1) should be very easy to implement, not quite sure about its size though.

I'll take a look at Reduced MII to see what we can do about that. VGA might be harder, because we have little RAM already (are you planning any 8 or 16 bit external SRAM Wing?)

Right now I'm improving  bootloader and C startup routines (make them smaller and more efficient) so that we can compile C++ and use out-of-the-box. Might need some changes to toolchain code, not yet sure, but those should not be hard to do either.

Álvaro

Share this post


Link to post
Share on other sites

USB: I've read that USB cores can get pretty big, if a USB host core turns out to take to much resources then we can always make a Wing with a physical USB Host chip. It is worth the effort to be able to add $5 Wifi dongles.

The VGA Wing I currently have is only capable of 8 colors, so the video memory that would be required is pretty small.

A SRAM Wing poses some challenges but I do have a design that is nearing completion that is a Papilio One with SRAM.

Jack.

Share this post


Link to post
Share on other sites

Right now, with a few HW additions, ZPUino uses 20% of an S3E500, so there should be enough room for USB host/device (if they don't require too much blockram).

SRAM would be wonderful, even if we have to deploy some sort of cache to speed up things a bit.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now