Why do some airports not have ICAO codes? 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?
There is plenty of information on the Internet on how certain and specific identifiers came to life, however the codes are sometimes not directly assigned by ICAO, but by the member nations.


  ICAO Document 7910 - Location Identifiers contains codes allocated by national governments, on behalf of ICAO, to airports, airfields and other facilities such as ATC and weather stations. 


Ultimately, it is the national CAA's or other authorities' decision whether to assign a code and get it validated through ICAO. The decision may be based on political, historical or other reasons, there is no minimum requirements for airports to receive an ICAO code.




  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?


The availability of a control tower is not a requirement for ICAO codes, even small uncontrolled fields with grass strips can have an ICAO code, example: EDKW / Werdohl-Küntrop (600m grass / uncontrolled / PPR)