TDD is pretty difficult when you don't have a very clear idea of what's the best way to achieve what you want to do – which is most projects most of the time.
It's usually also a hard sell for management, especially if the project is on its first steps and it has to show something functional in order to keep its budget.
Last but not least, the problem domain for unit tests is pretty focused. The parts of the code that are suited for unit testing may not be all that much. I know that TDD is not just unit tests but I mentioned it in the context of this discussion.