I'm seeing behaviour where an EPEC transfer will end early during the microcontroller's receipt of a packet over the USB. It's a 64 byte EPEC transfer that has been set up to handle a 64 byte USB packet. I get a variable number of bytes being transferred (typically in the 20s). The data sheet says that the EPEC injects MOVs into the instruction pipeline. I can 'fix' the problem completely (i.e. all 64 bytes are transferred) if I artificially hold the micro in a tight 'while(1);' loop during the EPEC transfer, but as soon as it's doing something more complicated like accessing memory it drops out. This is day 3 now and I really don't get it. Anyone got any ideas? James
After many hours I seem to have found the problem. I discovered that bus accesses on my code segment included a whole bunch of unnecessary wait-states that was slowing the CPU right down. So much so that the USB receive FIFO wasn't being serviced often enough and was dropping bytes. James