SemiDrive E3 IAR 配置环境说明

一、 概述

       本文介绍 IAR 环境相关配置说明,方便用户快速排查问题,俗话说:知己知彼,百战不殆。在软件开发过程中你是否存在以下疑惑,软件下载到哪些地址,且软件在芯片内部运行时,是如何部署的?配置底层寄存器,在 IAR 环境中如何查看寄存器是否配置成功,芯片 Memory 都是存放的哪些数据,以及如何将代码中的变量定义到指定的位置,将代码加载到指定的位置运行;通过 JTAG 只想调试代码,不想破坏板卡原有的程序,该如何操作?带着这些疑惑本文会给你最终的答案,配置好开发环境,让 IAR 用起来得心应手。

       硬件平台:E3640官方开发板(SD103_E3_GATEWAY_ePOWERTRAIN_A03_019),如下图所示;

       软件平台:e3_gateway_E3640_mcu_demo_E3_SSDK_PTG3.0 中 app_demo XIP Bootloader、 sf  两个例程;

       IAR版本:IAR Embedded Workbench for ARM 8.50.6。




图1 E3640 官方开发板


二、 IAR 环境配置

1. Debug

        打开 ssdk\boards\e3_gateway\app_demo\xip\sf 工程,将 WorkSpace 选择 Debug 模式;将拨码开关拨到 JTAG 下载模式(4'b1110),在 Debug 模式下,镜像可通过 Download and Debug 将当前的工程生成的 bin 文件下载到 IRAM 中直接运行(断电重启后 IRAM 中内容丢失且不更改 Flash 中内容)。

       Debug 模式配置编译选项生成 binary :勾选 Project -> Options -> Output Converter 中 Output 标签下的 Generate additional output 选项, Output format 选择 Raw binary,配置输出文件名称为 core.bin ,如 sf.bin ,如图2所示。



                                                                                            图2 Debug 模式配置生成的 Bin 文件名称




图3 IAR 不烧写进 Flash 配置图

 







2. FlashDebug

        打开 ssdk\boards\e3_gateway\app_demo\xip\sf 工程,将 WorkSpace 选择 FlashDebug 模式;将拨码开关拨到 JTAG 下载模式(4'b1110),在 FlashDebug 模式下,镜像可通过 Project -> Download -> Download active application 下载到 Flash 中,再断电重新拨码到 Flash 启动模式(4'b0000)中启动运行。

         IAR FlashDebug 模式烧录的对象工程编译得到的 .out (ELF)文件,要让 IAR 烧录 Flash 后能够从 Flash 启动,.out (ELF)文件中需要包含以下内容:sfs binary、SF core binary、其他 core 的 binary(如果存在),如下图4 所示;



                                                                                            图4 IAR 工程的产物 .out(ELF)文件包含内容


        2.1  SFS 文件

        IAR 工程环境中勾选 Project -> Options -> Linker 中 Extra Options 标签下的 Command line options 选项,并且配置 Command line options 中的 SFS 文件( .img 格式),配置格式如下:

        --image_input

        $PROJ_DI R$\..\..\..\..\..\tools\sdtools\sfs\sfs_mt35-1-1-1.img,SFS_BIN,SFS_BIN,8

        --keep SFS_BIN



图5 IAR 工程环境引用 SFS 文件

 开发板上 Flash 分为 hyperflash 、norFlash ,根据开发板上选用 Flash 芯片的类型,选择相应的 SFS 文件,见下表:

                                                                                           Flash 类型对应 SFS 文件表

序号

文件名称

使用说明

备注

1

sfs_is25-1-1-4.img

适用于所有 sip flash、IS25系列、GD25 系列

4 线模式

2

sfs_mt35_ospi_fast_read.img

适用于 e3_gateway

mt35系列 ospi flash

8 线模式,速率较快

3

sfs_mt35-1-1-1.img

适用于所有 norflash

1 线模式,速率较慢

4

sfs_s26h-hyperflash.img

适用于所有 hyperflash

默认选项



2.2  board 文件

        IAR 通过 JTAG 烧写代码分两种,一种直接将代码加载到 IRAM 区域运行,不更改芯片 Flash 内存数据,另一种将代码烧写到 Flash 内存,再将代码运行到 IRAM 或 Flash 区域运行(具体将代码加载到哪里运行,要看 ICF 文件设定),通过配置 IAR 环境通过加载 board 文件将不同的代码加载到不同的 Flash 地址,如下图所示:



                                                                                                图6 通过 JTAG 将代码烧写进 Flash


       board文件选择,Flashloader 工程通过 board 配置文件相关联, board 配置文件的选择需要结合 PART_ID、工程类型和 Flash 类型,路径选择规则如下表所示。

                                                                                                 board 文件选择表

 

HyperFlash

NorFlash

非 XIP 类 Demo

devices\$(PART_ID)\flashloader\iram\hyperflash

devices\$(PART_ID)\flashloader\iram\norflash

XIP 类 Demo

devices\$(PART_ID)\flashloader\xip\hyperflash

devices\$(PART_ID)\flashloader\xip\norflash

        board 文件结构,把 Flash 按照区域分为不同的 section,每个 section 都指定 flash 文件、section 的范围以及 Flashloader 参数,典型的 board 文件内容如下图所示,board 文件各个参数含义如下表,



                                                                                                       board 文件参数定义表

pass

每个 pass 表示所需要烧录的一个段

Loader

该段烧录引用的 flash 文件,在该文件中关联 Flashloader,下文中解析此文件

range

该段在输出文件 .out 中对应的地址范围;

Abs_offset

烧写的 Flash 基地址

args

1)参数 0,为 core number,0 表示为 SF core,2 表示为 SP core0,3 表示为 SP core1,4 表示为 SX core0,5 表示为 SX core1,6 表示为SX in lockstep mode,7 表示 SP in lockstepmode,255 表示 SFS

2)参数 1,表示是否更新 BPT 的标志,1 表示更新 BPT,0 表示不更新;

3)参数 2,表示更新 BPT 时该镜像 entry 与 load 的地址。

 


图7 board 文件内容图

 

flash 文件结构如下表所示:

                                                                                                flash 文件结构表

exe

使用的 Flashloader 程序,相对 flash 文件的路径

macro

Flashloader 在加载前执行的 IAR 脚本,相对 flash 文件的路径

Page

该 Flash 区域的 page size

block

该 Flash 区域的 block size,格式为,n (十进制),m (16进制),n 表示 block数量,m 表示每个 block 的大小

Flash_base

该 Flash 区域的基地址,需要与 board 文件中保持一致

 


图8 Flash 文件示意图

 

2.3  ICF 文件

        IAR 根据 ICF 链接文件加载代码到不同的运行地址,本章节介绍 SSDK app_demo\xip\sf 工程为例,简单介绍一下 ICF 文件;sf 工程生成 bin 文件为 sf.bin ,外部引用 sfs 、Bootloader 等文件,通过 ICF 将代码分散加载到不同的区域运行,根据 ICF 文件内容 SFS、Bootloader、SF 文件加载到外挂 Flash 运行,将其中的 function_exe_in_ram 函数加载到 IRAM 地址 0x404104 中运行, 将 function_exe_in_tcm 函数加载到 TCM 地址 0x4c 中运行,如下图所示。

 

 







2.4  Register

       做底层开发时,避免不了跟寄存器打交道,在配置完寄存器后,可以通过查看 Register 的方式,直观查看寄存器是否配置正确,芯驰 IAR 环境如果查看外设寄存器的内容,需要在 Project -> Options -> Debugger -> Setup -> Device description file -> Override default 添加 E3.ddf 文件,如下图所示,即可以通过 View -> Register 查看外设寄存器,group 中选择你要查找的外设寄存器,如下图所示。

       有时在调试过程中,经常会遇到这样一种情况,新加入一些功能后出现了 bug,比如某个外设不工作了,或者在做代码移植时,明明代码没有改动且都移植完了,软件运行结果就是不一样,在这种情况下,在线仿真是一个比较好的手段,但是如果代码复杂,解决该问题依旧需要花费更大的精力,用户可以在 Debug 模式下,将相应的寄存器保存成文件,通过对比软件对一下,快定位出不一样的信息,再通过查看 TRM 手册,快查找哪里配置差异。


                                                                                                            图11 保存寄存器内容到本地

       从 IAR 环境中保存的寄存器内容的文件如下图12 所示,从生成的文件可以看出寄存器的顺序及配置内容与 MCU_TRM 手册 PLL 13.2.4章节内容一致,通过对比差异的寄存器的内容,快速定位差异寄存器的名称及配置位置,从而快速定位软件问题。


                                                                                                        图12 PLL1 寄存器内容图


三、 参考文档

《AppNote_E3_Boot_and_OTA_Rev01.05》

        《AppNote_E3_烧录流程_Rev2.0》



欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com

作者:Linna Wang / 王丽娜

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论