General discussions about V-USB, our firmware-only implementation of a low speed USB device on Atmel's AVR microcontrollers
-
razvan784
Post
by razvan784 » Tue Dec 02, 2008 5:10 pm
The latest version (20081126) doesn't work from the boot sector in ATmega128 and probably other devices when the code needs to read from Flash at >64k. As a workaround, I modified usbportability.h to use far reads (ELPM instead of LPM), but it's not elegant, as non-boot code should use the faster near reads (LPM).
Code: Select all
#if defined (__AVR_ATmega128__)
#define USB_READ_FLASH(addr) pgm_read_byte_far(addr)
#else
#define USB_READ_FLASH(addr) pgm_read_byte(addr)
#endif
-
Grendel
- Rank 4
- Posts: 167
- Joined: Sat Dec 16, 2006 9:53 pm
- Location: Oregon, USA
-
Contact:
Post
by Grendel » Wed Dec 03, 2008 1:47 am
Hm, w/ gcc this could be modified to
Code: Select all
#if FLASHEND > 0xFFFF
#define USB_READ_FLASH(addr) pgm_read_byte_far(addr)
#else
#define USB_READ_FLASH(addr) pgm_read_byte(addr)
#endif
to generally allow for devices w/ more than 64k flash. avr/io.h defines FLASHEND based on the selected device.