痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计

大家好,我是痞子衡,是正经搞技术的痞子。今天给大家带来的是痞子衡的开源项目 RT-UFL。

痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法。我们知道i.MXRT没有内置非易失性存储器,一般都要外挂一块存储器用于加载启动,最常用的是通过FlexSPI外设外挂串行NOR Flash,挂了NOR Flash我们既可以离线启动,也可以在线调试,而在线调试就必然离不开下载算法。

因为是外挂Flash,所以下载算法需要根据Flash的连接以及型号而定,这就需要根据客户板子实际情况来制作匹配的下载算法。下载算法对于了解其原理的人来说,制作一个并不难,但是对于不了解的人来说却又不容易。从我们i.MXRT原厂技术支持角度,重复的工作我们又不太想一次次去做,基于此,痞子衡发起了一个开源项目,命名为 RT-UFL,就是设计一个超级下载算法。这个项目目前还处于研发阶段,如果大家有更好的建议和想法,欢迎在文章下面留言。

项目地址:https://github.com/JayHeng/RT-UFL

一、简介

RT-UFL 是一个适用全平台 i.MXRT 的通用 Flash 下载算法项目,项目的最终目标是做到一个 .FLM 文件适用所有的i.MXRT开发板,且不论其连接的哪款 Flash 型号。

RT-UFL 主要是为了解决如下七大痛点:

1. 每一个i.MXRT型号都需要一个单独的下载算法文件.
2. 同一个i.MXRT型号搭配不同属性的Flash也需要不同的算法文件.
3. 同一个i.MXRT型号搭配相同特性的Flash但Flash出厂设置不同(有无SFDP、QE默认状态位)也需要不同的算法文件.
4. Flash连接到i.MXRT不同的FlexSPI引脚上也可能需要不同的算法文件.
5. 如果下载算法公共设计部分有不可忽视的缺陷,需要整体更新全部i.MXRT型号对应的下载算法.
6. 对于下载算法的发布,没有一个统一的版本管理.
7. 在量产过程中,如果更换了Flash型号,则需要对应更换算法文件,对于工厂流程来说有点麻烦.

RT-UFL 从设计上分为三层:

  • 最底层是Driver层:即Low-level驱动,对于i.MXRT来说,就是FlexSPI模块的驱动。
  • 中间是Adapter层:这一层是最核心的,它实现了全i.MXRT平台、全Flash型号的自适应支持。
  • 最顶层是API层:这属于下载算法模板,其实由集成开发环境(Keil、JLink)决定了,不可更改。

二、特性

为了使 RT-UFL 成为一个超级下载算法,它至少要包含如下八个特性:

1. 可以跑在所有i.MXRT型号下.
2. 可以支持能用作i.MXRT可启动设备的所有类型Flash.
3. 可以擦写连在i.MXRT可启动FleXSPI引脚上的Flash.
4. 可以自动识别连接的Flash类型(QuadSPI, Octal-SPI, Hyperbus).
5. 可以自动检测Flash中有无SFDP及其版本.
6. 可以支持不含SFDP表的Flash.
7. 可以自动识别Flash的默认QE状态并开启QE.
8. 可以输出一些有效的Flash信息以便后续启动.
posted @ 2020-11-09 23:37  痞子衡  阅读(1249)  评论(0编辑  收藏  举报