BootLoader固件升级

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、BootLoader升级固件
  • 二、app程序
  • 三、OTA



一、BootLoader升级固件

1.固件升级是单片机在没有烧录环境的情况下,可以进行程序修改的方法,类似于手机的系统升级。

2.这里说的是usb串口通过电脑进行升级,过程是,在app主程序中通过组合键进入boot程序,然后将要升级的文件程序覆盖掉原来的主程序(像手机刷机,升到一般拔掉会变砖,其实就是程序没写完)。

3.上面说了,升级是在boot程序中对主程序进行修改,所以其实升级固件是会用到 3个程序,分为boot程序,app程序一,app程序二;对了,boot程序其实也是一个项目工程,不过它没有app程序这么多功能,只有升级这个功能。

4.boot程序通过工具合并,可以和app程序合并到一起,这是泰凌微m02芯片的特性(其实甚至可以3个程序合并在一起);因为它支持Flash多地址启动:除了flash地址0x00000,还支持从flash地址0x20000、 0x40000读取firmware运行。

然后在这三个区域中,通过检测各自区域开头的第八个字节是否为4b,检测到4b,就会切换到这个区域,执行这个区域的项目工程。

-----流程如下------

二、app程序

简单版

int main(void)
{
	soc_init;//系统初始化
	mouse_init;//鼠标功能初始化
	device_init();//各种设备初始化

    
	while (1)
	{
		key_long_press_switch_upgrade_type();//升级函数
	}
}


void key_long_press_switch_upgrade_type(void)
{

	if(!usb_plug_check())
	{
		return;
	}
	if(key_get_curr_status(KW_KEY_IDX_VOL_INCREASE) && key_get_curr_status(KW_KEY_IDX_VOL_REDUCE))
	{
        start_upgrade_boot_program();
        
    }



主程序中除了功能程序之外,有一个按键检测进入升级函数的程序,当程序突破重重障碍(比如按3s特定按键,比如插入了use没有,需要有条件有障碍,因为进去了,原设备的功能就没了),进入到start_upgrade_boot_program,然后往boot程序的第八个字节写4b,然后重启芯片,重头执行,就会跑到boot程序;

这里要说一个特殊东西,芯片本身是不能进行写入东西的,只能擦除,所以,这个4b其实是通过复制的方法写到第八个字节。

flash_copy_page()

而这里复制是只能一页(Page)进行复制,不能只复制一个字节。而一页的大小是4kb;

此为单区升级

三、OTA

待更新

你可能感兴趣的:(STM32,mcu,物联网)