打印
[应用相关]

AT32 IAP using the CAN

[复制链接]
1693|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 林堪堪 于 2023-3-21 14:09 编辑

完整文档及工具及示例代码,请下载附件。



前言
对于AT32 MCU,除了出厂固化的bootloader,用户也可以在应用程序中编写自己的bootloader程序,用于最终产品的固件更新。此功能称为应用程序内编程(IAP)。
本应用笔记的目的是提供在AT32微控制器上创建IAP应用程序的一般准则。
AT32微控制器可以运行用户特定的固件来对微控制器中嵌入的闪存执行IAP。此功能可以使用产品可用和支持的任何通信接口。本应用笔记使用自定义CAN协议实现IAP功能。
此应用笔记包含如下程序:
l  IAP_Programmer.exe上位机软件和
l  嵌入式IAP CAN示例的源代码
l  嵌入式APP CAN示例的源代码
l  USB转CAN示例源代码




支持型号列表:
  
支持型号
  
AT32F403A/407


目录
1           概述... 5
1.1        AT32 CAN IAP快速使用方法... 5
1.1.1     硬件资源... 5
1.1.2     软件资源... 5
1.2        IAP demo使用... 6
2           AT32CAN IAP程序设置.. 7
2.1        地址分布... 7
2.2        执行流程... 7
2.3        bootloader project设置... 7
2.4        app project设置... 8
3           BootloaderCAN通信协议.. 10
3.1        上位机升级流程... 10
3.2        IAP 端下位机通信处理流程... 10
3.3        升级命令详解... 11
3.3.1     Get Info 命令... 11
3.3.2     UpgradeStart 命令... 12
3.3.3     ReadMmeory 命令... 12
3.3.4     WriteMemory命令... 12
3.3.5     Get CRC命令... 13
3.3.6     JUMP命令... 13
3.3.7     UpgradeFinish 命令... 13
4           USB转CAN桥接... 14
4.1        数据转发流程... 14
4.2        USB CAN数据转发... 14
5           版本历史.. 16


1                 概述1.1           AT32 CAN IAP快速使用方法
使用CAN进行IAP升级,此示例使用PC上位软件(IAP_Programmer.exe)通过一个USB转CAN的桥接设备和目标板进行通信, IAPDemo和桥接设备默认CAN 波特率使用500K。

如下是连接示意图:
l  PC 通过USB连接USB to CAN Bridge(使用AT-START实现一个转接设备,代码参考usb_vcp_bridge_can源代码)
l  USB to CAN Bridge 通过CAN Transceiver 连接 CAN 目标板(注意使用CAN必须要使用CAN Transceiver, CANL连接CANL, CANH连接CANH)
图1 连接示意图




1.1.1       硬件资源
1.    USB转CAN桥接板 (目前使用一块AT-START-AT32F403A实现USB转CAN)
1)    USB(PA11/PA12)
2)    CAN(PB8/PB9)
3)    指示灯 LED2/LED3/LED4
4)   AT-START实验板

2.    AT-START-AT32F403A  CAN IAP目标板
1)     指示灯LED2/LED3/LED4
2)     CAN(PB8/PB9)
3)     AT-START实验板
3.   CAN Transceiver 转接板
CAN Transceiver 转接板用于USB to CAN Bridge 和 CAN 目标板的连接
注意:USBCAN桥接板的波特率和CAN IAP目标板波特率要配置一致
另外要使用CAN通信,必须外接CAN转换芯片。
1.1.2       软件资源
1)     ToolRelease
n  IAP_Programmer.exe,PC机tool,用于演示IAP升级流程
n  IAP_Programmer_V2.x.x,PC tool 源代码
2)     SourceCode\utilities
n  can_iap_demo,IAP源程序,运行LED2闪烁
n  usb_vcp_bridge_can,USB转CAN桥接源程序
n  can_app_led3_toggle,app1源程序,运行时LED3闪烁
n  can_app_led4_toggle,app2源程序,运行LED4闪烁
注:示例工程基于keil v5建立,若用户需要在其他编译环境上使用,请参考AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil 4/5, eclipse_gcc)进行对应修改即可。

1.2           IAP demo使用
1)     打开can_iap_demo工程源程序,选择对应MCU型号的target编译后下载到实验板
2)      打开usb_vcp_bridge_can工程源程序,下载到USB转CAN转接板
3)      连接转接板和目标板的CANH/CANL
4)      将转接板USB接入到PC,可以看到会有对应的虚拟串口设备COMxx
5)      打开IAP_Programmer.exe
6)      选择正确的串口、APP下载地址和bin文档,点击Download下载,如下图
7)     观察LED2/3/4闪烁,LED2闪烁canIAP工作,LED3闪烁-app1工作,LED4闪烁-app2工作
图2. IAPdemo上位机



2                 AT32 CAN IAP程序设置2.1           地址分布
表1. 地址分布
  
ITEM
  
Address and Size
app code
address 2: 0x800 4000   size: 0x40000(256K  Byte)
bootloader code
address 1: 0x800 0000   size: 0x4000(16K  Byte)
注:bootloader区域最后一个扇区,用于存放防止升级过程掉电的flag,用户编译修改bootloader时,要保证不覆盖flag的地址。

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


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



2)     bootloader源程序修改Iap.h文件中
bootloaderproject中address 2在程序中设置:
/*app start address*/
#define FLASH_APP_ADDRESS            0x08004000




2.4           app project设置
IAP demo提供了2个app程序供测试用,皆以address 2(0x800 4000)为起始地址。app1 LED3闪烁,app2 LED4闪烁。以app1为例,设计步骤如下:
1)     Keil工程设置
图6. app project中address 2在Keil设置



2)     app1 源程序设置
图7. appproject向量表偏移在程序中设置
中断向量表偏移地址修改:



3)     编译生成bin文件
通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于IAP更新。
通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过bootloader程序即可实现更新。
4)     开启debugapp code功能
如果在设计app code过程中需要对app project进行单独调试,请按照以下操作。
a)      先下载bootloader工程
b)      再调试app工程



3                 Bootloader CAN通信协议3.1           上位机升级流程
如下下图是上位机升级流程:
l 获取设备信息:包括app起始地址,app flash size大小,sector size 大小
l 发送开始升级命令
l 写存储器
l 获取CRC进行校验
l 发送升级完成命令
l 跳转到APP执行
具体命令操作参考命令详解
图8. 上位机升级流程


3.2           IAP 端下位机通信处理流程
IAP下位机端会通过接收主机端发送的命令做数据处理,包括读写数据,crc校验等。
图9. IAP 端下位机命令

:             ACK:   0x79
                 NACK:  0x1F


3.3           升级命令详解
本节主要说明CAN IAP每条协议命令的作用和使用方法,包括主机端和设备端对命令解析的流程。
所有命令通过CAN标准帧的ID 来确定,CAN每一包数据最大8字节,例如Get Info命令,此时CAN 标准帧的ID 为0。
注意:所有命令都使用标准帧数据帧来传递
如下是命令列表
   
命令
   
标准帧ID
说明
Get  Info)
0x00
获取APP信息,app起始地址,app flash sizesector size
Upgrade Start
0x01
开始升级
Read Memory
0x11
读取APP Flash 数据
write memory
0x31
写升级APP Flash数据
Jump
0x21
跳转到指定的存储器地址执行程序
Write  memory
0x31
写数据到存储器的指定地址
Get CRC
0xAC
获取指定大小数据的CRC
Upgrade Finish
0xBD
升级结束


3.3.1       Get Info 命令
此命令用于获取APP信息,包括APP起始地址,app flash size 大小,sector size大小
主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0x00
-
-
主机发送Get Info命令

1
0x00
1
ACK/NACK
当收到NACK时,等待1s,继续发送Get info 命令,一直到回ACK之后再走后面流程。
   

2
0x00
8
1: Address MSB
  
2: Address  
  3: Address  
  4: Address LSB
  
5: app size MSB
  
6: app size
  7: app size
  8: app size LSB
   
返回app地址和app size

3
0x00
4
1: Sector size MSB
  
2: Sector size  
  3: Sector size
  4: Sector size LSB
   
返回sector size


3.3.2       Upgrade Start 命令
获取设备信息之后,可以发送此命令开始升级,设备端收到此命令之后会去删除一个app的标志,标志在开始升级。
主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0x01
-
-
主机发送Upgrade命令

1
0x01
1
ACK/NACK
命令结束

3.3.3       Read Mmeory 命令
此命令用于读取app flash 数据
主机端协议发送流程:
[td]  
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0x11
6
1: Address MSB
  
2: Address  
  3: Address  
  4: Address LSB
  
5: Length MSB
  6: Length LSB
   
主机发送Read Memroy,包含长度和地址

1
0x11
1
ACK/NACK
当收到NACK时,命令结束

2
0x11
X
Data
目标地址数据

0x11
X
Data
目标地址数据

n

X
Data
目标地址数据


3.3.4       Write Memory命令
此命令用于写APP数据到存储器,注意每次写入的地址必须sector对齐(sector大小可通过Get Info获取),数据的长度为1个sector大小或者小于1个sector。每个sector的数据最好是一次发完。
主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0x31
6
1: Address MSB
  
2: Address  
  3: Address  
  4: Address LSB
  
5: Length MSB
  6: Length LSB
   
主机发送Write Memory命令

1
0x31
1
ACK/NACK
当收到NACK时,命令结束
2

0x31
X
Data
目标地址数据

0x31
X
Data
目标地址数据
n

0x31
X
Data
目标地址数据

2
0x31
1
ACK/NACK
命令结束,写入完成


3.3.5       Get CRC命令
此命令用于获取指定地址指定大小数据的CRC,地址和大小必须4字节对齐

主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0xAC
8
1: Address MSB
  
2: Address  
  3: Address  
  4: Address LSB
  
5: Length MSB
  6: Length
  
7: Length
  8: Length LSB
  
   
主机发送Get CRC命令

1
0xAC
1
ACK/NACK
当收到NACK时,命令结束

2
0xAC
4
CRC MSB
  
CRC
  
CRC
  
CRC LSB
   
4字节的CRC值

3.3.6       JUMP命令
此命令用于跳转到APP代码执行
主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0x21
4
1: Address MSB
  
2: Address  
  3: Address  
  4: Address LSB
   
主机发送Jump,包含地址

1
0x21
1
ACK/NACK
当收到NACK时,命令结束


3.3.7       Upgrade Finish 命令
此命令用于设置升级完成标志。
主机端协议发送流程:
   
发送消息
   
接收消息
标准帧ID
帧长DLC
数据
描述
1

0xBD
-
-
主机发送Upgrade Finish命令

1
0xBD
1
ACK/NACK
命令结束




4                 USBCAN桥接
USB 转CAN桥接使用一块AT32F403A的AT-START开发板实现,USB端实现一个虚拟串口设备,转接板通过USB与PC上位机通信,然后通过CAN与下位机进行通信,实现USB与CAN数据的透传功能。注意转接板的CAN波特率与下位机的CAN波特率要配置相同。

4.1           数据转发流程
如下是数据转发流程
图 10 数据转发流程




4.2           USB CAN数据转发
USB转CAN桥接按照CAN协议进行封装,封装格式:
标准帧ID(1字节)+帧长(1字节)+数据(数据最大8字节)

USB 数据转到CAN总线:
USB到CAN按照一包USB数据转成一帧CAN数据。
收到一包USB数据如:0x01 0x02 0x11 0x22
0x01:表示标准帧ID
0x02:表示数据长度
0x11,0x22:表示具体数据

转换成CAN 帧后:
ID=0x01
DLC=0x02
DATA0=0x11
DATA1=0x22

CAN总线数据转到USB
CAN同样按照一帧数据转换成一包USB数据:
收到一帧CAN数据:ID=0x02,DLC=0x03, DATA0=0x11, DATA0=0x22 ,DATA0=0x33

转换成USB包之后:0x02 0x03 0x11,0x22,0x33
0x02:表示标准帧ID
0x03:表示数据长度
0x11,0x22,0x33:表示具体数据


以Write Memory为例写32字节数据到0x08004000
主机端流程:
发送1:0x31 0x6 0x08 0x00 0x40 0x00 0x00 0x20 (ID+长度+6字节数据)
接收1:0x31 0x01 0x79 (ID+长度+ACK)
发送2:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+长度+8字节数据)
发送3:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+长度+8字节数据)
发送4:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+长度+8字节数据)
发送5:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+长度+8字节数据)









AN0172_AT32F403A_407_IAP_using_the_CAN_V2.0.0.zip

6.92 MB

使用特权

评论回复
评论
xu@xupt 2023-9-17 08:46 回复TA
很好的资源,学习啦~~ 
沙发
kevensz| | 2023-3-28 17:00 | 只看该作者
楼主,你USB是HID吗?速率做到多少?

使用特权

评论回复
板凳
tpgf| | 2023-4-11 16:31 | 只看该作者
一般IAP使用串口的情况是不是更多一点呢

使用特权

评论回复
地板
观海| | 2023-4-11 16:49 | 只看该作者
IAP使用can的优点体现在哪些方面呢

使用特权

评论回复
5
guanjiaer| | 2023-4-12 11:14 | 只看该作者
观海 发表于 2023-4-11 16:49
IAP使用can的优点体现在哪些方面呢

感觉优点说不太上 只是一种使用的可选项

使用特权

评论回复
6
heimaojingzhang| | 2023-4-12 11:36 | 只看该作者
can通讯方式本身的有点就非常多  这种应用也是非常稳定的

使用特权

评论回复
7
keaibukelian| | 2023-4-12 11:53 | 只看该作者
IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级

使用特权

评论回复
8
paotangsan| | 2023-4-12 12:04 | 只看该作者
在应用编程IAP是应用在Flash程序存储器的一种编程模式

使用特权

评论回复
9
caizhiwei| | 2023-5-5 21:40 | 只看该作者
用的哪个can盒子呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

119

帖子

5

粉丝