I have a design where we needed to swap out a K20 for a K24. As far as I can tell these two parts are pin compatible. After I swapped out the header file for the device and fixed a few differences I am able to run at 96MHz with the same code I had in the K20 however I can't get USB to work. Is there any obvious reason my K20 USB driver wouldn't work on the K24?
You need to specify which K20 and which K24 you are referring to (both have different derivatives that are also not compatible between themselves, let alone between different models).
Eg. If you are using K20F120 and K24F120 with 1Meg Flash check the crossbar master settings since K20F120 and K24F120 1Meg Flash have masters 3 and 4 respectively and so the USB will not be able to access flash based descriptor if used. If however you use K24F120 with 256k Flash its crossbar master matches the K20F120's. In both cases the interrupt vector number is different so make sure you have updated the vector table accordingly to match all interrupts used.
K20: http://www.utasker.com/kinetis/TWR-K20D72M.html / http://www.utasker.com/kinetis/FRDM-K20D50M.html / http://www.utasker.com/kinetis/TWR-K20D50M.html / http://www.utasker.com/kinetis/TEENSY_3.1.html / http://www.utasker.com/kinetis/tinyK20.html
For the complete "out-of-the-box" Kinetis experience and faster time to market
I was using the MK20DX256 and now I am using the MK24FN1M0.
I do know there are some difference in the flash but I would expect to at least be able to find an unrecognized device on the bus. I see it pulling D+ high but I don't ever see a USB device show up from the host's perspective.