Глобальные переменные всегда идут в .data и .bss , т.е. DRAM.
Причина проста - память под глобальные переменные выделяется задолго до инициализации чего бы то ни было.
Это бутлоадер, который ничегошеньки не знает про PSRAM, пакостит.
Это он, негодяй, загружает бинарник ваш в DRAM и IRAM. Ну, не весь бинарник, а только .data, .bss, еще наверняка что-то.. .iram1.text.*, в частности.
Если вам нужны глобальные переменные гигантские (массивы, там, например), то вам к malloc(). Вернее, даже не так - вам к heap_caps_malloc(). Вот таким образом: heap_caps_malloc(…, MALLOC_CAP_SPIRAM)
Тогда гарантированно выделится память в PSRAM.
Если вы попытаетесь сделать просто malloc(), большого буфера, то он тоже будет выделен в SPIRAM. Ну а если махонький буфер - то как повезет. Скорее всего будет DRAM