Questa domanda sta essenzialmente confrontando un microcontrollore reale completo dedicato all'esecuzione di codice attendibile e solo codice fidato rispetto a un microcontrollore "virtuale", ovvero un ambiente di esecuzione fidato all'interno di un microcontrollore esistente.
Un microcontrollore con TEE esegue essenzialmente codice attendibile e non affidabile sullo stesso hardware e fornisce solo una separazione morbida tra codice attendibile e non attendibile. Dato che il codice attendibile e non attendibile condivide le stesse risorse, è più probabile che esegua attacchi di canale laterale basati sul tempo o sul comportamento di memorizzazione nella cache (ad esempio attacchi come Meltdown o Spectre) e una completa separazione hardware.
Oltre a ciò entrambe le configurazioni possono essere incasinate. Di solito il problema è che il codice attendibile e non affidabile ha in qualche modo bisogno di interagire e potrebbe essere che il codice fidato stia gestendo i dati dal lato non attendibile senza trattare correttamente i dati come completamente non attendibili. Il software può e di solito avrà bug e questo vale anche per il codice fidato. Un altro problema è come assicurarsi che solo il codice attendibile venga caricato nella parte attendibile del sistema, specialmente considerando che una volta il codice attendibile potrebbe non essere più considerato attendibile poiché sono stati trovati bug in esso.
Naturalmente, avere un singolo microcontrollore con TEE ha anche dei vantaggi. Questi si riducono ai vantaggi offerti dalla virtualizzazione: meno hardware necessario e quindi più economico da costruire, più facile da integrare e meno energia necessaria.