This is a follow up to my previous question What do numbers signify in airport codes?
In that case, I was asking why my local airport (Markham Airport) had a number in its code (CNU8). I later learned that the code was not really a code, but a Transport Canada Identifier.
This leads me to my question, Why do some airports not have ICAO codes? At my local airport, there is plenty of glider activity, and a flight school is also located there.
My main thoughts for the airport not having a code comes from the lack of an Air Traffic Control Tower. When declaring a landing, pilots have to do declare it on Traffic, which doesn't have a controller. It looks something like this (based on memory, I'm not a pilot but I hope to be one):
Markham Traffic, Aircraft Papa Lima landing on the grass strip beside whatever runway
Am I correct in assuming that airports without ICAO codes don't have codes because of the lack of a control tower? Or is there other reasons for this?