AT32 MCU

概述

本文档仅介绍如何通过使用Eclipse、ARM-GCC编译工具、GNU-ARM插件、J-Link或AT-Link等资源来配置及调试AT32F403A的sLib,并提供sLib方案商开发算法范例及终端用户应用范例。关于AT32F403A的sLib详细介绍及说明,请详阅:
《AN0040_AT32F403A_407_Security_Library_Application_Note》。

环境说明:

本文档安装说明基于WINDOWS 7 x64系统下实现,开发板使用AT-START-F403A。

关于Eclips调试环境的安装及Eclipse工程的建立,请参阅《AN0033_Eclipse_with_GCC》。

本文档所使用的软件都打包到Setup_SLIB_with_Eclipse_and_GCC_V2.0.0.zip,直接解压重新编译后即可运行。

解压后Eclipse的workspace位于目录:
Setup_SLIB_with_Eclipse_and_GCC_V2.0.0\utilities\slib_with_eclipse_and_gcc_demo。

其中包含文件:

“图1.
图1. Eclipse工作目录

.metadata:此workspace的环境设定
project_l0:方案商开发算法范例
project_l1:终端用户应用范例

Project_L0方案商范例

在此阶段的范例程序,将完成下列几个项目:

  • 将低通滤波器函数编译成可执行(executr-only)的代码;

  • 将低通滤波器函数的代码编排放置到主闪存区地址0x08004000~0x08004FFF(sector8~9);

  • 将低通滤波器函数的系数编排放置到主闪存区地址0x08005000~0x08005FFF(sector10~11);

  • 验证成功后,将sector8~9设置为指令安全库区,将sector10~11设置为数据安全库区,此部分可在范例的主程序中以调用slib_enable()函数来完成,或使用Artery ICP Programmer来完成(建议使用ICP工具完成设置);

  • 产出终端用户程序调用低通滤波函数时,需用到的头文件及符号定义文件。

产生只执行(Exacute-only)代码

设置方式如下:

1) 选择C文件群组或个别的C文件,范例中是把要保护的相关C文件都放在FIR_Filter群组,点击FIR_Filter群组内需要设置只执行的文件,按鼠标右键选择“Properties”

“图2.
图2. 设置要保护的C文件

2) 点选C/C++Build->Settings->GNU ARM Cross C Complier->Miscellaneous,在”Other compiler flags”填入-mpure-code以及-mslow-flash-data这两个关键字,然后按Apply使设定生效

“图3.
图3. 设置Miscellaneous

编排安全库区的地址

Project_L0范例的主闪存映像及RAM的使用分区如下图,RAM的分区主要是为了避免sLib保护区的代码与终端用户的代码用到相同的RAM而产生的冲突问题。

“图4.
图4. 主闪存映像及RAM的使用分区

其中滤波器函数的代码编排放置到主闪存区的地址0x08004000~0x08004FFF(sector8~9),并将滤波器函数的系数编排放置到主闪存区的地址0x08005000~0x08005FFF(sector10~11)。RAM的部分则是将0x20000000到0x200000FF共256个字节保留给sLib保护区的代码使用。

步骤如下:

1) 依据”AT32F403AxC_FLASH.ld”linker descriptor文件做修改,编写一个ld文件,如project_l0\eclipse_gcc\ld目录下的slib.ld。

2) 在slib.ld当中,将主闪存及RAM分区划分如下:

“AT32

3) 将算法代码放到.slib_inst section,低通滤波器的系数放到.slib_data section,并将算法使用到的全局变量指定到.slib_ram section,如下图:

“图5.
图5. 配置code、data、ram section

4) 在Project->Properties->C/C++Build->Setting->GNU ARM Cross C Linker->General设定中的Script files,加入slib.ld。

“图6.
图6. 设置Script files

5) 本范例会使用到gcc的数学运算函数库libm.a,在Properties->GNU ARM Cross C Linker->Miscellaneous设定中的Other linker flags填入--specs=rdimon.specs,linker才不会出现错误讯息。

“图7.
图7. 设置Other linker flags

关于ld文件的语法,可参考GNU linker的相关名文件。

产生头文件及符号定义文件

头文件(header file)跟符号定义文件(symbol definition file)是终端客户应用范例Project_L1在调用FIR低通滤波函数时需要用到。在范例中,就是main.c中包含的fir_filter.h文件。符号定义文件则是定义低通滤波函数的实际地址。

产生符号定义文件的方法:

1) 进入Project->Properties->C/C++Build->Setting的Build Steps设定画面。

“图8.
图8. 设置Build Steps

在Post-build steps的命令行中输入以下命令:

arm-none-eabi-objcopy.exe--keep-symbols="..\keep_sym.txt"-S--remove-section=.ARM.attributes--extract-symbol"${BuildArtifactFileBaseName}.elf""..\fir_filter_symbol.sym"

2) 此处fir_filter_symbol.sym是要产出的符号定义文件,keep_sym.txt放在project_l0\eclipse_gcc目录下,是用来选择要产生哪些函数的符号,内容如下:

“AT32

3) 重新编译整个项目后,在project_l0\eclipse_gcc目录下,就会产生一个名为fir_filter_symbol.sym的符号定义文件。

启用安全库区保护

要启用安全库区的保护功能,有以下两种方式:

1) 使用ICP刻录工具Artery ICP Programmer(建议用此方式)。

使用ICP Programmer启用sLib的方法,请参阅《AT32F403A Security Library Application Note》。

2) 使用范例程序main.c之中的slib_enable()函数。

在低通滤波函数测试正确后执行过一次此函数,就可以启用安全库区的保护功能。要执行此函数,只要在main.c中使能#define USE_SLIB_FUNCTION即可。

Project_L1终端用户范例

Project_L1范例会使用到在Project_L0中调试好,并已经被刻录到AT32F403A芯片的主闪存中且被sLib保护的FIR低通滤波器函数。根据Project_L0提供的头文件、符号定义文件以及主闪存区块映像,终端用户就可以参照Project_L1做到

  • 建立一个应用项目;

  • 引用Project_L0提供的头文件及符号定义文件到项目里;

  • 调用FIR低通滤波器函数;

  • 开发并调试用户自己的应用程序。

注:Project_L1必须使用跟Project_L0开发时一样的工具链及相同版本的编译程序,不然有可能会因为版本差异的兼容性问题,而无法使用Project_L0提供的代码。

建立用户的应用项目

因为Project_L0启用的安全库区已经占用了一些特定的主闪存页面,Project_L1的代码必须参照Project_L0提供的主闪存区块映像来编排放置的地址。其中sector8~11为安全库区所占用,终端用户需使用ld文件将这个区域隔离起来,避免代码在编译时被编排到这个区域内,方式如下:

参照project_l1\eclipse_gcc\ld目录下的end_user_code.ld文件,将主闪存空间切成两个区块FLASH_1及FLASH_2,中间空出来的区域就是sLib保护区。此外,RAM的区域也要保留0x20000000到0x200000FF的区域。如下图:

“图9.
图9. end-user-code.ld配置

其中SLIB_CODE及SLIB_DATA两个区域,方案商已事先刻录代码,所以设定为NOLOAD,在下载Project_L1代码到主闪存时,就不会再次被下载。

在项目中加入符号定义文件

Project_L0所产生的符号定义文件fir_filter_symbol.sym必须被添加到Project_L1项目中,才能被正确的编译并链结到sLib保护区的代码。方法如下:

1) 将fir_filter_symbol.sym这个文件加到FIR_Filter群组;

2) 打开Project->Properties->C/C++Build->Settings->Tool Setting->GNU ARM Cross C Linker->Miscellaneous设定画面,在Other objects选单中加入此文件,在编译项目时就会可以被引用到。

“图10.
图10. 设置Other objects

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 29

概述

AT32单片机芯片内含温度传感器,它产生一个随温度线性变化的电压,在内部被连接到ADC1_IN16的输入通道上,用于将传感器的输出转换到数字数值。

应用须知

使用者可在数据手册内找到温度传感器的各项特性规格,范例规格如下:

“表1.
表1. 温度传感器特性

只要遵守以下公式,即可求得目前温度传感器量测出的温度。

温度(°C)={(V25-VTS)/Avg_Slope}+25

这里:

V25=VTS在25°C时的数值

Avg_Slope=温度与VTS曲线的平均斜率(单位为mV/°C)

其中VTS为温度传感器经由ADC转换出的电压换算成mV,再依照上述公式,只要将V25带入典型值1280mV,Avg_Slope带入-4.20mV/°C即可求得。下图即为套用典型值计算出的温度与传感器输出电压(VTS)的特性曲线。

“图1.
图1. VTS对温度理想曲线图

应用此温度传感器需注意因生产过程的变化,每个芯片的温度传感器V25具有相对大的偏移,以上表所述最小值与最大值来看有最多200mV的误差。若以Avg_Slope典型值来换算相当于47.6°C。因此内部温度传感器更适合于检测温度的变化,而不是测量绝对的温度。如果需要测量精确的温度,应该使用一个外置的温度传感器。

另外需注意温度传感器为芯片内部弱电压源,ADC进行采样时需要足够时间让VTS输出为采样电路达到充放电平衡而稳定,使用者需确实遵照数据手册中的TS_TEMP参数为内部温度传感器设置足够的采样时间,以获得正确的转换数值。

特性评估测试方法

温度传感器的特性评估是在特殊设计的量测环境下进行的。每次进行温度传感器特性评估都会任意挑选10颗芯片焊在专属特性测试的板子上,并送进高低温箱内进行全部操作电压和操作温度的测试。
专属测试板上特别使用ADT7410精准温度传感器作为量测参考源。它具有0.5°C准确度、高分辨率特性,是适合作为特性评估AT32芯片上温度传感器的器件。

量测时首先设定高低温箱到AT32芯片操作温度最低温,待温度到达且稳定后再命令温箱以极慢速度缓缓升温。此时开始约以1°C为量测间隔,同时多次采样ADT7410和AT32芯片温度传感器的结果,将其各自采出值作平均后上传至上位机记录,再待温度上升1°C重复以上采样动作,直到温度上升到达AT32芯片操作温度最高温,测试即停止。上位机收集到所有温度下的数值后即存档并后续进行Avg_Slope和V25的估算,以及线性度TL的分析。

测试数据

AT32温度传感器在操作电压3.6V,3.3V,和2.6V条件下,以10颗芯片的实测特性结果如下图所示,可以看出Avg_Slope在各条件下各芯片几乎一致,但细部分析各芯片V25参数之间具有相对较大的差异,这是造成AT32温度传感器量测与实际温度徧差的主要原因。

“图2.
图2. VTS对温度实测曲线图

若以软件校正偏移量(offset)后或仅作为相对温度量测时,在芯片全温度-40到105°C操作范围内,温度误差(线性度)可以达到±2°C之内。

“图3.
图3. 温度传感器线性特性实测曲线图(偏移已校正)

但若未做偏移校正或用以量测绝对温度,因温度传感器本身架构于芯片生产过程的变化,温度变化曲线的偏移在不同芯片上会有明显差异。实测10颗AT32F413结果V25最大差异可达约为±10°C,考虑整体设计仿真结果可能更大至±20°C以上。综合以上特性考量,建议AT32芯片内部温度传感器更适合使用作为检测温度的变化,而不是测量绝对的温度。

比较一般大厂MCU的内部温度传感器应用,基本上皆受此限制。

“图4.
图4. 温度传感器误差特性实测曲线图(偏移未校正)

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 116

内容概述

本文档主要介绍AT芯片在Keil和IAR两种工程环境下的printf功能使用方法。其共包含如下表统计的6种方法,各方法的具体用法在具体内容中描述。

“表1.
表1. AT芯片的printf函数使用方法汇总

具体内容

IAR环境下经Terminal I/O虚拟终端输出

简介

IAR提供的链接到其Terminal的驱动内就包含有常用的scanf和printf等标准输入输出驱动函数,所以工程文件可直接经IAR自带的Terminal I/O窗口实现信息交互。

例程路径

001_Printf_Test_IAR_Terminal\project\iar_v8.2

环境及硬件设计

1) 环境

本方法需在IAR环境下使用,例程支持的编译环境为IAR_V8,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

Link/AT-Link&...connection

“表2.
表2. 硬件连接关系表--(无JTDO)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”。

2) 重定向设定

Printf解除重定向(屏蔽与实际串口的重定向)。

仿真与下载

代码经编译后下载到MCU内,然后进入Debug调试环境中,经View->Terminal I/O(下图1)调出虚拟终端,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口Output栏(下图1)内,且在该窗口的Input栏内输入的数据也同样会被打印到Output窗口内。

“图1.
图1. 虚拟终端窗口路径

“图2.
图2. 虚拟终端交互窗口

IAR环境下重定向为串口输出

简介

将printf函数重定向到芯片内的一组实际串口,经串口TX脚输出,最后由串口助手工具进行信息交互。

例程路径

002_Printf_Test_IAR_USART2\project\iar_v8.2

环境及硬件设计

1) 环境

本方法需在IAR环境下使用,例程支持的编译环境为IAR_V8,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

J-Link/AT-Link&...connection

J-Link/AT-Link&...connection

“表3.
表3. 硬件连接关系表--(无JTDO)

USART2 connection

“表4.
表4. 硬件连接关系表--(USART)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”;

2) 重定向设定

串口初始化并将Printf重定向到实际的串口,重定向函数如下

“AT32

仿真与下载

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图3)内。

“图3.
图3. 串口助手交互窗口

经Keil平台的Debug(printy) Viewer虚拟终端输出

简介

Keil平台自带有Debug(printf) Viewer接口,在ARM内核集成有常用的scanf和printf等标准输入输出驱动函数的前提下,该接口可用于标准的Printf交互。

例程路径

003_Printf_Test_Keil_JTDO\project\mdk_v5

环境及硬件设计

1) 环境

本方法需在Keil环境下使用,例程支持的编译环境为Keil_V5,硬件电路板为AT-START-F403A_V1.2

2) 硬件连接

J-Link/AT-Link&...connection

“表5.
表5. 硬件连接关系表--(含JTDO)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”;

2) 跟踪引脚分配

“AT32

3) Printf映射

“AT32

仿真与下载

勾选如下图4中的Enable,并设定Core值,Core值需与系统时钟相等。

设定串口时钟,通常通过勾选如下图4中的Autodetect max SWO C1来实现。当出现打印乱码时,此时可尝试不勾选Autodetect max SWO C1,并手动修改Prescale Core Clk保证打印信息正常。

随后即可编译代码下载到MCU内,然后进入Debug调试环境中,经View->Serial Windows->Debug (printf) Viewer(下图5)调出虚拟终端窗口,然后运行代码即可看到Hello World被实际打印到了终端交互窗口(下图6)内。

“图4.
图4. Trace相关设定

“图5.
图5. Keil虚拟终端窗口路径

“图6.
图6. Keil虚拟终端交互窗口

Keil环境下重定向为串口输出(使用MicroLIB)

简介

Keil环境有自带一个MicroLIB库,其内包含一些支持Printf函数的代码,在将Printf重定向到串口输出时,勾选使用MicroLIB后可由串口助手工具进行信息交互。

例程路径

004_Printf_Test_Keil_USART2_MicroLIB\project\mdk_v5

环境及硬件设计

1) 环境

本方法需在Keil环境下使用,例程支持的编译环境为Keil_V5,硬件电路板为AT-START-F403A_V1.2

2) 硬件连接

J-Link/AT-Link&...connection

“表6.
表6. 硬件连接关系表--(无JTDO)

USART2 connection

“表7.
表7. 硬件连接关系表--(USART)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”;

2) Printf重定向

“AT32

3) MicroLIB设定

“图7.
图7. MicroLIB设定

仿真与下载

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图8)内。

“图8.
图8. 串口助手交互窗口

Keil环境下重定向为串口输出(不使用MicroLIB)

简介

Keil环境有自带一个MicroLIB库,其内包含一些支持Printf函数的代码。在将Printf重定向到串口输出时,如果不勾选使用MicroLIB,自行在工程文件内添加支持Printf函数的代码段,也同样可由串口助手工具进行信息交互。

例程路径

005_Printf_Test_Keil_USART2__Without_MicroLIB\project\mdk_v5

环境及硬件设计

1) 环境
2) 硬件连接

J-Link/AT-Link&...connection

“表8.
表8. 硬件连接关系表--(无JTDO)

USART2 connection

“表9.
表9. 硬件连接关系表--(USART)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”;

2) Printf 重定向

“AT32

3) MicroLIB设定

“图9.
图9. MicroLIB设定

4) Printf函数支持代码添加

“AT32

仿真与下载

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图10)内。

“图10.
图10. 串口助手交互窗口

经JLinkRTT窗口输出

简介

JLink自带有调试输出功能,在添加JLink RTT库代码后,可根据指定的指令实现代码调试输出到对应的窗口。

例程路径

006_Printf_Test_Jlink_RTT\project\mdk_v5

环境及硬件设计

1) 环境

本方法在IAR及Keil环境下均可使用,例程支持的编译环境为IAR_V8、Keil_V5,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

J-Link connection

“表10.
表10. 硬件连接关系表--(无JTDO)

软件设计

1) 头文件

代码工程文件内添加“stdio.h”;

2) 添加JLink RTT库代码

  • 分别将JLink RTT库代码中的SEGGER_RTT.c和SEGGER_RTT_printf.c添加到工程文件内;

  • 根据编译环境选择添加SEGGER_RTT_Syscalls_IAR.c或SEGGER_RTT_Syscalls_KEIL.c到工程文件内;

3) 输出到PC

此时,代码内调用如下SEGGER_RTT_WriteString或SEGGER_RTT_printf命令即可输出到PC端

“AT32

仿真与下载

1) 通过JLinkRTTClient窗口输出

代码经编译后下载到MCU内,然后进入Debug调试环境中,打开JLink安装路径下名称为JLinkRTTClient的应用程序。此时单步执行代码时即可看到打印信息被依次输出到JLinkRTTClient窗口,如下图11和图12。

“图11.
图11. 代码工程Debug

“图12.
图12. JLinkRTTClient窗口输出信息

2) 通过JLinkRTTViewer窗口输出

代码经编译后下载到MCU内,然后打开JLinkRTTViewer窗口,如下图13。

“图13.
图13. 打开JLinkRTTViewer窗口

点击OK,并在弹出的窗口再点击OK,然后在弹出的窗口输入并选择如下信息(此处以ZE系列为例),并点击OK。如下图14

“图14.
图14. device选择窗口

拿前述代码进入Debug调试环境中,此时单步执行代码时即可看到打印信息被依次输出到JLinkRTTViewer窗口。如下图15

“图15.
图15. JLinkRTTViewer窗口输出信息

注意事项

前述具体内容2.3和2.6的测试时,只能用J-Link,AT-Link暂不支持;

前述具体内容2.1和具体内容2.2的测试时,如果使用AT-Link的话,工程内Options→CMSIS DAP→Reset选项必须选择为Hardware或者System,不然无法连接及下载代码;

前述具体内容2.2的测试时,工程内Options→General Options→Library Configuration→Library选项必须选择为Full,不然无法正常输出。因为只有选择为Full时,支持Printf函数的代码才会被包含进来。

前述具体内容2.6.5.1测试时,因输出窗口应用程序暂时无法指定芯片型号,为保证代码与窗口型号匹配且输出正常,目前工程内Device须选择ST的型号。且工程代码内必须要勾选“Options”内的“Use MicroLIB”,不然代码编译可能会出现异常。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 324

IAP在线升级原理概述

IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1) 检查是否需要对第二部分代码进行更新
2) 如果不需要更新则转到4)
3) 执行更新操作
4) 跳转到第二部分代码执行

“图1.
图1. IAP代码执行流程

在图上图所示流程中,AT32复位后,还是从0X08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,如图标号①所示,在执行完IAP以后(即将新的APP代码写入AT32的FLASH,灰底部分。新程序的复位中断向量起始地址为0X08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的main函数,如图标号②和③所示,同样main函数为一个死循环,并且注意到此时AT32的FLASH,在不同位置上,共有两个中断向量表。

在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0X08000004中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回main函数继续运行,如图标号⑥所示。

通过以上两个过程的分析,我们知道IAP程序必须满足两个要求:
1) 新程序必须在IAP程序之后的某个偏移量为x的地址开始
2) 必须将新程序的中断向量表相应的移动,移动的偏移量为x

AT32 USB MSD IAP简介

USB MSD IAP是一个固件升级工具,它不依赖于其它上位机工具,可直接接入到PC或手机上进行设备的固件升级。

实现原理:将FLASH虚拟成一个存储设备让PC访问。

极其简单的操作步骤:

1) 将USB接口接入PC
2) PC识别到盘符“AT32 IAP”
3) 将需要升级的固件拷贝到AT32 IAP盘符里面
4) 升级完成

AT32 USB MSD IAP设计功能特点

  • IAP目前保留使用20K byte空间,APP的起始地址需在20K以后

  • 使用USB大容量存储设备进行虚拟设备

  • 升级后自动reset USB设备并返回升级状态

  • 支持下载后自动读回进行CRC校验,保证固件正确性

  • 支持设置下载地址(需按照page 2K对齐,并要大于IAP保留地址)

  • 支持各种系统windows,linux,Android等

  • 支持升级完成之后跳转到APP运行

  • 支持BIN文件升级

  • 支持HEX文件升级(后续版本添加)

  • 支持加密文件升级(后续版本添加)

程序设计

地址空间

“表1.
表1. 地址空间分布

升级状态

当连接Host之后,在盘符里面会对应有当前状态的TXT文档,根据文档名称不同来确定当前的状态。

准备升级状态(Ready.TXT)
升级成功(Success.TXT)
升级失败(Failed.TXT)
未知文件或错误(Unknown.TXT)
升级文件大于FLASH大小(Large.TXT)
注意:设备必须在Ready.TXT状态下才能进行升级,否则不会升级。

升级BIN档文件名格式

需指定下载地址(格式1)
文件名格式:(1Byte)A+(6Byte)offset+.BIN
如:要下载一个BIN文件到0x08005000为起始的地址空间去
文件名为:A005000.BIN

注意6Byte的offset地址需要保证在APP可使用的范围之内,否则将使用IAP内部默认的APP起始地址进行升级

当不满足格式1时,IAP 将使用内部默认APP的起始地址进行升级:

如:ABCDEFG.BIN,A11111.BIN,jkakkkddkfj.BIN

升级HEX档文件格式(后缀.HEX)

后续版本添加

升级加密档文件格式(后缀.SEC)

后续版本添加

使用Option Byte标志判断当前是否升级

IAP中使用Option Byte中HID[0]记录升级是否成功,当进入IAP时,设置HID[0]=1,当升级完成时设置HID[0]=0;当设备启动时,会自动判断HID[0]是否已升级固件,如果是,就跳转到APP地址执行,否就继续运行IAP。

跳转到APP code执行

当成功下载固件到FLASH之后,如果需要跳转到用户code执行,有两种方法:

1) Reset
2) 向识别到的AT IAP虚拟磁盘上拷贝一个JUMP.TXT的文件,注意这个文件的大小不能为0

使用AT32 USB MSD IAP进行升级

硬件资源

1) 指示灯LED2/LED3/LED4

2) USB(PA11/PA12)

3) AT-START-F403AV1.0实验板

“图2.
图2. AT-START-F403A

注:该IAP demo是基于AT32F403A的硬件条件,若使用者需要在AT32其他型号上使用,请修改相应配置即可。

软件资源

1) SourceCode

AN0012_SourceCode_V2.0.0\utilities\AN0012_demo,IAP源程序

AN0012_SourceCode_V2.0.0\libraries,AT32外设库

AN0012_SourceCode_V2.0.0\middlewares,其他资源

2) Doc
《AN0012_USB_MSD_IAP_V2.x.x.docx》

Note:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32F403A_407_Firmware_Library\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil4/5)进行简单修改即可。

使用流程

1) 进入IAP Mode方式

如果已经升级过固件,一直按住User按键,再按Reset键,进入IAP模式(LED4闪烁),未升级时直接reset就会进入IAP模式。

“图3.
图3. 进入IAP Mode按键

2) 连接USB设备到PC

“图4.
图4. USB设备与PC连接

3) PC识别到AT32 IAP可看到Ready.TXT

“图5.
图5. PC识别到AT32 IAP

4) 拷贝BIN档到磁盘目录下

“图6.
图6. 拷贝Bin文件

5) 设备升级完成之后将Reset USB

此时重新打开磁盘,会有Success.TXT

“图7.
图7. 设备升级完成提示

6) 升级结束

此时Reset或向识别到的AT IAP虚拟磁盘上拷贝一个大小不为0的JUMP.TXT文件,即可跳转到用户代码。

如果升级一次之后,不管是成功还是失败,如果需要再次升级,需要reset整个设备。设备进入Ready.TXT状态。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 129

概述

在使用Artery部分系列MCU时(如AT32F413\AT32F415\AT32F403A\AT32F407),可以使用DMA弹性映射功能。此功能使得DMA的通道配置更加灵活,可以将某外设的DMA请求通道指定到DMA1或者DMA2共14个通道中的任意一个通道。(如:可以将SPI1接受数据的DMA请求指定到DMA1的通道7)。

本指南将介绍如何使用DMA弹性映射请求,从而使得DMA传输变得更加灵活多变。

配置及使用方法

常规DMA使用(DMA固定映射)

常规的DMA使用以及配置方式为:外设的DMA通道已经固定且不可改变,使用时配置好再使能固定通道即可。这就意味着如果想开启某个外设的DMA功能,那么通道是不可改变的,例如想使用SPI1的RX DMA功能,那么就要查看RM的手册,如下:

“表1.
表1. DMA固定映射请求

从表格中可以知道需要开启DMA1的通道2。

DMA弹性映射使用

DMA弹性映射请求功能提供了一种更灵活的使用方式,即外设的DMA通道不固定,可选择DMA1和DMA2中,共14个通道的任意一个通道。

想要使用此功能,需要通过以下几步的设定:

1) 开启DMA弹性映射功能

将DMA的通道来源寄存器1的第24bit写1,即DMA_SRC_SEL1寄存器的DMA_FLEX_EN位。

向通道设置对应的寄存器中写入相应的硬件ID号。

每个外设的DMA请求都分配了一个硬件ID号,只要将这个ID号写进通道来源寄存器中即可。ID号可查看RM中的表格,以403A为例,如下:

“表2.
表2. 403A各个信道的DMA弹性请求一览

上表中的CHx_SRC设定值就是硬件ID号,将这个ID号写进通道来源寄存器中的对应通道bit位就可以了。例如:要将SPI1的RX的DMA请求映射到DMA1的通道7,那么就要将0x09写入到DMA_SRC_SEL1寄存器的CH7_SRC[23:16]。其他配置与常规DMA配置相同通过以上3步的配置,弹性映射功能即可使用。

注:DMA1/2的DMA_FLEX_EN必须要同时设定为1或时,DMA1/2的映像模式必须一致。无法DMA1是固定式映像,DMA2是弹性式映像。

2) DMA弹性映射库函数使用

以上的配置在BSP中的dma.h\dma.c的库文件中有提供相应的库函数,使用者只需调用库函数即可完成DMA弹性映射模式的配置。

库函数说明如下:

“表3.
表3. DMA弹性映射库函数说明

此函数只需在配置好DMA常规功能后调用即可,如下:

“图1.
图1. DMA固定映射库函数调用范例

上图中为设置TIMER1的更新中断为DMA弹性映射请求范例。

例程说明

DMA弹性映射功能在BSP中例程,路径为:
AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\examples\dma\data_to_gpio_flexible(以403A路径为例)

下面将对这两个例程做一个使用说明。

• data_to_gpio_flexible

例程data_to_jpio_flexible

本例程实现的功能为利用DMA将SRAM的数据传输到GPIO口的输出寄存器中,从而达到控制GPIO口输出的目的。同时配置TMER2产生overflow中断并产生DMA请求,配置次DMA请求为弹性映射模式。
TIMER2每产生一次DMA请求,DMA就从SRAM搬运一笔数据到GPIO口。

DMA相关的配置代码:

“AT32

实验结果可采用逻辑分析仪抓取GPIO口数据查看。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 152

IAP在线升级原理概述

IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1. 检查是否需要对第二部分代码进行更新
2. 如果不需要更新则转到4
3. 执行更新操作
4. 跳转到第二部分代码执行

“图1.
图1. IAP代码执行流程

在图上图所示流程中,AT32复位后,还是从0X08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,如图标号①所示。在执行完IAP以后(即将新的APP代码写入AT32的FLASH,灰底部分。新程序的复位中断向量起始地址为0X08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的main函数,如图标号②和③所示,同样main函数为一个死循环,并且注意到此时AT32的FLASH,在不同位置上,共有两个中断向量表。

在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0X08000004中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回main函数继续运行,如图标号⑥所示。

通过以上两个过程的分析,我们知道IAP程序必须满足两个要求:

1. 新程序必须在IAP程序之后的某个偏移量为x的地址开始
2. 必须将新程序的中断向量表相应的移动,移动的偏移量为x

AT32 USB HID IAP快速使用方法

硬件资源

文档中是用AT-START-AT32F403A实验板的硬件条件为例,OTA demo源代码还包括AT32其他型号,用户只需编译对应型号工程烧录于AT-START实验板运行即可。

1) 指示灯LED2/LED3/LED4
2) USART1(PA9/PA10)
3) AT-START实验板

软件资源

1. APP_Release

● IAP_Programmer.exe PC机tool

2. SourceCode

● bootloader,IAP源程序,运行LE2闪烁

● app_led3_toggle,app1 LED3闪烁源程序

● app_led4_toggle,app2 LED4闪烁源程序

注:工程基于keil v5和IAR8.2建立,若用户需要在其他编译环境上使用,请参考

AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil 4/5,eclipse_gcc)进行对应修改即可。

IAP Programmer使用

1. 打开bootloader源程序,编译后下载到实验板

2. 打开IAP Programmer.exe
3. 如图,选择USB设备,使用的是HID设备,因此不需要驱动
4. 选择APP下载地址(下载地址需要与IAP设置的下载地址相同)和bin文档,选择是否需要CRC校验,点击Download下载
5. 观察LED2/3/4闪烁,LED2闪烁-bootloader工作,LED3闪烁-app1工作,LED4闪烁-app2工作
6. 支持断电保护,当程序没有download成功时,下次启动还在IAP模式
图2. IAP demo上位机

“AT32

AT32 USB HID IAP程序设置

地址分布

“表1.
表1. 地址分布

Note:bootloader区域最后一个扇区,用于放置防掉电丢失的flag,用户修改bootloader时请勿操作该段地址。

bootloader project设置

1) Keil设置

“”图3.
图3. bootloader project中add1在Keil设置

2) bootloader源程序修改

hid_iap_user.h文件中

“图4.
图4. bootloader project中add2在程序中设置

app设置

该demo提供了2个app程序供测试用,皆以add2(0x800 4000)为起始地址。app1 LED3闪烁,app2 LED4闪烁。以app LED3为例,设计步骤如下:

1. Keil工程设置

“图5.
图5. app project中add2在Keil设置

2. app源程序设置

修改main.c中的中断向量偏移

“图6.
图6. app源程序设置

3. 编译生成bin文件

通过在User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于IAP更新。

以上3个步骤,我们就可以得到一个.bin的APP程序,通过bootloader程序即可实现更新。

4. 开启debug app code功能

如果在设计app code过程中需要对app project进行单独调试,请按照以下操作。

● 下载bootloader project

● 第一次使用debug功能需要IAP Programmer.exe成功下载一次app.(成功下载之后会写flag,表示下次从app启动。默认flag会从bootloader启动)

● debug app project

IAP、APP与上位机通信流程

1. 上位机通信流程

“图7.
图7. 上位机通信流程

2. IAP端下位机通信流程

“图8.
图8. IAP端下位机通信流程

注意:具体协议请参考AT32_HID_IAP_Protocol.pdf

USB HID IAP Protocol

本节描述USB HID升级协议,使用此协议与上位机进行通信,达到升级固件的目的。

命令列表

“AT32

注意1:HID MaxPacket=64Byte

注意2:每一个包的前面两个Byte固定为命令

注意3:命令按照MSB,LSB的顺序传输

ACK:0XFF00,NACK:0x00FF

命令详解

1. 0x5AA0进入IAP模式

作为一个特定的命令,当用户APP收到这个命令之后将进入IAP模式。实现方式为收到这个命令之后擦除flag然后reset

上位机:[0x5A,0xA0]

IAP设备响应:[0x5A,0XA0,ACK/NACK]

2. 0x5AA1开始下载

上位机:[0x5A,0xA1]

IAP设备响应:[0x5A,0xA1,ACK/NACK]

3. 0x5AA2设置下载地址

设置下载地址需按照1KB对齐,每下载1Kbyte数据之后,都需要重新设置下载地址。

上位机(命令+地址):[0x5A,0xA2,0x08,0x00,0x40,0x00]

IAP设备响应:[0x5A,0xA2,ACK/NACK]

4. 0x5AA3下载数据命令(1KB对齐多个包发送)

下载数据命令采用 命令+长度+数据的格式进行发送,每包最大数据量为60Byte(64–命令–长度),当发送数据达到1KB时,上位机需要等待设备的ACK响应。此时设备需将1KB的数据写到FLASH。

上位机(命令(2Byte)+长度(2Byte)+数据(nbyte)):[0x5A,0xA3,LEN1,LEN0,DATA0….DATAn]

收完1KB数据后IAP设备响应:[0x5A,0XA3,ACK/NACK]

5. 0x5AA4下载结束

上位机:[0x5A,0xA4]

IAP设备响应:[0x5A,0xA4,ACK/NACK]

7. 0x5AA6跳转命令

跳转命令将跳转到用户代码进行运行

上位机:[0x5A,0xA6,0x08,0x00,0x40,0x00]

IAP设备响应:[0x5A,0xA6,ACK/NACK]

8. 0x5AA7获取IAP设置的app地址

返回IAP设置的app地址

上位机:[0x5A,0xA7]

IAP设备响应:[0x5A,0xA7,ACK/NACK,0x08,0x00,0x40,0x00]

来源:AT32 MCU 雅特力
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 231

雅特力日前推出一系列丰富的软件工具,包括AT-Link Console、ISP Console、New Clock Configuration、I2C Timing Configuration等;同时发布全新升级版BSP、Pack、ICP、ISP、ISP Multi-Port,相比于之前版本,新增支持雅特力新推出的AT32F435、AT32F437、AT32F425、AT32WB415系列MCU,同时强化并完善软件功能,为开发人员提供全面性集成支持,带来开发效率和成果性能的大幅提升。

“雅特力推出全新开发软件工具,打造更完善的AT32

BSP & Pack

为了让用户高效快速的使用Artery MCU,雅特力官方提供了一套完整的BSP & Pack用于开发。主要包括:外设驱动库、内核相关文件、完整的应用例程以及能够支持Keil_v5、Keil_v4、IAR_v6和IAR_v7、IAR_v8等多种开发环境的Pack文件。

“▲BSP内容结构"
▲BSP内容结构

● document:部分说明文档。
● libraries:

drivers:外设驱动库。
cmsis:内核相关文件。包括Cortex-M4库文件、系统初始化文件、启动文件等。
● middlewares:第三方软件包或公用协议包。如USB协议层驱动、网络协议层驱动、操作系统源码等。

● project:

examples:型号相关的示例demo。
templates:模板工程。
● utilities:各经典应用案例存放目录。

“▲Pack安装包"
▲Pack安装包

● IAR_AT32MCU_AddOn:支援IAR_V6、IAR_V7和IAR_V8的压缩包。

ICP(In-Circuit Programming)

ICP Programmer是为了让用户更方便的使用AT32 MCU而开发的一款图形界面应用程序。使用该应用程序,用户可通过AT-Link仿真器或者J-Link仿真器来操作雅特力的MCU设备。同时可配置AT-Link离线项目,用户可通过AT-Link离线下载实现高效量产烧录。

“▲主界面"
▲主界面

ISP(In-System Programming)

ISP Programmer是基于AT32 MCU Bootloader而开发的一款图形界面应用程序。使用该应用程序,用户可以通过UART端口或者USB端口配置操作雅特力的MCU设备。

“▲操作配置界面"
▲操作配置界面

ISP Multi-Port

ISP Multi-Port Programmer是基于AT32 MCU Bootloader而开发的一款图形界面应用程序。使用该应用程序,用户可以通过UART端口或者USB端口同时配置操作多台雅特力的MCU设备。

ISP Multi-Port Programmer支持连续下载模式,方便客户实现高效量产烧录。
功能操作方面,可对选择设备进行全擦除、扇区擦除、块擦除、下载文件、下载用户系统数据文件、Firmware CRC校验、存储器 CRC、启用保护、禁用保护,以及禁用sLib等功能操作。

“▲功能操作选择"
▲功能操作选择

AT -Link Console & ISP Console

AT-Link Console是一款基于AT-Link操作MCU的命令行应用程序。使用该应用程序,用户可以通过SWD端口配置操作雅特力的MCU设备。

ISP Console是一款基于MCU Bootloader的命令行应用程序。使用该应用程序,用户可以通过UART端口或者USB端口配置操作雅特力的MCU设备。

“▲操作流程"
▲操作流程

New Clock Configuration

协助AT32 MCU CPU/IP的时钟配置,并生成代码。

“▲New
▲New Clock Configuration UI画面

I2C Timing Configuration

协助AT32 MCU CPU/IP的时钟配置,并生成代码。

“▲I2C
▲I2C Timing Configuration UI画面

目前这一系列软件资源已上架至雅特力官网(www.arterytek.com),可支持AT32全系列MCU产品,欢迎大家前往网站下载体验。

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器创新趋势的芯片(MCU)设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。

雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 161

概述

空中下载技术OTA(Over-the-Air Technology)是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口,对产品中的固件程序进行更新升级。通常实现OTA功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序为Bootloader区域,第二个项目程序App代码为真正的功能代码,执行应用和升级。这两部分项目代码同时烧录在User Flash中。

“图1.
图1. OTA代码执行流程

在上图所示流程中,MCU复位后,从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到Bootloader的main函数,如图标号①所示;在执行完Bootloader以后(App代码为图中FLASH灰底部分App程序的复位中断向量起始地址为0x08000004+N+M),跳转至App程序的复位向量表,取出App程序的复位中断向量的地址,并跳转执行App程序的复位中断服务程序,随后跳转至App程序的main函数,如图标号②和③所示,同样main函数为一个死循环,并且注意到此时AT32的FLASH,在不同位置上,共有两个中断向量表。

在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0x08000004中断向量表处,而不是App程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回main函数继续运行,如图标号⑥所示。

通过以上两个过程的分析,我们知道OTA程序必须满足两个要求:

1) App程序必须在Bootloader程序之后的某个偏移量为x的地址开始。

2) 必须将App程序的中断向量表相应的移动,移动的偏移量为x。

AT32 USART OTA 快速使用方法

硬件资源

文档中是用AT-START-AT32F403A实验板的硬件条件为例,OTA demo源代码还包括AT32其他型号,用户只需编译对应型号工程烧录于AT-START实验板运行即可。

1) 指示灯LED2/LED3/LED4
2) USART1(PA9/PA10)
3) AT-START实验板

软件资源

1) tool_release

● IAP_Programmer.exe,PC机tool,用于演示OTA升级流程
2) source_code
● Bootloader,Bootloader源程序,运行LED2闪烁
● App_led3_toggle,App1源程序,运行LED3闪烁
● App_led4_toggle,App2源程序,运行LED4闪烁

注:工程基于keil v5建立,若用户需要在其他编译环境上使用,请参考对应BSP目录AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil 4/5,eclipse_gcc)进行对应修改即可。

OTA Demo 使用

本文档描述了两种常用的OTA应用demo,template app和dual app,后面章节会分别介绍。
1) 打开Bootloader工程源程序,选择对应MCU型号的target编译后下载到实验板

2) 打开IAP_Programmer.exe

3) 选择正确的串口、APP下载地址和bin文档,点击Download下载,如下图

4) 观察LED2/3/4闪烁,LED2闪烁-Bootloader工作,LED3闪烁-App1工作,LED4闪烁-App2工作

图2.
图2. IAP demo上位机

Template app OTA程序设置

地址分布

“图3.
图3. Flash地址分配

注:Bootloader区域最后一个扇区,用于存放防止升级过程出错(掉电等异常情况)的flag,用户编译修改Bootloader时,要保证不覆盖flag的地址。

执行流程

OTA分为Bootloader、App和Template三部分,应用在App中执行,Template仅作为新App固件数据的临时存放空间。程序执行整体流程框图如下:

“图4.
图4. 程序执行流程

Bootloader project 设置

1) Keil设置

“图5.
图5. Bootloader project中address 1在Keil设置

2) Bootloader源程序修改ota.h文件中

“图6.
图6. Bootloader project中address 2在程序中设置

App project 设置

OTA demo提供了2个App程序供测试用,皆以address 2(0x800 4000)为起始地址。App1 LED3闪烁,App2 LED4闪烁。以App1为例,设计步骤如下:

1) Keil工程设置

“图7.
图7. App project中address 2在Keil设置

2) App1源程序设置

“图8.
图8. App project向量表偏移在程序中设置

3) 编译生成bin文件

通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于OTA更新。通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过Bootloader程序即可实现更新。

4) 开启debug app code功能

如果在设计App code过程中需要对App project进行单独调试,请按照以下操作。

● 先下载Bootloader工程
● 再调试App工程

Dual app OTA与程序设置

地址分布

“图9.
图9. Flash地址分配

注:Bootloader区域最后2个扇区,用于存放App是否正常的flag,用户编译修改Bootloader时,要保证不覆盖flag的地址。

执行流程

OTA分为Bootloader、App1和App2三部分,应用在App1或App2中执行。程序执行整体流程框图如下:

“图10.
图10. 程序执行流程

Bootloader project设置

3) Keil设置

“图11.
图11. Bootloader project中address 1在Keil设置

4) Bootloader源程序修改ota.h文件中

“图12.
图12. Bootloader project中address 2在程序中设置

App project设置

OTA demo提供了2个App程序供测试用,app_led3_toggle以0x800 4000为起始地址,app_led4_toggle以0x8080000为起始地址。App1 LED3闪烁,App2 LED4闪烁。以App1为例,设计步骤如下:

5) Keil工程设置

“图13.
图13. App project中address 2在Keil设置

6) App1源程序设置

“图14.
图14. App project向量表偏移在程序中设置

7) 编译生成bin文件

通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于OTA更新。通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过Bootloader程序即可实现更新。

8) 开启debug App code功能

如果在设计App code过程中需要对App project进行单独调试,请按照以下操作。

● 先下载Bootloader工程
● 再调试App工程

Bootloader/App与上位机串口通信协议

程序与上位机通信,接收固件升级数据,上位机端和嵌入式端通信协议如下:

1) 上位机通信协议

“图15.
图15. 上位机通信协议

2) 嵌入式端下位机通信协议

“图16.
图16. 下位机通信协议

注:ACK:0xCCDD
NACK:0xEEFF
Data:0x31+Addr+数据+chenksum(1byte)
Addr:4bytes,高位在前
Kbytes,下载数据,不足2K内容填充0xFF
Checksum:1byte,4bytes的Addr+2KBytes数据的校验和的低八位

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器创新趋势的芯片(MCU)设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。

雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 310

概述

IAP(In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。通常实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1) 检查是否需要对第二部分代码进行更新

2) 如果不需要更新则转到4)

3) 执行更新操作

4) 跳转到第二部分代码执行

“图1.
图1. IAP代码执行流程

在上图所示流程中,MCU复位后,还是从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数,如图标号①所示;在执行完IAP以后(即将新的APP代码写入AT32的FLASH,灰底部分。新程序的复位中断向量起始地址为0x08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的main函数,如图标号②和③所示,同样main函数为一个死循环,并且注意到此时AT32的FLASH,在不同位置上,共有两个中断向量表。

在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0x08000004中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完中断服务程序后,程序返回main函数继续运行,如图标号⑥所示。

通过以上两个过程的分析,我们知道IAP程序必须满足两个要求:

1) 新程序必须在IAP程序之后的某个偏移量为x的地址开始

2) 必须将新程序的中断向量表相应的移动,移动的偏移量为x

AT32 USART IAP 快速使用方法

硬件资源

文档中是用AT-START-AT32F403A实验板的硬件条件为例,IAP demo源代码还包括AT32其他型号,用户只需编译对应型号工程烧录于AT-START实验板运行即可。

1) 指示灯LED2/LED3/LED4
2) USART1(PA9/PA10)
3) AT-START实验板

软件资源

1) tool_release

● IAP_Programmer.exe,PC机tool,用于演示IAP升级流程

2) source_code

● bootloader,bootloader源程序,运行LED2闪烁

● app_led3_toggle,app1源程序,运行LED3闪烁

● app_led4_toggle,app2源程序,运行LED4闪烁

注:工程基于keil v5和IAR8.2建立,若用户需要在其他编译环境上使用,请参考AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8, keil 4/5, eclipse_gcc)进行对应修改即可。

IAP Demo 使用

1) 打开bootloader工程源程序,选择对应MCU型号的target编译后下载到实验板

2) 打开IAP_Programmer.exe

3) 选择正确的串口、APP下载地址和bin文档,点击Download下载,如下图

4) 观察LED2/3/4闪烁,LED2闪烁-bootloader工作,LED3闪烁-app1工作,LED4闪烁-app2工作

“图2.
图2. IAP demo上位机

AT32 USART IAP程序设置

地址分布

“表1.
表1. 地址分布

注:bootloader区域最后一个扇区,用于存放防止升级过程掉电的flag,用户编译修改bootloader时,要保证不覆盖flag的地址。

执行流程

IAP分为Bootloader和App两部分,应用在App中执行,升级过程在bootloader中执行。程序执行整体流程框图如下:

“图3.
图3. 程序执行流程

bootloader project 设置

1) Keil设置

“图4.
图4. bootloader project中address 1在Keil设置

2) bootloader源程序修改Iap.h文件中

“图5.
图5. bootloader project中address 2在程序中设置

app project 设置

IAP demo提供了2个app程序供测试用,皆以address 2(0x800 4000)为起始地址。app1 LED3闪烁,app2 LED4闪烁。以app1为例,设计步骤如下:

1) Keil工程设置

“图6.
图6. app project中address 2在Keil设置

2) app1源程序设置

“图7.
图7. app project向量表偏移在程序中设置

3) 编译生成bin文件

通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于IAP更新。通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过bootloader程序即可实现更新。

4) 开启debug app code功能

如果在设计app code过程中需要对app project进行单独调试,请按照以下操作。

a) 先下载bootloader工程

b) 再调试app工程

bootloader/app 与上位机串口通信协议

1) 上位机通信协议

“图8.
图8. 上位机通信协议

2) IAP端下位机通信协议

“图9.
图9. IAP端下位机通信协议

注: ACK: 0xCCDD

NACK: 0xEEFF

Data: 0x31+Addr+数据+chenksum(1byte)

Addr: 4bytes,高位在前

Kbytes,下载数据,不足2K内容填充0xFF

Checksum: 1byte,4bytes的Addr+2KBytes数据的校验和的低八位

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 156

基于广阔的市场空间、5G、IOT、AI等技术快速迭代、新基建的政策红利以及新消费形势的需求,智能家居产业蓬勃发展。当前,传统电灯开关的局限性已经暴露,随着经济水平的发展,消费者对生活的品质产生了强大的提高需求,面对这样的市场需求,便捷的智能开关取代传统开关已经成为大势所趋。

2014年,亚马逊推出了自有的智能语音助手Alexa,直接通过语音便可以下达指令,远程控制实现家居智能化,简单来说,Alexa就相当于智能家居系统的“大脑”。要实现这样理想的智能家居系统,除了Alexa这样的“中枢”,还必须通过底层的硬件-半导体芯片平台去承载和实现,雅特力AT32F415系列MCU已实现支持亚马逊的Amazon Connect Kit (ACK)功能,并在亚马逊的官方产品智能调光开关批量量产。通过支持Alexa的智能音箱或APP应用程序,为墙面开关添加语音控制功能,从传统开关轻松升级为智能开关。

“雅特力AT32

雅特力MCU主要实现墙面开关的控制功能和集成了亚马逊的Wi-Fi简单设置功能,帮助客户以更少的步骤快速连接家用设备,并以其高性能、小体积,满足了墙面开关对元器件小体积的需求。你可以在任何地方实现对灯光亮度的强弱调节、灯光软启动、定时控制、场景设置等功能,无需智能家居集线器,无需额外的智能设备或应用程序,达到安全、节能、舒适、高效的特点。

“雅特力AT32

1月5日,由亚马逊云科技(Amazon Web Service)和江西嘉捷鑫源科技有限公司(Innotech)主办,上海浦东智能照明联合会和深圳跨境电子商务协会协办的《亚马逊云赋能智能家居生态高峰论坛》在深圳福田香蜜湖万豪酒店举办。众多行业伙伴欢聚一堂,深入探讨云端前沿科技,共谋企业实现云端数字化创新与落地实践,展望行业发展未来。雅特力作为战略合作伙伴应邀参加此次峰会,副总经理黄呈俊和产品市场经理林金海先生作为代表出席活动,期待与行业伙伴共同打造智能家居生态体系。

“雅特力AT32

“嘉捷鑫源联合创始人叶建胜(右二)、雅特力科技副总经理黄呈俊(左三)与亚马逊团队合影"
嘉捷鑫源联合创始人叶建胜(右二)、雅特力科技副总经理黄呈俊(左三)与亚马逊团队合影

关于雅特力

雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器创新趋势的芯片(MCU)设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。

雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。

来源:AT32 MCU 雅特力科技
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 74

页面

订阅 RSS - AT32 MCU