Sounds like a classic crank sensor issue to me.

They pretty much never throw codes when they fail.