> Can I set a hardware breakpoint on writing to the TOKEN control register? Or writing to any specific memory location?
That chip has a very capable internal debugging unit. Read through the Debug chapter. It has four hardware program-counter breakpoints and two additional address comparison registers.
Now you just have to find how to convince your IDE to use those resources to let you set a "data breakpoint" or "watchpoint". "Tracing" is a lowest common denominator debugging method and not what you want.
It would be very disappointing if the debugger doesn't support the chip features, but it is possible.
If it won't let you set hardware breakpoints, then you should be able to run without the debugger connected and program the internal hardware with WDEBUG instructions from your code to create a debug interrupt when a memory location is accessed/written. Getting that working might take you a while.
From your description (taking hours to trigger) I'd suspect a simple (and stupid) "interrupt versus mainline Hazard" in the code somewhere. Some piece of mainline USB code is probably messing with a data structure or some USB registers without disabling CPU interrupts around a critical section, and if the interrupt comes in at exactly the wrong time ...
I'd suggest reading through all the USB code and looking for anything like this. You could start with disabling interrupts around large slabs of the USB code and see if the problem goes away.
I'd also suggest trying to get it to fail more often to make your testing easier. I'd program a spare timer to interrupt at a very high and somewhat "random" rate (at least 50kHz) to try and make USB interrupts happen at different times during the mainline.
Tom