【车载开发系列】了解FlashDriver
【车载开发系列】了解FlashDriver
【车载开发系列】FlashDriver
- 【车载开发系列】了解FlashDriver
- 一. 什么是Flash Driver
- 二. FlashDriver作用
- 三. 为什么需要刷写驱动文件
- 1)提供刷写能力
- 2)适配不同硬件
- 3)安全与隔离
- 4)支持大容量特殊操作
- 四. FlashDriver实现方式
- 五. FlashDriver的分类
- 1)PFlash Driver
- 2)DFlash Driver
- 六. FlashDriver in AUTOSAR
- 七. 总结
一. 什么是Flash Driver
它是一种用于访问和管理闪存器件的驱动程序。FlashDriver通过与计算机系统进行交互,提供了对闪存器件的读写、擦除、复制等功能。
闪存器件是一种非易失性的存储介质,用于
它通常作为操作系统或应用程序的一部分,用于处理闪存设备的存储访问请求。
二. FlashDriver作用
一般情况下FlashDriver做成之后就不经常去变它了,对于FlashDriver它有两个主要的作用:
- Bootloader升级Application;
- 另一个是存储重要信息:如DID、DTC、标定数据、信息安全Public Key等。
将与flash相关的程序单独剥离出bootloader,打包作为flash driver通过上位机下发的方式发送到单片机。
单片机在接收到完整的flash driver包并通过校验后,会将其放入ram段执行调用。
当升级过程中出现异常掉电或完成升级跳转至app程序时,暂存在ram段中的flash driver就不复存在了。
三. 为什么需要刷写驱动文件
Flash Driver的主要功能是对Flash存储器进行操作,包括擦除和写入。如果Flash Driver本身存储在Flash中,那么在更新或擦除Flash时,Flash Driver的代码可能会被擦除或修改,导致系统无法继续运行。
为了安全考虑,会尽可能的避免在代码中固化有对flash进行擦除或写入的操作,主要为了避免在程序跑飞时误调用该部分代码,使软件代码部分受到破坏。具体来说使用刷写驱动文件的理由如下。
1)提供刷写能力
某些ECU的BootLoader(引导程序,是ECU(电子控制单元)里最底层的一个小程序,有些ECU的BootLoader设计得很简单,只能做最基本的通信和控制。其次是不同硬件的Flash操作方式不同,BootLoader没法兼容所有情况,要尽量小巧,方便移植和维护。)本身不具备直接操作Flash的能力,必须先下载一段“刷写驱动”到RAM,由这段代码负责后续Flash的擦除、写入等底层操作。
2)适配不同硬件
不同芯片、不同Flash型号的操作方式不同,刷写驱动可以根据硬件定制,保证刷写流程的通用性和安全性
3)安全与隔离
刷写驱动通常只驻留在RAM,刷写完成后会被清除,避免对正常应用程序的干扰,提高安全性。
4)支持大容量特殊操作
对于大容量Flash或需要特殊操作(如ECC、分区等)的场景,刷写驱动可以实现更复杂的刷写策略。
四. FlashDriver实现方式
可以将flash driver固化在底层flash中,在运行的时候将flash中的flash driver拷贝到ram中来运行,这是比较传统的方式,但是这种方式存在着安全隐患。所以还有一种方式,就是将FlashDriver这段代码保存在PC端或后台,在每次执行升级前,将这段代码先发送给底层。
- Fls在内存中运行原因:
在升级过程中,flash driver必须在ram中运行的原因是:在对flash进行读写操作时,flash中对应的应用程序文件将不能运行,所以必须将flash driver拷贝到ram区域,这是flash硬件性能决定的。
五. FlashDriver的分类
Flash Driver,一般分为PFlash Driver和DFlash Driver。
1)PFlash Driver
一般都是在Bootloader刷写Application过程中,由上位机将PFlash Driver的数据下发给ECU,ECU把这段数据下载至RAM中,然后把New Application的数据下载至PFlash中(Code区),刷写完成后,复位,清空RAM中的Flash Driver,保证性能和安全性。
2)DFlash Driver
对于DFlash的操作,它没有必要放到RAM区域。在AUTOSAR规范中,下电存数据时(NVM存储),会在操作DFlash前,通过检查地址的合法性(是否是配置的DFlash区域)确保DFlash Driver不要操作到非法地址空间即可。一般来说,项目使用DFlash模拟EEPROM,存储的是数据,不涉及Code,所以不必担心Code被擦除。
六. FlashDriver in AUTOSAR
Fls(Flash Driver,闪存驱动) 是AUTOSAR基础软件模块之一,负责为上层软件模块提供对Flash存储设备的访问和控制。Fls模块通过抽象Flash存储设备的具体实现,提供统一的接口来简化Flash操作,提高存储管理的灵活性和可维护性。
Flash Driver一般提供以下基本操作:
- 擦除(Erase)
擦除Flash存储器的指定扇区或块。 - 写入(Write)
将数据写入Flash存储器的指定地址。 - 读取(Read)
从Flash存储器的指定地址读取数据。 - 校验(Verify)
验证写入的数据是否正确。 - 空白检查(Blank Check)
检查指定Flash区域是否为空(未写入数据)。
七. 总结
FlashDriver是用来访问与管理闪存的驱动程序,它可以分类为DFlash和PFlash两种类型,我们经常用来在线刷写的FlashDriver属于PFlash,在真正实施刷写的时候,将这个文件先下载至RAM中。为什么这个文件不放在ECU的内部,而是需要每次刷写的时候先下载至Ram中呢?如果将访问Flash的操作都放到ECU里面,那如果程序跑飞有可能导致异常访问而破坏应用程序。这个闪存驱动一般是Hex格式或者S19格式。
FlashDriver解决了面向不同硬件平台的在线刷写的问题,提高了刷写的安全性。