Пробуем грузиться со второй Flash STR912 (которая 32k). В новой версии RVDK (3.04 вроде бы) появилась возможность переключить загрузку на вторую Flash записыванием конфигурационной области (добавлены новые алгоритмы программирования flash ICP). Переключить Flash вроде бы получается, прошить ее тоже, однако вот программа из нее стартовать никак не хочет. В стартапе устанавливаем регистры BBADR = 0x400000, size = 32k, NBADDR = 0x0, size=512k. Потом еще в настройках проекта указываем, куда грузить программу (либо на вкладке Target, либо в sct-файле - пробовали и так и эдак) - адрес 0x400000. Вообще, с этими адресами возникли непонятки: стандартный стартап устанавливает второй флэш адрес 0x400000. Как понимаем, это ее физический адрес - адрес, по которому нужно прошить программу (для алгоритма прошивки). Т.е., стартап устанавливает логический адрес, равный физическому. Как только регистры BB и NB инициализируются у второй flash логический адрес уже 0x0? Тогда непонятно, почему после линковки абсолютные адреса переходов устанавливаются со смещением 0x400000?
Попробовали сделать так: скомпилировали программу для адресов 0x00, а зашили по адресам 0x400000. Пришлось для этого создавать второй проект, куда вставлялся откомпиленный образ первого и выставлялись адреса 0x400000.
В общем, после всех этих манипуляций и переключения флэши для загрузки со второй (bank1, 32k) процессор теперь уже вообще не перепрошить и не переключить назад. Пишет COULD NOT STOP ARM DEVICE! Такое уже бывало после переключения на вторую флэш, но это обходилось переключением назад на первую (для этого приходилось удерживать ресет перед началом прощивки, потом быстренько отпускать... чтобы программа, видимо, не успела запуститься). А теперь и эти фокусы не помогают!
Кто-нибудь пробовал грузиться из второй флэш?
|