I am currently using the ATXmega32A4U, so you can easily change that for the 64A4U, or the 128A4U. However those variants aren't available at the moment. Since I'm using a *U series chip, I get full speed USB. Also, the U series is a bit like the XMega Rev 2, and it fixes many of the issues of the first series.
I plan to use the XMega's built in USB to do all programming and communication. I plan to write a virtual serial driver for the USB interface, and use that to emulate the normal Arduino serial API and bootloader. So, no FTDI or other chip is needed. The 3.3V is provided by a separate voltage regulator capable of delivering up to 500mA.
Unfortunately, this really wouldn't work. Lets say you want to stream 320x240 video at 30FPS. That's 320*240*24*30, or 55.296 megabits per second. That's far higher than the clock rate of the XMega. Now, if you wanted to go for still image capture, or a much lower frame rate it may work. Some other important things to consider,
1) Most WiFI modules are SPI based, so data needs to be transferred via serial. 2) You generally need a TCP/IP stack on the XMega, so you can't just do DMA transfers and lave the CPU out of it 3) You'd need to pick a camera that supported SPI, or use one of the XMegas that has an external bus interface. You can't do DMA from an arbitrary set of pins. It must be done from a peripheral, such as SPI, or the memory controller. 4) Also keep in mind that 55Mb/s is above the data rate for 802.11g.
To do this properly you'd need a processor capable of doing video compression. That probably means an ARM processor running at a couple hundred megahertz, and some external RAM. I expect a real hardware manufacture would use a DSP, or custom ASIC for the task. Another possible option is to find a camera module that will compress the video for you. It probably wouldn't be cheap, but if you can get the data rate down to about a megabit per second, you could probably do it.
I plan to do lots of cool stuff with this board. 2 DACs, 16 PWM, and USB means you can do some pretty cool stuff with it. Unfortunately, uncompressed streaming video isn't one of them. As far as hardware configurations, I may produce a few if people are interested. The breadboard form factor works well for me, but I'd be open to other designs.
As far as I can tell, the XMega's DMA doesn't actually steal clock cycles from the CPU. It does tie up the data buss while doing transfers. It's got some logic to sort priorities, and breaks the transfer up into small chunks(1-8 bytes). The CPU takes priority over the data bus, and the DMA transfers data when the CPU isn't asking for data from memory. I'm not sure if in practice this is any different than a clock stealing design.
I don't think you could do any useful video work with the XMega, It's still an 8 bit CPU, and probably wouldn't be able to sustain a data rate of much over a couple megabytes a second. It's still only an 8bit CPU running at 32MHz. However those data rates are useful for audio. You can play and record audio, and possibly do some very simple compression.
A friend and I have been working on getting the Arduino framework ported over. We're using the XMegaduino port from Akafugu. We've had to do some clean up work and bug fixing, the base APIs are almost done. After porting the bundled libraries(EEPROM, Wire, etc...), I hope to write some new ones. I'l probably go for power and RTC management first.
That sounds like a really cool project. I'm not sure that it will be fast enough to process video though. What kind of bit rate are you thinking of? You can calculate bit rate by W*H*ColorDepth*FPS. One thing to keep in mind about the XMega DMA is that it's not really true DMA. It steals time from the CPU when accessing memory. However, it's still more efficient at transferring data than the CPU is.
I've thought about putting an RGB LED on the board, but I don't have enough I/O left. At least, none that can do PWM. I was thinking of putting a bi-color LED on the board though.
Thanks! That is the OSHW logo, and the USB connector is just the normal Mini-B connector. I used solder paste and a toaster oven to re-flow this board. I don't think I could hand solder the QFN chip.
As for the voltage regulator, it's an important part of the project. The idea is to create a breakout board where you can just stick it on a breadboard, add an LED, and have the Arduino blink example running with no extra components. I'm thinking of adding an LED to the next board, so you don't even need to do that:)
Once I've got the Arduino runtime and USB bootloader working, I plan to develop some additional libraries for power management, RTC, and the event system.
[attachment=0]I recently assembled the first revision of my XMega breakout board. The idea was to create a very simple breakout board that fit well on a breadboard, used the Arduino IDE and libraries, and had a USB bootloader. In order to make the board as thin as possible, I used the QFN version of the XMega. I re-flowed the board in a toaster oven and the QFN soldered without any trouble. The basic features of the board are
0.1'' headers spaced to fit on a breadboard. Narrow board leaves enough space to connect wires and components next to the pins Uses the ATXMega32a4u 32k Flash 4k RAM 2k EEPROM 16 Digital I/O 12 16 bit PWM channels 9 12 bit ADC 2 12 bit DAC 4 Serial UARTs with independent baud control. One can be used for IR comm 3 SPI, 1 capable of master/slave operation. 2 of the UARTS can act as SPI master 2 12C interfaces 1 USB port that can be used for loading code. Will eventually emulate a serial port for the arduino IDE 5 16 bit timers. Two timers can be combined to create one 32 bit timer. an RTC timer capable of waking the XMega from deep sleep. Uses 500 nano amps while sleeping. 3.3V voltage regulator with 500ma max current
I've begun porting the Arduino IDE to the board. Thanks to the XmegaDuino project, this shouldn't be too hard. So far I have a serial bootloader, digital I/O and serial UARTs working. Once I have more of the API working, I'l start work on a USB based bootlaoder, and emulating a comm port for serial communication. I'm considering another revision of this board. I'd probably break out the clock pins, and add an LED and reset button.