Перейти к содержанию
    

Загрузка LDR из уже загруженной программы BF537

Доброго дня. Процессор BF537. Стоит задача грузить разные LDRы в зависимости от некоторых условий. Флеш память подключена на прямую к шине. Во флеш записан LDR, который должна грузить программа. LDR формирую с параметрами Binary, 16-bit. Во флеш LDR попадает, проверенно вычитыванием из флеша.  

Распарсил LDR в соответствие с его структурой.  Происходит выброс исключения при попытке записи блока LDR в адрес 0xffa00000.

unsigned char *flashP;	
	flashP = (unsigned char *)0x20000000;
	unsigned int targetAddress;
	unsigned int count;
	unsigned short flag;
		
	do
	{
		memcpy(&targetAddress, flashP, sizeof(targetAddress));
		memcpy(&count, flashP + sizeof(targetAddress), sizeof(count));
		memcpy(&flag, flashP + sizeof(targetAddress) + sizeof(count), sizeof(flag));		
		if (flag & BFLAG_53X_IGNORE)
		{
			flashP += sizeof(targetAddress) + sizeof(count) + sizeof(flag) + count;	
			continue;
		}		
		if ( !(flag & BFLAG_53X_ZEROFILL))		
		{			
			if (targetAddress >= 0xFFA00000)
				asm("nop;");
			memcpy((void *)targetAddress, flashP + sizeof(targetAddress) + sizeof(count) + sizeof(flag), count);
			flashP += sizeof(targetAddress) + sizeof(count) + sizeof(flag) + count;	
		}
		else
		{
			memset((void *)targetAddress, 0x00, count);
			flashP += sizeof(targetAddress) + sizeof(count) + sizeof(flag);
		}		
	} while ( !(flag & BFLAG_53X_FINAL));
	asm("nop;");
	asm("P5.H = 0xffa0;");
 	asm("P5.L = 0x0000;");
 	asm("jump(p5);");
 	asm("nop;");


  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я это делаю средствами встроенного загрузчика в BF533. Может быть в каком-то месте ошибусь, делал это лет 5 назад.

Мне нужно переключаться между двумя LDR-ами. Один из них это бут, второй основная программа. Вроде ничего не мешает по тому же принципу сделать множество LDR.

Программы у меня хранятся в SPI флешке. Когда нужно перейти из одной программы в другую я формирую ресет. Перед этим записываю в регистр UART scratch (вроде так называется регистр) номер программы которую нужно загрузить. Этот регистр не меняет содержимое после сброса. После сброса проц начинает грузить бут написанный на ассемблере, там проверяется содержимое регистра UART и исходы из этого подсовывается адрес откуда грузить LDR. Этот адрес уже передается во встроенный в процессор бут и он занимается загрузкой LDR. Если нужны детали поищу исходники.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uriy дело говорит. Сам таким занимался на ADSP-21xx, теперь и на BF. Используйте встроенный в BF загрузчик.

Изменено пользователем kv193

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Действительно у блекфина есть встроенный загрузчик в постоянной памяти. Вроде разобрался, но появилась другая проблема. делаю так. 

	asm("P0.H = HI(0xEF000008 );");	
	asm("P0.L = LO(0xEF000008 ) ;");			
	asm("R7.H = HI(0x20000000) ; ");       
	asm("R7.L = LO(0x20000000) ;");
	asm("JUMP (P0);");

Когда гружу основную программу через jtag, все ок, основная программа грузит LDR с адреса 0x20000000. Проблема возникает когда работаю без программатора. U-Boot грузить основную программу . Основная программа в свою очередь должна загрузить нужный LDR, но этого не происходит. Я предполагаю, что для загрузки LDR нужно быть в режиме супервизера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда раз у вас u-boot я бы перед перезагрузкой менял переменную окружения bootcmd в которой указано откуда грузить программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...