#申请原创# #有奖活动# @21ic小管家
一、缘起:
从二姨家开版雅特力以来,我一直都很关注这个板块,也学习了很多知识。
看见举办“雅特力AT-START-F425尝鲜体验,USB应用的开发首选”这个活动,
也是积极报名参加,并且报名时候也说了要玩一玩这个USB功能,很荣幸获得了开发板。
既然这个板子有USB功能,且活动也说了“USB应用的开发首选”,
那么就要规划一下如何用这个USB应用。
考虑单单读取U盘文件,估计也没有啥亮点,于是想到用AT-START-F425开发板上
的USB去读取U盘,实现IAP功能,并且U盘实现IAP功能也是我在工作中需要的功能。
下面就开始说说我执行过程。
二、IAP升级简介:
IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对
User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件
程序进行更新升级。
通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时
编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)
接收程序或数据,执行对第二部分代码的更新,一般我们把这个功能叫做Bootload;第二个项目代码才是
真正的功能代码,一般我们将这部分功能叫做APP。
三、F425芯片简介:
雅特力科技AT32F425系列超值型ARM® Cortex®-M4微控制器,高达96MHz的CPU运算速度与
内建数字信号处理器(DSP),最高可支持64KB闪存存储器(Flash)及20KB随机存取存储器(SRAM),
而系统存储器(4KB)除可作启动加载程序外,也可一次性配置成一般用户程序和数据区,
达到64+4KB的最大空间使用,片上还集成1个OTG控制器(设备模式支持无晶振Xtal-less)、1组CAN总线、
4个USART、3个SPI/I²S(可组合全双工模式)、2个I²C、1个16位高级定时器、6个16位通用定时器、
1个32位通用定时器、2个16位基本定时器,定时器可组合超过24路PWM独立信道,
同时还扩展了1个采样率高达2Msps的12位16通道高速ADC,几乎所有I/O口可容忍5V输入信号,
且具有多种端口重映射,超越业界同级USB OTG芯片。
AT32F425系列搭载了雅特力自行开发的sLib安全库(Security Library) ,
可支持密码保护指定范围程序区,方案商烧录核心算法到此区域,提供给下游客户做二次开发,
强化了产品本身的安全性、可靠性和二次开发的使用便利度。AT32F425可运行于工业级温度范围-40~105°C,
并因应多样的内存使用需求,提供一系列芯片供选用,包括LQFP64、LQFP48、QFN48、LQFP32、QFN32与
迷你的TSSOP20等封装类型选择,其丰富的片上资源分配、高集成及高性价比造就一流市场竞争力。
特别适用于电竞市场(Gaming),工业自动化(industrial automation),电机控制(motor control),
物联网(IoT)及消费性电子(consumer electronics)等各种高运算、USB应用需求的设计。
拿到的这块开发板的型号AT32F425R8T7-7,存储器是64K,我们要开始在这个存储器中规划我们的IAP功能。
为了简单起见:将存储器前32K规划给bootload程序,将存储器后32K规划给APP程序,如下所示:
四、准备硬件:
拿到开发板,看上去很不错,
1.板载AT-LINK烧录器,下个驱动,不用额外下载工具了
2.供电是USB口,我要准备USB线
3.既然是U盘应用,准备一个古董级的U盘
4.考虑调试过程中信息输出,再准备一个USB转串口工具,供调试时候看输出信息
有这几样就满足我测试需求了,好了,开动。
五、环境搭建:开始让KEIL工作
AT-LINK的驱动要先安装,在官网上直接下载:http://atkap.arterytek.com/download/AT-Link_V1.2.20.zip
(提醒一下:artery_atlink-usart_driverinstall.exe会被杀毒软件删除,我关掉杀毒软件才安装上的)
用USB线将开发板连接电脑,在设备管理器看见这样:
打开KEIL,在设置里看见这样,至此驱动安装就OK啦。
在官网上找到Keil5_AT32MCU_AddOn_V2.0.9_CN.zip那个文件,安装里面的ArteryTek.AT32F425_DFP.2.0.1.pack,
安装好之后,可以看见如下即可:
六、bootload程序编写:
这个bootload我们要实现的功能规划是:
1.从U盘读取需要更新的APP固件,将固件更新到0X08008000位置;
2.跳转0X08008000位置,启动新APP固件,开始正常运行程序;
3.为了跟踪信息,使用串口输出调试过程;
实现过程如下:
1.为了方便初始化这块AT-START-F425开发板的外设(GPIO、USB、UART、时钟等),使用BSP里的例程,可以快速构建程序框架;
2.在mail.c里实现IAP逻辑;
3.在usbh_user.c里实现U盘固件读取、更新,以及更新后跳转到APP;
int main(void)
{
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
system_clock_config();
at32_board_init();
usb_gpio_config();
if ( at32_button_state() == 0x00)
{
IAP_Jump(FLASH_APP_START_ADDR);
}
uart_print_init(115200);
crm_periph_clock_enable(OTG_CLOCK, TRUE);
usb_clock48m_select(USB_CLK_HEXT);
nvic_irq_enable(OTG_IRQ, 0, 0);
usbh_init(&otg_core_struct,
USB_FULL_SPEED_CORE_ID,
USB_ID,
&uhost_msc_class_handler,
&usbh_user_handle);
while(1)
{
usbh_loop_handler(&otg_core_struct.host);
}
}
七、APP程序程序编写:
APP程序就是普通的点灯程序,但是非常关键的是:因为APP被存储在0X08008000位置,相应的中断向量也需要调整;
如下图所示:
将生产的APP固件BIN文件(我这里叫APP_08008000.BIN)复制到U盘中。
八、用U盘IAP升级固件:
1.准备好串口工具、下载线、U盘等;
2.使用F425开发板自带AT-LINK下载bootload程序到F425开发板里;
3.此时先按下USER按钮,再按下RESET按钮;
4.booload程序等待U盘插入;
5.插入U盘(此时U盘里已经存放了待更新的固件);
6.bootload程序会自动将U盘里的APP固件复制到开发板的FLASH指定位置(0X08008000);
7.同是在串口精灵里可以看见U盘被读取的过程;
8.此时bootload开始跳转到新APP程序,开始执行APP程序;
9.至此IAP升级APP固件全部完成。
如果下次再需要升级APP固件,只需要重复以上第3步至第8步即可,特别适合在工业现场更新APP程序。
九、AT-START-F425开发板使用总结:
1.此开发板特别突出USB功能,此次特别针对USB功能进行评测,USB功能使用完全正常;
2.此开发板使用F425芯片,这是M4的芯片,和以前的M0、M3芯片不同,要特别注意时钟设置;
3.因为使用USB功能,所以USB时钟要是48M;
4.此开发板FLASH只有64K,如果用户实际应用BOOTLOAD+APP功能,请特别注意固件大小;
十、源代码:
如下bootload源代码和APP源代码,欢迎高手批评指正,谢谢!!
AT32F425_IAP_yljon.rar
(978.83 KB)
|