Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 05.06.2019, 14:02  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Не стартует прошивка.

Здравствуйте.
Есть чип stm32f103c8t6.
Сделал бутлодер с эмуляцией жесткого диска. В этом режиме он работает отлично. Прошивку заливаю через Win32DiskImager.

Бинарник из прошивки получаю по команде
Код:
arm-none-eabi-objcopy -O binary xxx.elf xxx.bin
Вот код перехода к основной программе.
Код:
//FLASH_DISK_START_ADDRESS =   0x08007000     /* Flash start address */
// 0x7000 bytes for bootloader

void GoToUserApp(void) {
	uint32_t appJumpAddress;
	void (*GoToApp)(void);

	appJumpAddress = *((volatile uint32_t*) (FLASH_DISK_START_ADDRESS + 4));
	GoToApp = (void (*)(void)) appJumpAddress;
	SCB-›VTOR = FLASH_DISK_START_ADDRESS;
	__set_MSP(*((volatile uint32_t*) FLASH_DISK_START_ADDRESS)); //stack pointer (to RAM) for USER app in this address
	GoToApp();
}

В основной программе изменил:
Код:
#define VECT_TAB_OFFSET  0x00007000U
Запись проходит успешно. CubeProgrammer подтверждает присутствие данных с адреса 0х08007000
но программа ни в какую не стартует. Ни лампочками не мигает ни в системе не определяется.
Использую HAL и SW4STM32.

Подскажите пожалуйста может я забыл где то адрес еще прописать??
Реклама:
worldmasters вне форума  
Непрочитано 05.06.2019, 14:30  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Для F103 использую вот это в загрузчике, нареканий не было:

PHP код:
#define MainStartArea 0x80004000

//jump to new vector table

__ASM void boot_jump(dword address){
   
LDR SP, [R0]     ;Load new stack pointer address
   LDR PC
, [R0#4] ;Load new program counter address
}

void ExitToMain(void){
SCB-›VTOR=MainStartArea;
boot_jump(MainStartArea);

Кстати, перед выходом, все прерывания запретили, которые разрешали?
А то может куда в прерывание улетает, которого более не существует?
pambaru вне форума  
Непрочитано 05.06.2019, 15:01  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от pambaru Посмотреть сообщение
Для F103 использую вот это в загрузчике, нареканий не было:

PHP код:
#define MainStartArea 0x80004000

//jump to new vector table

__ASM void boot_jump(dword address){
   
LDR SP, [R0]     ;Load new stack pointer address
   LDR PC
, [R0#4] ;Load new program counter address
}

void ExitToMain(void){
SCB-›VTOR=MainStartArea;
boot_jump(MainStartArea);

Кстати, перед выходом, все прерывания запретили, которые разрешали?
А то может куда в прерывание улетает, которого более не существует?
Ваш код аналогичен вроде бы тому что и у меня. Тут то все просто и понятно. Вопрос какие адреса и как вы меняли в основной программе?
Про прерывания думаю фигня потому что при запуске ничего не инициализируется если не нажата кнопка.

Код:
int main(void) {
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	if (HAL_GPIO_ReadPin(BOOT_MODE_GPIO_Port, BOOT_MODE_Pin) == GPIO_PIN_RESET) {
		GoToUserApp();
	} else {
		MX_I2C1_Init();
		MX_SPI1_Init();
		MX_USB_DEVICE_Init();
		MX_TIM4_Init();
		MX_TIM3_Init();

		HAL_TIM_Base_Start_IT(&htim3);
		MX_I2C1_Init();
		MX_SPI1_Init();
		MX_USB_DEVICE_Init();
		while (1) {
			asm("");
		}
	}
}
Единственное у меня в обоих случаях прерывание есть на таймер и обработка. Но я думаю VECT_TAB_OFFSET должен правильно определить новое прерывание основной программы.
Поставил перед переходом HAL_DeInit(); но на результат это не повлияло. (((
worldmasters вне форума  
Непрочитано 05.06.2019, 15:13  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Вот так у меня переход.
PHP код:
void jumpToUser(uint32_t usrAddr)
{
    
NVIC-›ICER[0] = 0xFFFFFFFF;
    
NVIC-›ICER[1] = 0xFFFFFFFF;
    
NVIC-›ICER[2] = 0xFFFFFFFF;
    
NVIC-›ICPR[0] = 0xFFFFFFFF;
    
NVIC-›ICPR[1] = 0xFFFFFFFF;
    
NVIC-›ICPR[3] = 0xFFFFFFFF;
    
SysTick-›CTRL 0x0;

    
RCC-›CR=0x00000083;
    
RCC-›CFGR=0;
    
RCC-›CIR=0;

        
uint32_t appJumpAddress;
        
void (*GoToApp)(void);

        
appJumpAddress = *((volatile uint32_t*)(usrAddr 4));
        
GoToApp = (void (*)(void))appJumpAddress;
        
SCB-›VTOR usrAddr;
        
__set_MSP(*((volatile uint32_t*) usrAddr));
        
GoToApp();

sat_art вне форума  
Непрочитано 05.06.2019, 15:17  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Я так понимаю что в основной программе ничего менять с адресами не нужно?
worldmasters вне форума  
Непрочитано 05.06.2019, 15:23  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от worldmasters Посмотреть сообщение
основной программе ничего менять с адресами не нужно
Ну собирать для старта с нужного адреса нужно.
И еще момент - SCB-›VTOR в основной программе не должен инициализироваться.
обычно в SystemInit
PHP код:
SCB-›VTOR FLASH_BASE VECT_TAB_OFFSET/* Vector Table Relocation in Internal FLASH. */ 
sat_art вне форума  
Непрочитано 05.06.2019, 15:25  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Хотя Вы же
Сообщение от worldmasters Посмотреть сообщение
В основной программе изменил:
Код:
#define VECT_TAB_OFFSET 0x00007000U
sat_art вне форума  
Непрочитано 05.06.2019, 15:27  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

stm32f103xx_flash.ld или какой там у Вас используется

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
на
FLASH (rx) : ORIGIN = 0x08007000, LENGTH = 64K

Я вместо изменения этого файла использую
Цитата:
-Wl,-section-start=.isr_vector=0x08002000

Последний раз редактировалось sat_art; 05.06.2019 в 15:32.
sat_art вне форума  
Непрочитано 05.06.2019, 15:51  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от sat_art Посмотреть сообщение
stm32f103xx_flash.ld или какой там у Вас используется

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
на
FLASH (rx) : ORIGIN = 0x08007000, LENGTH = 64K

Я вместо изменения этого файла использую
Я файлик подправил ниче страшного. Все заработало. Спасибо за оперативную помощь...
worldmasters вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МК не стартует при подаче питания AVRtron AVR 58 02.05.2019 22:09
Прошивка STM32F105RBT6 не стартует без отладчика. Donker ARM 19 20.12.2018 01:44
Прошивка для Элект СГУ-120МП(200МП) нужна срочно xacho730 Аудиотехника 2 09.03.2018 18:23
Wireless Repeater WS-WN518W2 нужна прошивка Vizitka Автоматика и аппаратура связи 41 28.11.2015 17:16
nm8036 нужна прошивка russo_turisto Микроконтроллеры, АЦП, память и т.д 1 13.07.2010 13:52


Часовой пояс GMT +4, время: 00:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot