• 【海东青电子-简书】touchgfx 之 《IAR-hex文件的烧写方法》


    IAR ---- 跟KEIL一样,TouchGFX自动生成的工程项目,在IAR中同样不能正确烧写片外flash!不过,经过适当的手动配置,IAR是可以烧写片外flash的,只是要费些周折。下面以Clock例程为例说明配置过程。

    以STM32F769I-DISCO板子为例,创建一个TouchGFX工程,并使用系统自带的Clock例程:

     

     
    图一

    不需要编写任何代码,使用Clock例程就行,先运行VS、看看在仿真器上是否能正确跑起来这个Clock。然后,进入IAR,因为使用的是目前最新的IAR版本V8.32,所以要使用 IAR8.x 这个目录下的IAR工程:

     

     
    图二

    这个目录中还有 .board、.flash等文件,这些文件非常重要,烧写flash就靠他们了,后面将详述。双击 application.eww ,打开IAR,如果弹出询问是否升级的窗口:

     

     
    图三

    选择 Yes ,转换成新版的工程文件,然后就进入了IAR界面。 按下 F7 编译:

     

     
    图四

    IAR正确生成了out 和 hex 目标文件。尝试下载:

     

     
    图五

    弹出一个错误信息:

     

     
    图六

    大意是:系统在生成flash算法时出错了,左下方的 Debug Log 中有详细解释:

     

     
    图七

    图七中显示了一个警告:烧写flash警告,代码段位于地址 [0x90000000,0x9003CC5F] 范围的将不能被烧写。这个地址范围正是片外flash的地址,检查一下当前IAR关于烧写flash的配置情况,Alt+F7 打开工程选项,在  =>调试器=>下载  选项页下,有一个 .board 文件:

     

     
    图八

    IAR项目主目录下有一个 FlashSTM32F76xxI.board 文件,它描述了目标板子上flash的“配置”情况,在上图中直接点击 Edit 按钮就可以打开这个文件:

     

     
    图九

    可以看到,.board 文件中描述了F7片内2个地址段对应的烧写算法文件(.flash文件),但没有配置片外地址为0x9000 0000开始的flash对应的算法文件,所以造成烧写失败。

    通过查找IAR的相关资料,并仿照另外一个IAR支持片外flash烧写的ST官方开发板的 .board 文件,针对 STM32F769I-DISCO 板子重新编写了几个烧写片外flash的算法文件、一共6个文件如下:

     

     
    图十
     
    算法文件下载

    链接:https://pan.baidu.com/s/16BPxsdbIBEbyMNknpBeB9Q
    提取码:9mkz

    将这6个文件全部copy到IAR工程目录下:

     

     
    图十一

    在IAR中重新指定烧写flash的 .board 文件为 FlashSTM32F769I-DISCO.board :

     

     
    图十二

     

    再次点击 Edit 查看:

     

     
    图十三

    地址0x9000 0000已经有对应的算法文件了(并且,去掉了本项目中没用到的TCM flash)。再次下载,目标板成功烧写:

     

     
    图十四

    板子实际跑的效果:

     

     
    图十五

    也许有网友好奇:那个 FlashSTM32F769I-DISCO.board 文件,以及其他5个文件是怎么做出来的?对这些文件制作过程以及分析思路感兴趣的朋友请继续往下看。

    烧写算法文件制作

    我们使用自己修改的 .board 文件成功实现了IAR烧写片外flash,下面说说这个 .board 文件的制作过程。

    KEIL中的flash算法烧写文件是 *.flm 文件,例如,STM32F769I-DISCO 板子对应的是 STM32F769I_QSPI_Macronix.FLM  文件:

     

     
    图一

    这是一个经过编译的二进制文件,ST的每一个开发板都对应着一个 flm 文件。在IAR中,flash算法烧写文件是 *.board 文件:

     

     
    图二

    这是个文本文件(脚本),内容是若干flash地址对应的 .flash 描述文件。以 FlashSTM32F7xx_STM32F746G-DISCO.board 为例,其中包含了3个 .flash 文件:

    1)0x08000000 0x080FFFFF      FlashSTM32F74xxG.flash

    2)0x00200000 0x002FFFFF      FlashSTM32F74xxG_TCM.flash

    3)0x90000000 0x90FFFFFF     FlashSTM32F7xx_QSPI_STM32F746G-DISCO.flash

    .flash 文件也是文本文件(脚本),包括2部分内容:指明如何读写flash的二进制算法文件 .out ,以及描述flash总线初始化、芯片pin定义的 .mac 文件。以 FlashSTM32F7xx_QSPI_STM32F746G-DISCO.flash 为例,它描述了片外flash如何烧写,其中一个文件是 FlashSTM32F7xx_QSPI_MICRON.out ,表明flash品牌是MICRON,这是个二进制文件,所有MICRON的flash都是用它来读写;另一个文件是 FlashSTM32F7xx_QSPI_STM32F746G-DISCO.mac,是个文本文件,打开这个文件可以看到 QSPI 接口用到的6个pins :PB2、PB6、PD11、PD12、PD13、PE2。

    总结一下IAR烧写flash过程:先读取 *.board 脚本文件,再读取不同地址映射的 *.flash 文件,从中获得读写flash的二进制代码 *.out 文件,同时读取 *.mac 宏定义脚本文件、对MCU内部、外部flash初始化,并获得片外flash接口的pin定义,至此,烧写片内、片外flash的信息已经齐备,之后就是具体的烧写操作了。

    了解了这个过程,下面可以开始处理如何烧写 STM32F769I-DISCO 板子了。这个虽然是ST官方的板子,但 IAR V8.32 并不直接支持烧写。第一步,我们先要弄明白板子上flash的型号和pin定义,在《TouchGFX工程中hex目标文件的烧写方法(一)使用ST-LINK》中,已经知道片外flash是 MACRONIX 的 MX25L512G ,管脚定义见下图:

     

     
    图三

     

     
    图四
     
    图五

    QSPI接口片外flash的6个pin是:PB2、PB6、PC9、PC10、PE2、PD13。很遗憾,IAR自带的 STM32F746G-DISCO 板子的算法文件描述的是MICRON的芯片、并且QSPI管脚定义也不兼容,无法直接拿来使用。经过仔细查找,发现 FlashSTM32F7xx_QSPI_STM32F723E-DISCO.mac 文件中定义的6个pin跟  STM32F769I-DISCO 板子上的完全相同!就是说,把 FlashSTM32F7xx_STM32F723E-DISCO.board、FlashSTM32F7xx_QSPI_STM32F723E-DISCO.flash、FlashSTM32F7xx_QSPI_STM32F723E-DISCO.mac 移植过来(几乎是原样照搬^_^)就行了。

     

     
    图六

    修改过的文件改名为:FlashSTM32F769I-DISCO.board (所有移植后的文件下载地址见文章末尾),在IAR中加载这个 .board 后、可以烧写片外flash了。

    有一个细节需要注意:IAR项目主目录下有一个自动生成的 FlashSTM32F7xxx_384kB.out 文件,如果使用这个文件,板子可以烧写、不报错,但板子reset后并不能正确运行!而使用 FlashSTM32F7xxx_192kB.out 则没有问题。没弄明白这是为什么、也不一定有代表性,这里记录一下、仅供参考。

     
    来源
  • 相关阅读:
    阿里DatatX mysql8往 Elasticsearch 7 插入时间数据 时区引发的问题
    通俗易懂 k8s (3):kubernetes 服务的注册与发现
    ReplicaSet 和 ReplicationController 的区别
    使用Go module导入本地包
    k8s之statefulset控制器
    终于成功部署 Kubernetes HPA 基于 QPS 进行自动伸缩
    Atitit drmmr outline org stat vb u33.docx Atitit drmmr outline org stat v0 taf.docx Atitit drmmr out
    Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
    Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map >> spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
    Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  • 原文地址:https://www.cnblogs.com/skullboyer/p/12261893.html
Copyright © 2020-2023  润新知