Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flash的操作函数 #1

Closed
wwwying9 opened this issue Apr 22, 2021 · 3 comments
Closed

Flash的操作函数 #1

wwwying9 opened this issue Apr 22, 2021 · 3 comments
Assignees
Labels
question Further information is requested

Comments

@wwwying9
Copy link

你好,请问tFlashOptInfo 结构体中的的函数是在 InitFlashAPI 中赋值的么? Flash的操作函数原型在哪?
如 ret = g_pstFlashOptInfo->FLASH_EraseSector(&flashSSDConfig, address, size); 这行代码最终调用了哪个函数?

@wwwying9
Copy link
Author

找到了,在另外一个工程中,只是不知道为何这样做?、

@SummerFalls
Copy link
Owner

@wwwying9

#1

Flash Driver工程:UDS_S32K144_FlashDriver

在 ECU 程序升级过程中,需要执行一段比较特殊的代码,这段代码实现对自身 Flash 的擦除与写入,又称 Flash Driver,这里简单总结一下 Flash Driver 存在的意义:

  1. 在车载 ECU 控制器中,为了安全考虑,会尽可能的避免在代码中固化有对 Flash 进行擦除或写入的操作,主要为了避免在程序跑飞时误调用该部分代码,使软件代码部分受到破坏。

  2. Flash Driver 的实现方式有两种:

  • 方式1. 将 Flash Driver 固化在底层 Flash 中,在运行的时候将 Flash 中的 Flash Driver 拷贝到 RAM 中来运行,这是比较传统到方式,但是避免不了 1 中提到的安全性问题;(这种方式实际上 S32DS 的工程只需要 Bootloader 和 APP,这时 Flash Driver 是直接包含在 Bootloader 工程里的,并且直接以函数名调用)
  • 方式2. 将 Flash Driver 这段代码的二进制文件(Hex、S19、Bin……)保存在 PC 端或后台,在每次执行 ECU刷新的 APP 下载步骤之前,将这段代码先发送给 Bootloader,Bootloader 会为这个二进制文件在 RAM 中预留好空间,之后再通过地址偏移量进行指针形式的调用,这样可以避免 1 中提到的安全性问题

不过,至于工程到底采用方式1还是方式2,最终由车厂决定,请按照车厂要求开发

  1. 在升级过程中,Flash Driver 必须在 RAM 中运行的原因是:在对 Flash 进行读写操作时,Flash 中对应的应用程序将不能运行,所以必须将 Flash Driver 拷贝到 RAM 区域。

以上一部分内容来源于互联网,但是经过了我的修改,另外,我也觉得有疑问的是:通常,在 APP 当中,也需要有 0x2E 这样的服务去写信息到 MCU 的内部 Flash,如果采用以上的方式2,显然不太可行,这时应该只能采用方式1。如果车厂的手册中 0x2E 不写内部 Flash,只写外部的 EEPROM 等器件的话,方式2可行

@SummerFalls SummerFalls self-assigned this Apr 22, 2021
@SummerFalls SummerFalls added the question Further information is requested label Apr 22, 2021
Repository owner locked and limited conversation to collaborators Apr 22, 2021
@SummerFalls SummerFalls removed their assignment Apr 22, 2021
Repository owner unlocked this conversation Apr 22, 2021
@SummerFalls SummerFalls self-assigned this Apr 22, 2021
@SummerFalls SummerFalls reopened this Apr 22, 2021
@wwwying9
Copy link
Author

谢谢解答~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants