SemiDrive E3 通过外部 flash 驱动进行烧写

一、 概述

在汽车电子产品的开发中,很多都需要实现信息安全的功能,其中安全烧录也是其中一项重要的功能,主要的功能需求是控制器在需要对 Flash 进行烧写时,
通过通信总线将 flash 驱动代码从外部传入,实现刷写功能后将 flash 驱动删除。从而避免代码对 flash 进行误操作,主要本文将介绍如何基于 SemiDrive E3
平台实现安全烧录的功能。

二、 软硬件准备

(1)E3110 官方开发板

                                                        图 2.1 E3110 官方开发板

(2)Jlink V11 调试器


                                                             图 2.2 Jlink 调试器

(3)Micro USB 数据线


                                      图 2.3 Micro USB 数据线

(4)SSDK PTG3.0


                                                     图 2.4 SSDK PTG3.0 文件目录

(5)IAR (8.50.6 版本及以上)


                                                          图 2.5 IAR 软件界面

(6)串口调试工具 Putty


                                               图 2.6 串口调试工具 Putty

三、 操作步骤

由于 E3 flash 驱动中的擦写和烧录函数都需要调用到 sdrv_xspi_proto_setup 函数,该函数内部实现都是寄存器操作,不存在外部调用,
因此可以将该函数指定到固定的地址中,然后提取出来,烧录时通过外部传入后拷贝到指定的地址,烧录完成后则删除。以下将使用
ssdk\boards\e3_176_ref\driver_demo\spi_nor\spi_nor_sync_polling 路径下的这个工程进行验证。

(1)将 sdrv_xspi_proto_setup 函数指定到 TCM 段中,起始地址为 0x40


                                                         图 3.1 指定函数到固定地址


查看 map 文件发现该函数已经指定到 0x40 的地址,函数大小为 0x3ac 字节。

                                                              图 3.2 map 文件

(2)通过串口将 0x40 地址中的数据打印出来,保存成数组。


                                                       图 3.3 将函数保存成数组

(3)将 sdrv_xspi_proto_setup 函数屏蔽掉里面的函数实现,并对其中的状态标志位置为失败,目的是为了执行完这个函数后不会出现阻塞,重新编译,并提取出来保存成数组


                                               图 3.4 修改 sdrv_xspi_proto_setup 函数

                                                  图 3.5 将修改后的函数保存成数组

(4)在XSPI 驱动文件c 中的以下两个地方添加两行代码 ,保证调用空的 sdrv_xspi_proto_setup 函数不会出现阻塞。


                                                       图 3.6 第一处驱动代码修改

 

                                                      图 3.7 第二处驱动代码修改

(5)编译工程,进行验证,串口打印如下图,调用空的 sdrv_xspi_proto_setup 函数不会出现代码阻塞,读写操作均返回失败。


                                                 图 3.8 串口打印提示擦写失败

 
(6)在 c 中添加 flash_drv_load 函数,将数组中的驱动代码拷贝到 0x40 处,修改 main 函数,重新编译运行,从串口打印可以看出通过加载
完 flash 驱动到 0x40 地址后, flash 读写的测试便返回成功。


                                                        图 3.9 flash_drv_load 函数实现

                                                             图 3.10 修改 main 函数

                                                   图 3.11 修改后的串口打印

至此,我们已经实现了通过外部传入 flash 驱动进行烧写的验证。

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

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

评论