We have a custom proprietary PCB. We started our project using the MK20DX256VMC7. Everything in our implemented code works as expected using Freescale USB Stack 4.1.1, pll clocks runs at 72 MHz, and USB Clock runs at 48 MHz. Various other peripherals are setup for use such as the PIT, and DAC. USB enumerates and CDC, DFU and USB-TMC class are implemented and work using LabVIEW and DFU update program....
Our requirements changed and it is necessary to raise our clock rate to ~100MHz. So we decide to switch to MK20DX256VL10.
We have correctly setup and changed clock rate to 96 MHz, and USB clock to 48 MHz. All peripherals are working as expected EXCEPT the USB. The USB will not enumerate. When I set debug points on USB_ISR, no token completes interrupts are ever processed. Only interrupts received are Bus reset, sleeps and a single SOF. So we tried to set the clocks back to 72 Mhz. Basically we tried loading the same code on both boards one VMC7, one VL10. On the VMC7 everything works as expected. On the VL10, no enumeration. All the other peripherals used work perfectly on both boards.
Is there a difference between the VMC7 and VL10 chips that we have overlooked which would prevent the USB from working properly?
Turns out, I got it to work myself. We were using the MK20D7.h from the original project. I found many posts telling me I had to set the memory protection unit register MPU_CESR = 0; MPU_CESR is not defined anywhere in MK20D7.h or anywhere in the products manual. I finally ended up using Kinetis Desgin Studio to generate a Processor Expert Project using the MK20DX256VMC10. It imported/generated the MK20D10.h for me, which does have a reference to the MPU_CESR. Once set to zero, everything works as expected.