Стоп-стоп-стоп. KEIL в 0-й сектор загрузил какие=то свои части (что-то связанное с вектором прерываний и используемыми данными, и ,похоже, стартовую часть.
Наверное у него были на то причины - посмотрите, откуда начинается исполнение программы и где находятся вектора прерываний у ядра ARM. Если вы хотите влиять на эту "кухню" - надо изучать коипилятор и его возможности более глубоко. В частности, изучать линкер и управление им. Я не работал в Кейле с ARMами, по чужим собщениям на форумах могу сказать, что ключевое слово для поика - scatter file.
Загруженная таким образом программа нормально работает, если в ней не было изменений в области прерываний и используемых данных.
Вот тут давайте отделять мух от котлет. Вы ведь можете с помощью отладчика или утилиты внутрисхемного программирования вычитать содержимое этой области и сравнить с тем, что вы пытались туда записать? Тогда будет ясно, в чем проблема - не пишется или пишете что-то нерабочее.