Quantcast
Channel: Objective Development Forums
Viewing all articles
Browse latest Browse all 4524

Minimal USB implementation

$
0
0
To understand how to optimize the memory footprint of V-USB, I created a small ATtiny85 based device that controls a single WS2812 RGB LED via USB. This is very similar to the Blink[1] and other devices.

Current functionality
* Enumeration.
* Only SETUP-request can be received.
* Responses are limited to strings from flash memory or zero sized replies.
* All SETUP packets that are not system requests are forwarded to a WS2812 RGB LED on PB0.

I went as far as stripping down all the code from usbdrv.c and integrating it into a single function. I removed all code that was not required for the core functionality and combined some of the remaining functions:

* Removed data section and initiliazed variables "by hand"
* Turned global sram variables into local variable in the main loop.
* Reduced input buffer to single size
* Removed handling of USB reset.
* Used 16 MHz V-USB code instead of 16.5 MHz
* Included assembler implementation of osccal.c

My ultimate goal was to implement the code on a ATtiny 10. Currently this is not possible, because not enough SRAM is left for the stack and not enough flash is left for the 12MHz V-USB implementation.

Current resource usage:
* 1018 bytes Flash
* 28 bytes SRAM
* Uses only regs R16-R31

You can find the code here:
https://github.com/cpldcpu/u-wire

Maybe somebody has an idea how to reduce the SRAM or flash footprint further?

Viewing all articles
Browse latest Browse all 4524

Trending Articles